1package siterecovery
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/date"
15	"github.com/Azure/go-autorest/autorest/to"
16	"github.com/Azure/go-autorest/tracing"
17	"net/http"
18)
19
20// The package's fully qualified name.
21const fqdn = "github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2018-07-10/siterecovery"
22
23// A2AAddDisksInput a2A add disk(s) input.
24type A2AAddDisksInput struct {
25	// VMDisks - The list of vm disk details.
26	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
27	// VMManagedDisks - The list of vm managed disk details.
28	VMManagedDisks *[]A2AVMManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
29	// InstanceType - Possible values include: 'InstanceTypeAddDisksProviderSpecificInput', 'InstanceTypeA2A'
30	InstanceType InstanceType `json:"instanceType,omitempty"`
31}
32
33// MarshalJSON is the custom marshaler for A2AAddDisksInput.
34func (aadi A2AAddDisksInput) MarshalJSON() ([]byte, error) {
35	aadi.InstanceType = InstanceTypeA2A
36	objectMap := make(map[string]interface{})
37	if aadi.VMDisks != nil {
38		objectMap["vmDisks"] = aadi.VMDisks
39	}
40	if aadi.VMManagedDisks != nil {
41		objectMap["vmManagedDisks"] = aadi.VMManagedDisks
42	}
43	if aadi.InstanceType != "" {
44		objectMap["instanceType"] = aadi.InstanceType
45	}
46	return json.Marshal(objectMap)
47}
48
49// AsA2AAddDisksInput is the BasicAddDisksProviderSpecificInput implementation for A2AAddDisksInput.
50func (aadi A2AAddDisksInput) AsA2AAddDisksInput() (*A2AAddDisksInput, bool) {
51	return &aadi, true
52}
53
54// AsAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for A2AAddDisksInput.
55func (aadi A2AAddDisksInput) AsAddDisksProviderSpecificInput() (*AddDisksProviderSpecificInput, bool) {
56	return nil, false
57}
58
59// AsBasicAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for A2AAddDisksInput.
60func (aadi A2AAddDisksInput) AsBasicAddDisksProviderSpecificInput() (BasicAddDisksProviderSpecificInput, bool) {
61	return &aadi, true
62}
63
64// A2AApplyRecoveryPointInput applyRecoveryPoint input specific to A2A provider.
65type A2AApplyRecoveryPointInput struct {
66	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
67	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
68}
69
70// MarshalJSON is the custom marshaler for A2AApplyRecoveryPointInput.
71func (aarpi A2AApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
72	aarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A
73	objectMap := make(map[string]interface{})
74	if aarpi.InstanceType != "" {
75		objectMap["instanceType"] = aarpi.InstanceType
76	}
77	return json.Marshal(objectMap)
78}
79
80// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
81func (aarpi A2AApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
82	return &aarpi, true
83}
84
85// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
86func (aarpi A2AApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
87	return nil, false
88}
89
90// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
91func (aarpi A2AApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
92	return nil, false
93}
94
95// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
96func (aarpi A2AApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
97	return nil, false
98}
99
100// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
101func (aarpi A2AApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
102	return nil, false
103}
104
105// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
106func (aarpi A2AApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
107	return &aarpi, true
108}
109
110// A2AContainerCreationInput a2A cloud creation input.
111type A2AContainerCreationInput struct {
112	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero'
113	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerCreationInput `json:"instanceType,omitempty"`
114}
115
116// MarshalJSON is the custom marshaler for A2AContainerCreationInput.
117func (acci A2AContainerCreationInput) MarshalJSON() ([]byte, error) {
118	acci.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A
119	objectMap := make(map[string]interface{})
120	if acci.InstanceType != "" {
121		objectMap["instanceType"] = acci.InstanceType
122	}
123	return json.Marshal(objectMap)
124}
125
126// AsA2AContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
127func (acci A2AContainerCreationInput) AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool) {
128	return &acci, true
129}
130
131// AsVMwareCbtContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
132func (acci A2AContainerCreationInput) AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool) {
133	return nil, false
134}
135
136// AsReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
137func (acci A2AContainerCreationInput) AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool) {
138	return nil, false
139}
140
141// AsBasicReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
142func (acci A2AContainerCreationInput) AsBasicReplicationProviderSpecificContainerCreationInput() (BasicReplicationProviderSpecificContainerCreationInput, bool) {
143	return &acci, true
144}
145
146// A2AContainerMappingInput a2A container mapping input.
147type A2AContainerMappingInput struct {
148	// AgentAutoUpdateStatus - A value indicating whether the auto update is enabled. Possible values include: 'Disabled', 'Enabled'
149	AgentAutoUpdateStatus AgentAutoUpdateStatus `json:"agentAutoUpdateStatus,omitempty"`
150	// AutomationAccountArmID - The automation account arm id.
151	AutomationAccountArmID *string `json:"automationAccountArmId,omitempty"`
152	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt'
153	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerMappingInput `json:"instanceType,omitempty"`
154}
155
156// MarshalJSON is the custom marshaler for A2AContainerMappingInput.
157func (acmi A2AContainerMappingInput) MarshalJSON() ([]byte, error) {
158	acmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A
159	objectMap := make(map[string]interface{})
160	if acmi.AgentAutoUpdateStatus != "" {
161		objectMap["agentAutoUpdateStatus"] = acmi.AgentAutoUpdateStatus
162	}
163	if acmi.AutomationAccountArmID != nil {
164		objectMap["automationAccountArmId"] = acmi.AutomationAccountArmID
165	}
166	if acmi.InstanceType != "" {
167		objectMap["instanceType"] = acmi.InstanceType
168	}
169	return json.Marshal(objectMap)
170}
171
172// AsA2AContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
173func (acmi A2AContainerMappingInput) AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool) {
174	return &acmi, true
175}
176
177// AsVMwareCbtContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
178func (acmi A2AContainerMappingInput) AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool) {
179	return nil, false
180}
181
182// AsReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
183func (acmi A2AContainerMappingInput) AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool) {
184	return nil, false
185}
186
187// AsBasicReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
188func (acmi A2AContainerMappingInput) AsBasicReplicationProviderSpecificContainerMappingInput() (BasicReplicationProviderSpecificContainerMappingInput, bool) {
189	return &acmi, true
190}
191
192// A2ACreateProtectionIntentInput a2A create protection intent input.
193type A2ACreateProtectionIntentInput struct {
194	// FabricObjectID - The fabric specific object Id of the virtual machine.
195	FabricObjectID *string `json:"fabricObjectId,omitempty"`
196	// PrimaryLocation - The primary location for the virtual machine.
197	PrimaryLocation *string `json:"primaryLocation,omitempty"`
198	// RecoveryLocation - The recovery location for the virtual machine.
199	RecoveryLocation *string `json:"recoveryLocation,omitempty"`
200	// RecoverySubscriptionID - The recovery subscription Id of the virtual machine.
201	RecoverySubscriptionID *string `json:"recoverySubscriptionId,omitempty"`
202	// RecoveryAvailabilityType - The recovery availability type of the virtual machine. Possible values include: 'Single', 'AvailabilitySet', 'AvailabilityZone'
203	RecoveryAvailabilityType A2ARecoveryAvailabilityType `json:"recoveryAvailabilityType,omitempty"`
204	// ProtectionProfileCustomInput - The protection profile custom inputs.
205	ProtectionProfileCustomInput BasicProtectionProfileCustomDetails `json:"protectionProfileCustomInput,omitempty"`
206	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
207	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
208	// PrimaryStagingStorageAccountCustomInput - The primary staging storage account input.
209	PrimaryStagingStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"primaryStagingStorageAccountCustomInput,omitempty"`
210	// RecoveryAvailabilitySetCustomInput - The recovery availability set input.
211	RecoveryAvailabilitySetCustomInput BasicRecoveryAvailabilitySetCustomDetails `json:"recoveryAvailabilitySetCustomInput,omitempty"`
212	// RecoveryVirtualNetworkCustomInput - The recovery virtual network input.
213	RecoveryVirtualNetworkCustomInput BasicRecoveryVirtualNetworkCustomDetails `json:"recoveryVirtualNetworkCustomInput,omitempty"`
214	// RecoveryProximityPlacementGroupCustomInput - The recovery proximity placement group custom input.
215	RecoveryProximityPlacementGroupCustomInput BasicRecoveryProximityPlacementGroupCustomDetails `json:"recoveryProximityPlacementGroupCustomInput,omitempty"`
216	// AutoProtectionOfDataDisk - A value indicating whether the auto protection is enabled. Possible values include: 'AutoProtectionOfDataDiskDisabled', 'AutoProtectionOfDataDiskEnabled'
217	AutoProtectionOfDataDisk AutoProtectionOfDataDisk `json:"autoProtectionOfDataDisk,omitempty"`
218	// VMDisks - The list of vm disk inputs.
219	VMDisks *[]A2AProtectionIntentDiskInputDetails `json:"vmDisks,omitempty"`
220	// VMManagedDisks - The list of vm managed disk inputs.
221	VMManagedDisks *[]A2AProtectionIntentManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
222	// MultiVMGroupName - The multi vm group name.
223	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
224	// MultiVMGroupID - The multi vm group id.
225	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
226	// RecoveryBootDiagStorageAccount - The boot diagnostic storage account.
227	RecoveryBootDiagStorageAccount BasicStorageAccountCustomDetails `json:"recoveryBootDiagStorageAccount,omitempty"`
228	// DiskEncryptionInfo - The recovery disk encryption information (for two pass flows).
229	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
230	// RecoveryAvailabilityZone - The recovery availability zone.
231	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
232	// InstanceType - Possible values include: 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeCreateProtectionIntentProviderSpecificDetails', 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A'
233	InstanceType InstanceTypeBasicCreateProtectionIntentProviderSpecificDetails `json:"instanceType,omitempty"`
234}
235
236// MarshalJSON is the custom marshaler for A2ACreateProtectionIntentInput.
237func (acpii A2ACreateProtectionIntentInput) MarshalJSON() ([]byte, error) {
238	acpii.InstanceType = InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A
239	objectMap := make(map[string]interface{})
240	if acpii.FabricObjectID != nil {
241		objectMap["fabricObjectId"] = acpii.FabricObjectID
242	}
243	if acpii.PrimaryLocation != nil {
244		objectMap["primaryLocation"] = acpii.PrimaryLocation
245	}
246	if acpii.RecoveryLocation != nil {
247		objectMap["recoveryLocation"] = acpii.RecoveryLocation
248	}
249	if acpii.RecoverySubscriptionID != nil {
250		objectMap["recoverySubscriptionId"] = acpii.RecoverySubscriptionID
251	}
252	if acpii.RecoveryAvailabilityType != "" {
253		objectMap["recoveryAvailabilityType"] = acpii.RecoveryAvailabilityType
254	}
255	objectMap["protectionProfileCustomInput"] = acpii.ProtectionProfileCustomInput
256	if acpii.RecoveryResourceGroupID != nil {
257		objectMap["recoveryResourceGroupId"] = acpii.RecoveryResourceGroupID
258	}
259	objectMap["primaryStagingStorageAccountCustomInput"] = acpii.PrimaryStagingStorageAccountCustomInput
260	objectMap["recoveryAvailabilitySetCustomInput"] = acpii.RecoveryAvailabilitySetCustomInput
261	objectMap["recoveryVirtualNetworkCustomInput"] = acpii.RecoveryVirtualNetworkCustomInput
262	objectMap["recoveryProximityPlacementGroupCustomInput"] = acpii.RecoveryProximityPlacementGroupCustomInput
263	if acpii.AutoProtectionOfDataDisk != "" {
264		objectMap["autoProtectionOfDataDisk"] = acpii.AutoProtectionOfDataDisk
265	}
266	if acpii.VMDisks != nil {
267		objectMap["vmDisks"] = acpii.VMDisks
268	}
269	if acpii.VMManagedDisks != nil {
270		objectMap["vmManagedDisks"] = acpii.VMManagedDisks
271	}
272	if acpii.MultiVMGroupName != nil {
273		objectMap["multiVmGroupName"] = acpii.MultiVMGroupName
274	}
275	if acpii.MultiVMGroupID != nil {
276		objectMap["multiVmGroupId"] = acpii.MultiVMGroupID
277	}
278	objectMap["recoveryBootDiagStorageAccount"] = acpii.RecoveryBootDiagStorageAccount
279	if acpii.DiskEncryptionInfo != nil {
280		objectMap["diskEncryptionInfo"] = acpii.DiskEncryptionInfo
281	}
282	if acpii.RecoveryAvailabilityZone != nil {
283		objectMap["recoveryAvailabilityZone"] = acpii.RecoveryAvailabilityZone
284	}
285	if acpii.InstanceType != "" {
286		objectMap["instanceType"] = acpii.InstanceType
287	}
288	return json.Marshal(objectMap)
289}
290
291// AsA2ACreateProtectionIntentInput is the BasicCreateProtectionIntentProviderSpecificDetails implementation for A2ACreateProtectionIntentInput.
292func (acpii A2ACreateProtectionIntentInput) AsA2ACreateProtectionIntentInput() (*A2ACreateProtectionIntentInput, bool) {
293	return &acpii, true
294}
295
296// AsCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for A2ACreateProtectionIntentInput.
297func (acpii A2ACreateProtectionIntentInput) AsCreateProtectionIntentProviderSpecificDetails() (*CreateProtectionIntentProviderSpecificDetails, bool) {
298	return nil, false
299}
300
301// AsBasicCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for A2ACreateProtectionIntentInput.
302func (acpii A2ACreateProtectionIntentInput) AsBasicCreateProtectionIntentProviderSpecificDetails() (BasicCreateProtectionIntentProviderSpecificDetails, bool) {
303	return &acpii, true
304}
305
306// UnmarshalJSON is the custom unmarshaler for A2ACreateProtectionIntentInput struct.
307func (acpii *A2ACreateProtectionIntentInput) UnmarshalJSON(body []byte) error {
308	var m map[string]*json.RawMessage
309	err := json.Unmarshal(body, &m)
310	if err != nil {
311		return err
312	}
313	for k, v := range m {
314		switch k {
315		case "fabricObjectId":
316			if v != nil {
317				var fabricObjectID string
318				err = json.Unmarshal(*v, &fabricObjectID)
319				if err != nil {
320					return err
321				}
322				acpii.FabricObjectID = &fabricObjectID
323			}
324		case "primaryLocation":
325			if v != nil {
326				var primaryLocation string
327				err = json.Unmarshal(*v, &primaryLocation)
328				if err != nil {
329					return err
330				}
331				acpii.PrimaryLocation = &primaryLocation
332			}
333		case "recoveryLocation":
334			if v != nil {
335				var recoveryLocation string
336				err = json.Unmarshal(*v, &recoveryLocation)
337				if err != nil {
338					return err
339				}
340				acpii.RecoveryLocation = &recoveryLocation
341			}
342		case "recoverySubscriptionId":
343			if v != nil {
344				var recoverySubscriptionID string
345				err = json.Unmarshal(*v, &recoverySubscriptionID)
346				if err != nil {
347					return err
348				}
349				acpii.RecoverySubscriptionID = &recoverySubscriptionID
350			}
351		case "recoveryAvailabilityType":
352			if v != nil {
353				var recoveryAvailabilityType A2ARecoveryAvailabilityType
354				err = json.Unmarshal(*v, &recoveryAvailabilityType)
355				if err != nil {
356					return err
357				}
358				acpii.RecoveryAvailabilityType = recoveryAvailabilityType
359			}
360		case "protectionProfileCustomInput":
361			if v != nil {
362				protectionProfileCustomInput, err := unmarshalBasicProtectionProfileCustomDetails(*v)
363				if err != nil {
364					return err
365				}
366				acpii.ProtectionProfileCustomInput = protectionProfileCustomInput
367			}
368		case "recoveryResourceGroupId":
369			if v != nil {
370				var recoveryResourceGroupID string
371				err = json.Unmarshal(*v, &recoveryResourceGroupID)
372				if err != nil {
373					return err
374				}
375				acpii.RecoveryResourceGroupID = &recoveryResourceGroupID
376			}
377		case "primaryStagingStorageAccountCustomInput":
378			if v != nil {
379				primaryStagingStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
380				if err != nil {
381					return err
382				}
383				acpii.PrimaryStagingStorageAccountCustomInput = primaryStagingStorageAccountCustomInput
384			}
385		case "recoveryAvailabilitySetCustomInput":
386			if v != nil {
387				recoveryAvailabilitySetCustomInput, err := unmarshalBasicRecoveryAvailabilitySetCustomDetails(*v)
388				if err != nil {
389					return err
390				}
391				acpii.RecoveryAvailabilitySetCustomInput = recoveryAvailabilitySetCustomInput
392			}
393		case "recoveryVirtualNetworkCustomInput":
394			if v != nil {
395				recoveryVirtualNetworkCustomInput, err := unmarshalBasicRecoveryVirtualNetworkCustomDetails(*v)
396				if err != nil {
397					return err
398				}
399				acpii.RecoveryVirtualNetworkCustomInput = recoveryVirtualNetworkCustomInput
400			}
401		case "recoveryProximityPlacementGroupCustomInput":
402			if v != nil {
403				recoveryProximityPlacementGroupCustomInput, err := unmarshalBasicRecoveryProximityPlacementGroupCustomDetails(*v)
404				if err != nil {
405					return err
406				}
407				acpii.RecoveryProximityPlacementGroupCustomInput = recoveryProximityPlacementGroupCustomInput
408			}
409		case "autoProtectionOfDataDisk":
410			if v != nil {
411				var autoProtectionOfDataDisk AutoProtectionOfDataDisk
412				err = json.Unmarshal(*v, &autoProtectionOfDataDisk)
413				if err != nil {
414					return err
415				}
416				acpii.AutoProtectionOfDataDisk = autoProtectionOfDataDisk
417			}
418		case "vmDisks":
419			if v != nil {
420				var VMDisks []A2AProtectionIntentDiskInputDetails
421				err = json.Unmarshal(*v, &VMDisks)
422				if err != nil {
423					return err
424				}
425				acpii.VMDisks = &VMDisks
426			}
427		case "vmManagedDisks":
428			if v != nil {
429				var VMManagedDisks []A2AProtectionIntentManagedDiskInputDetails
430				err = json.Unmarshal(*v, &VMManagedDisks)
431				if err != nil {
432					return err
433				}
434				acpii.VMManagedDisks = &VMManagedDisks
435			}
436		case "multiVmGroupName":
437			if v != nil {
438				var multiVMGroupName string
439				err = json.Unmarshal(*v, &multiVMGroupName)
440				if err != nil {
441					return err
442				}
443				acpii.MultiVMGroupName = &multiVMGroupName
444			}
445		case "multiVmGroupId":
446			if v != nil {
447				var multiVMGroupID string
448				err = json.Unmarshal(*v, &multiVMGroupID)
449				if err != nil {
450					return err
451				}
452				acpii.MultiVMGroupID = &multiVMGroupID
453			}
454		case "recoveryBootDiagStorageAccount":
455			if v != nil {
456				recoveryBootDiagStorageAccount, err := unmarshalBasicStorageAccountCustomDetails(*v)
457				if err != nil {
458					return err
459				}
460				acpii.RecoveryBootDiagStorageAccount = recoveryBootDiagStorageAccount
461			}
462		case "diskEncryptionInfo":
463			if v != nil {
464				var diskEncryptionInfo DiskEncryptionInfo
465				err = json.Unmarshal(*v, &diskEncryptionInfo)
466				if err != nil {
467					return err
468				}
469				acpii.DiskEncryptionInfo = &diskEncryptionInfo
470			}
471		case "recoveryAvailabilityZone":
472			if v != nil {
473				var recoveryAvailabilityZone string
474				err = json.Unmarshal(*v, &recoveryAvailabilityZone)
475				if err != nil {
476					return err
477				}
478				acpii.RecoveryAvailabilityZone = &recoveryAvailabilityZone
479			}
480		case "instanceType":
481			if v != nil {
482				var instanceType InstanceTypeBasicCreateProtectionIntentProviderSpecificDetails
483				err = json.Unmarshal(*v, &instanceType)
484				if err != nil {
485					return err
486				}
487				acpii.InstanceType = instanceType
488			}
489		}
490	}
491
492	return nil
493}
494
495// A2AEnableProtectionInput a2A enable protection input.
496type A2AEnableProtectionInput struct {
497	// FabricObjectID - The fabric specific object Id of the virtual machine.
498	FabricObjectID *string `json:"fabricObjectId,omitempty"`
499	// RecoveryContainerID - The recovery container Id.
500	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
501	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
502	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
503	// RecoveryCloudServiceID - The recovery cloud service Id. Valid for V1 scenarios.
504	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
505	// RecoveryAvailabilitySetID - The recovery availability set Id.
506	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
507	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
508	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
509	// VMDisks - The list of vm disk details.
510	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
511	// VMManagedDisks - The list of vm managed disk details.
512	VMManagedDisks *[]A2AVMManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
513	// MultiVMGroupName - The multi vm group name.
514	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
515	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
516	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
517	// DiskEncryptionInfo - The recovery disk encryption information.
518	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
519	// RecoveryAvailabilityZone - The recovery availability zone.
520	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
521	// RecoveryAzureNetworkID - The recovery Azure virtual network ARM id.
522	RecoveryAzureNetworkID *string `json:"recoveryAzureNetworkId,omitempty"`
523	// RecoverySubnetName - The recovery subnet name.
524	RecoverySubnetName *string `json:"recoverySubnetName,omitempty"`
525	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
526	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
527}
528
529// MarshalJSON is the custom marshaler for A2AEnableProtectionInput.
530func (aepi A2AEnableProtectionInput) MarshalJSON() ([]byte, error) {
531	aepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A
532	objectMap := make(map[string]interface{})
533	if aepi.FabricObjectID != nil {
534		objectMap["fabricObjectId"] = aepi.FabricObjectID
535	}
536	if aepi.RecoveryContainerID != nil {
537		objectMap["recoveryContainerId"] = aepi.RecoveryContainerID
538	}
539	if aepi.RecoveryResourceGroupID != nil {
540		objectMap["recoveryResourceGroupId"] = aepi.RecoveryResourceGroupID
541	}
542	if aepi.RecoveryCloudServiceID != nil {
543		objectMap["recoveryCloudServiceId"] = aepi.RecoveryCloudServiceID
544	}
545	if aepi.RecoveryAvailabilitySetID != nil {
546		objectMap["recoveryAvailabilitySetId"] = aepi.RecoveryAvailabilitySetID
547	}
548	if aepi.RecoveryProximityPlacementGroupID != nil {
549		objectMap["recoveryProximityPlacementGroupId"] = aepi.RecoveryProximityPlacementGroupID
550	}
551	if aepi.VMDisks != nil {
552		objectMap["vmDisks"] = aepi.VMDisks
553	}
554	if aepi.VMManagedDisks != nil {
555		objectMap["vmManagedDisks"] = aepi.VMManagedDisks
556	}
557	if aepi.MultiVMGroupName != nil {
558		objectMap["multiVmGroupName"] = aepi.MultiVMGroupName
559	}
560	if aepi.RecoveryBootDiagStorageAccountID != nil {
561		objectMap["recoveryBootDiagStorageAccountId"] = aepi.RecoveryBootDiagStorageAccountID
562	}
563	if aepi.DiskEncryptionInfo != nil {
564		objectMap["diskEncryptionInfo"] = aepi.DiskEncryptionInfo
565	}
566	if aepi.RecoveryAvailabilityZone != nil {
567		objectMap["recoveryAvailabilityZone"] = aepi.RecoveryAvailabilityZone
568	}
569	if aepi.RecoveryAzureNetworkID != nil {
570		objectMap["recoveryAzureNetworkId"] = aepi.RecoveryAzureNetworkID
571	}
572	if aepi.RecoverySubnetName != nil {
573		objectMap["recoverySubnetName"] = aepi.RecoverySubnetName
574	}
575	if aepi.InstanceType != "" {
576		objectMap["instanceType"] = aepi.InstanceType
577	}
578	return json.Marshal(objectMap)
579}
580
581// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
582func (aepi A2AEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
583	return &aepi, true
584}
585
586// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
587func (aepi A2AEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
588	return nil, false
589}
590
591// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
592func (aepi A2AEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
593	return nil, false
594}
595
596// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
597func (aepi A2AEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
598	return nil, false
599}
600
601// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
602func (aepi A2AEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
603	return nil, false
604}
605
606// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
607func (aepi A2AEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
608	return nil, false
609}
610
611// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
612func (aepi A2AEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
613	return nil, false
614}
615
616// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
617func (aepi A2AEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
618	return &aepi, true
619}
620
621// A2AEventDetails model class for event details of a A2A event.
622type A2AEventDetails struct {
623	// ProtectedItemName - The protected item arm name.
624	ProtectedItemName *string `json:"protectedItemName,omitempty"`
625	// FabricObjectID - The azure vm arm id.
626	FabricObjectID *string `json:"fabricObjectId,omitempty"`
627	// FabricName - Fabric arm name.
628	FabricName *string `json:"fabricName,omitempty"`
629	// FabricLocation - The fabric location.
630	FabricLocation *string `json:"fabricLocation,omitempty"`
631	// RemoteFabricName - Remote fabric arm name.
632	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
633	// RemoteFabricLocation - Remote fabric location.
634	RemoteFabricLocation *string `json:"remoteFabricLocation,omitempty"`
635	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
636	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
637}
638
639// MarshalJSON is the custom marshaler for A2AEventDetails.
640func (aed A2AEventDetails) MarshalJSON() ([]byte, error) {
641	aed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A
642	objectMap := make(map[string]interface{})
643	if aed.ProtectedItemName != nil {
644		objectMap["protectedItemName"] = aed.ProtectedItemName
645	}
646	if aed.FabricObjectID != nil {
647		objectMap["fabricObjectId"] = aed.FabricObjectID
648	}
649	if aed.FabricName != nil {
650		objectMap["fabricName"] = aed.FabricName
651	}
652	if aed.FabricLocation != nil {
653		objectMap["fabricLocation"] = aed.FabricLocation
654	}
655	if aed.RemoteFabricName != nil {
656		objectMap["remoteFabricName"] = aed.RemoteFabricName
657	}
658	if aed.RemoteFabricLocation != nil {
659		objectMap["remoteFabricLocation"] = aed.RemoteFabricLocation
660	}
661	if aed.InstanceType != "" {
662		objectMap["instanceType"] = aed.InstanceType
663	}
664	return json.Marshal(objectMap)
665}
666
667// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
668func (aed A2AEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
669	return &aed, true
670}
671
672// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
673func (aed A2AEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
674	return nil, false
675}
676
677// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
678func (aed A2AEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
679	return nil, false
680}
681
682// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
683func (aed A2AEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
684	return nil, false
685}
686
687// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
688func (aed A2AEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
689	return nil, false
690}
691
692// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
693func (aed A2AEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
694	return nil, false
695}
696
697// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
698func (aed A2AEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
699	return nil, false
700}
701
702// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
703func (aed A2AEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
704	return nil, false
705}
706
707// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
708func (aed A2AEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
709	return &aed, true
710}
711
712// A2AFailoverProviderInput a2A provider specific input for failover.
713type A2AFailoverProviderInput struct {
714	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
715	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
716	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for TFO or not.
717	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
718	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
719	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
720}
721
722// MarshalJSON is the custom marshaler for A2AFailoverProviderInput.
723func (afpi A2AFailoverProviderInput) MarshalJSON() ([]byte, error) {
724	afpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A
725	objectMap := make(map[string]interface{})
726	if afpi.RecoveryPointID != nil {
727		objectMap["recoveryPointId"] = afpi.RecoveryPointID
728	}
729	if afpi.CloudServiceCreationOption != nil {
730		objectMap["cloudServiceCreationOption"] = afpi.CloudServiceCreationOption
731	}
732	if afpi.InstanceType != "" {
733		objectMap["instanceType"] = afpi.InstanceType
734	}
735	return json.Marshal(objectMap)
736}
737
738// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
739func (afpi A2AFailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
740	return &afpi, true
741}
742
743// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
744func (afpi A2AFailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
745	return nil, false
746}
747
748// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
749func (afpi A2AFailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
750	return nil, false
751}
752
753// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
754func (afpi A2AFailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
755	return nil, false
756}
757
758// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
759func (afpi A2AFailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
760	return nil, false
761}
762
763// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
764func (afpi A2AFailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
765	return nil, false
766}
767
768// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
769func (afpi A2AFailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
770	return &afpi, true
771}
772
773// A2APolicyCreationInput a2A Policy creation input.
774type A2APolicyCreationInput struct {
775	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
776	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
777	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
778	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
779	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
780	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
781	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
782	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
783	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
784	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
785}
786
787// MarshalJSON is the custom marshaler for A2APolicyCreationInput.
788func (apci A2APolicyCreationInput) MarshalJSON() ([]byte, error) {
789	apci.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A
790	objectMap := make(map[string]interface{})
791	if apci.RecoveryPointHistory != nil {
792		objectMap["recoveryPointHistory"] = apci.RecoveryPointHistory
793	}
794	if apci.CrashConsistentFrequencyInMinutes != nil {
795		objectMap["crashConsistentFrequencyInMinutes"] = apci.CrashConsistentFrequencyInMinutes
796	}
797	if apci.AppConsistentFrequencyInMinutes != nil {
798		objectMap["appConsistentFrequencyInMinutes"] = apci.AppConsistentFrequencyInMinutes
799	}
800	if apci.MultiVMSyncStatus != "" {
801		objectMap["multiVmSyncStatus"] = apci.MultiVMSyncStatus
802	}
803	if apci.InstanceType != "" {
804		objectMap["instanceType"] = apci.InstanceType
805	}
806	return json.Marshal(objectMap)
807}
808
809// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
810func (apci A2APolicyCreationInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
811	return &apci, true
812}
813
814// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
815func (apci A2APolicyCreationInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
816	return nil, false
817}
818
819// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
820func (apci A2APolicyCreationInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
821	return nil, false
822}
823
824// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
825func (apci A2APolicyCreationInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
826	return nil, false
827}
828
829// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
830func (apci A2APolicyCreationInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
831	return nil, false
832}
833
834// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
835func (apci A2APolicyCreationInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
836	return nil, false
837}
838
839// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
840func (apci A2APolicyCreationInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
841	return nil, false
842}
843
844// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
845func (apci A2APolicyCreationInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
846	return nil, false
847}
848
849// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
850func (apci A2APolicyCreationInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
851	return nil, false
852}
853
854// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
855func (apci A2APolicyCreationInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
856	return &apci, true
857}
858
859// A2APolicyDetails a2A specific policy details.
860type A2APolicyDetails struct {
861	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
862	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
863	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
864	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
865	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
866	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
867	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
868	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
869	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
870	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
871	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
872	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
873}
874
875// MarshalJSON is the custom marshaler for A2APolicyDetails.
876func (apd A2APolicyDetails) MarshalJSON() ([]byte, error) {
877	apd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A
878	objectMap := make(map[string]interface{})
879	if apd.RecoveryPointThresholdInMinutes != nil {
880		objectMap["recoveryPointThresholdInMinutes"] = apd.RecoveryPointThresholdInMinutes
881	}
882	if apd.RecoveryPointHistory != nil {
883		objectMap["recoveryPointHistory"] = apd.RecoveryPointHistory
884	}
885	if apd.AppConsistentFrequencyInMinutes != nil {
886		objectMap["appConsistentFrequencyInMinutes"] = apd.AppConsistentFrequencyInMinutes
887	}
888	if apd.MultiVMSyncStatus != nil {
889		objectMap["multiVmSyncStatus"] = apd.MultiVMSyncStatus
890	}
891	if apd.CrashConsistentFrequencyInMinutes != nil {
892		objectMap["crashConsistentFrequencyInMinutes"] = apd.CrashConsistentFrequencyInMinutes
893	}
894	if apd.InstanceType != "" {
895		objectMap["instanceType"] = apd.InstanceType
896	}
897	return json.Marshal(objectMap)
898}
899
900// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
901func (apd A2APolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
902	return &apd, true
903}
904
905// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
906func (apd A2APolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
907	return nil, false
908}
909
910// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
911func (apd A2APolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
912	return nil, false
913}
914
915// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
916func (apd A2APolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
917	return nil, false
918}
919
920// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
921func (apd A2APolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
922	return nil, false
923}
924
925// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
926func (apd A2APolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
927	return nil, false
928}
929
930// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
931func (apd A2APolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
932	return nil, false
933}
934
935// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
936func (apd A2APolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
937	return nil, false
938}
939
940// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
941func (apd A2APolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
942	return nil, false
943}
944
945// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
946func (apd A2APolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
947	return nil, false
948}
949
950// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
951func (apd A2APolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
952	return nil, false
953}
954
955// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
956func (apd A2APolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
957	return nil, false
958}
959
960// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
961func (apd A2APolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
962	return &apd, true
963}
964
965// A2AProtectedDiskDetails a2A protected disk details.
966type A2AProtectedDiskDetails struct {
967	// DiskURI - The disk uri.
968	DiskURI *string `json:"diskUri,omitempty"`
969	// RecoveryAzureStorageAccountID - The recovery disk storage account.
970	RecoveryAzureStorageAccountID *string `json:"recoveryAzureStorageAccountId,omitempty"`
971	// PrimaryDiskAzureStorageAccountID - The primary disk storage account.
972	PrimaryDiskAzureStorageAccountID *string `json:"primaryDiskAzureStorageAccountId,omitempty"`
973	// RecoveryDiskURI - Recovery disk uri.
974	RecoveryDiskURI *string `json:"recoveryDiskUri,omitempty"`
975	// DiskName - The disk name.
976	DiskName *string `json:"diskName,omitempty"`
977	// DiskCapacityInBytes - The disk capacity in bytes.
978	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
979	// PrimaryStagingAzureStorageAccountID - The primary staging storage account.
980	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
981	// DiskType - The type of disk.
982	DiskType *string `json:"diskType,omitempty"`
983	// ResyncRequired - A value indicating whether resync is required for this disk.
984	ResyncRequired *bool `json:"resyncRequired,omitempty"`
985	// MonitoringPercentageCompletion - The percentage of the monitoring job. The type of the monitoring job is defined by MonitoringJobType property.
986	MonitoringPercentageCompletion *int32 `json:"monitoringPercentageCompletion,omitempty"`
987	// MonitoringJobType - The type of the monitoring job. The progress is contained in MonitoringPercentageCompletion property.
988	MonitoringJobType *string `json:"monitoringJobType,omitempty"`
989	// DataPendingInStagingStorageAccountInMB - The data pending for replication in MB at staging account.
990	DataPendingInStagingStorageAccountInMB *float64 `json:"dataPendingInStagingStorageAccountInMB,omitempty"`
991	// DataPendingAtSourceAgentInMB - The data pending at source virtual machine in MB.
992	DataPendingAtSourceAgentInMB *float64 `json:"dataPendingAtSourceAgentInMB,omitempty"`
993	// DiskState - The disk state.
994	DiskState *string `json:"diskState,omitempty"`
995	// AllowedDiskLevelOperation - The disk level operations list.
996	AllowedDiskLevelOperation *[]string `json:"allowedDiskLevelOperation,omitempty"`
997	// IsDiskEncrypted - A value indicating whether vm has encrypted os disk or not.
998	IsDiskEncrypted *bool `json:"isDiskEncrypted,omitempty"`
999	// SecretIdentifier - The secret URL / identifier (BEK).
1000	SecretIdentifier *string `json:"secretIdentifier,omitempty"`
1001	// DekKeyVaultArmID - The KeyVault resource id for secret (BEK).
1002	DekKeyVaultArmID *string `json:"dekKeyVaultArmId,omitempty"`
1003	// IsDiskKeyEncrypted - A value indicating whether disk key got encrypted or not.
1004	IsDiskKeyEncrypted *bool `json:"isDiskKeyEncrypted,omitempty"`
1005	// KeyIdentifier - The key URL / identifier (KEK).
1006	KeyIdentifier *string `json:"keyIdentifier,omitempty"`
1007	// KekKeyVaultArmID - The KeyVault resource id for key (KEK).
1008	KekKeyVaultArmID *string `json:"kekKeyVaultArmId,omitempty"`
1009}
1010
1011// A2AProtectedManagedDiskDetails a2A protected managed disk details.
1012type A2AProtectedManagedDiskDetails struct {
1013	// DiskID - The managed disk Arm id.
1014	DiskID *string `json:"diskId,omitempty"`
1015	// RecoveryResourceGroupID - The recovery disk resource group Arm Id.
1016	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1017	// RecoveryTargetDiskID - Recovery target disk Arm Id.
1018	RecoveryTargetDiskID *string `json:"recoveryTargetDiskId,omitempty"`
1019	// RecoveryReplicaDiskID - Recovery replica disk Arm Id.
1020	RecoveryReplicaDiskID *string `json:"recoveryReplicaDiskId,omitempty"`
1021	// RecoveryReplicaDiskAccountType - The replica disk type. Its an optional value and will be same as source disk type if not user provided.
1022	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
1023	// RecoveryTargetDiskAccountType - The target disk type after failover. Its an optional value and will be same as source disk type if not user provided.
1024	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
1025	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
1026	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
1027	// DiskName - The disk name.
1028	DiskName *string `json:"diskName,omitempty"`
1029	// DiskCapacityInBytes - The disk capacity in bytes.
1030	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
1031	// PrimaryStagingAzureStorageAccountID - The primary staging storage account.
1032	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
1033	// DiskType - The type of disk.
1034	DiskType *string `json:"diskType,omitempty"`
1035	// ResyncRequired - A value indicating whether resync is required for this disk.
1036	ResyncRequired *bool `json:"resyncRequired,omitempty"`
1037	// MonitoringPercentageCompletion - The percentage of the monitoring job. The type of the monitoring job is defined by MonitoringJobType property.
1038	MonitoringPercentageCompletion *int32 `json:"monitoringPercentageCompletion,omitempty"`
1039	// MonitoringJobType - The type of the monitoring job. The progress is contained in MonitoringPercentageCompletion property.
1040	MonitoringJobType *string `json:"monitoringJobType,omitempty"`
1041	// DataPendingInStagingStorageAccountInMB - The data pending for replication in MB at staging account.
1042	DataPendingInStagingStorageAccountInMB *float64 `json:"dataPendingInStagingStorageAccountInMB,omitempty"`
1043	// DataPendingAtSourceAgentInMB - The data pending at source virtual machine in MB.
1044	DataPendingAtSourceAgentInMB *float64 `json:"dataPendingAtSourceAgentInMB,omitempty"`
1045	// DiskState - The disk state.
1046	DiskState *string `json:"diskState,omitempty"`
1047	// AllowedDiskLevelOperation - The disk level operations list.
1048	AllowedDiskLevelOperation *[]string `json:"allowedDiskLevelOperation,omitempty"`
1049	// IsDiskEncrypted - A value indicating whether vm has encrypted os disk or not.
1050	IsDiskEncrypted *bool `json:"isDiskEncrypted,omitempty"`
1051	// SecretIdentifier - The secret URL / identifier (BEK).
1052	SecretIdentifier *string `json:"secretIdentifier,omitempty"`
1053	// DekKeyVaultArmID - The KeyVault resource id for secret (BEK).
1054	DekKeyVaultArmID *string `json:"dekKeyVaultArmId,omitempty"`
1055	// IsDiskKeyEncrypted - A value indicating whether disk key got encrypted or not.
1056	IsDiskKeyEncrypted *bool `json:"isDiskKeyEncrypted,omitempty"`
1057	// KeyIdentifier - The key URL / identifier (KEK).
1058	KeyIdentifier *string `json:"keyIdentifier,omitempty"`
1059	// KekKeyVaultArmID - The KeyVault resource id for key (KEK).
1060	KekKeyVaultArmID *string `json:"kekKeyVaultArmId,omitempty"`
1061	// FailoverDiskName - The failover name for the managed disk.
1062	FailoverDiskName *string `json:"failoverDiskName,omitempty"`
1063	// TfoDiskName - The test failover name for the managed disk.
1064	TfoDiskName *string `json:"tfoDiskName,omitempty"`
1065}
1066
1067// A2AProtectionContainerMappingDetails a2A provider specific settings.
1068type A2AProtectionContainerMappingDetails struct {
1069	// AgentAutoUpdateStatus - A value indicating whether the auto update is enabled. Possible values include: 'Disabled', 'Enabled'
1070	AgentAutoUpdateStatus AgentAutoUpdateStatus `json:"agentAutoUpdateStatus,omitempty"`
1071	// AutomationAccountArmID - The automation account arm id.
1072	AutomationAccountArmID *string `json:"automationAccountArmId,omitempty"`
1073	// ScheduleName - The schedule arm name.
1074	ScheduleName *string `json:"scheduleName,omitempty"`
1075	// JobScheduleName - The job schedule arm name.
1076	JobScheduleName *string `json:"jobScheduleName,omitempty"`
1077	// InstanceType - Possible values include: 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt'
1078	InstanceType InstanceTypeBasicProtectionContainerMappingProviderSpecificDetails `json:"instanceType,omitempty"`
1079}
1080
1081// MarshalJSON is the custom marshaler for A2AProtectionContainerMappingDetails.
1082func (apcmd A2AProtectionContainerMappingDetails) MarshalJSON() ([]byte, error) {
1083	apcmd.InstanceType = InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A
1084	objectMap := make(map[string]interface{})
1085	if apcmd.AgentAutoUpdateStatus != "" {
1086		objectMap["agentAutoUpdateStatus"] = apcmd.AgentAutoUpdateStatus
1087	}
1088	if apcmd.AutomationAccountArmID != nil {
1089		objectMap["automationAccountArmId"] = apcmd.AutomationAccountArmID
1090	}
1091	if apcmd.ScheduleName != nil {
1092		objectMap["scheduleName"] = apcmd.ScheduleName
1093	}
1094	if apcmd.JobScheduleName != nil {
1095		objectMap["jobScheduleName"] = apcmd.JobScheduleName
1096	}
1097	if apcmd.InstanceType != "" {
1098		objectMap["instanceType"] = apcmd.InstanceType
1099	}
1100	return json.Marshal(objectMap)
1101}
1102
1103// AsA2AProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1104func (apcmd A2AProtectionContainerMappingDetails) AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool) {
1105	return &apcmd, true
1106}
1107
1108// AsVMwareCbtProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1109func (apcmd A2AProtectionContainerMappingDetails) AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool) {
1110	return nil, false
1111}
1112
1113// AsProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1114func (apcmd A2AProtectionContainerMappingDetails) AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool) {
1115	return nil, false
1116}
1117
1118// AsBasicProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1119func (apcmd A2AProtectionContainerMappingDetails) AsBasicProtectionContainerMappingProviderSpecificDetails() (BasicProtectionContainerMappingProviderSpecificDetails, bool) {
1120	return &apcmd, true
1121}
1122
1123// A2AProtectionIntentDiskInputDetails azure VM disk input details.
1124type A2AProtectionIntentDiskInputDetails struct {
1125	// DiskURI - The disk Uri.
1126	DiskURI *string `json:"diskUri,omitempty"`
1127	// RecoveryAzureStorageAccountCustomInput - The recovery VHD storage account input.
1128	RecoveryAzureStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"recoveryAzureStorageAccountCustomInput,omitempty"`
1129	// PrimaryStagingStorageAccountCustomInput - The primary staging storage account input.
1130	PrimaryStagingStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"primaryStagingStorageAccountCustomInput,omitempty"`
1131}
1132
1133// UnmarshalJSON is the custom unmarshaler for A2AProtectionIntentDiskInputDetails struct.
1134func (apidid *A2AProtectionIntentDiskInputDetails) UnmarshalJSON(body []byte) error {
1135	var m map[string]*json.RawMessage
1136	err := json.Unmarshal(body, &m)
1137	if err != nil {
1138		return err
1139	}
1140	for k, v := range m {
1141		switch k {
1142		case "diskUri":
1143			if v != nil {
1144				var diskURI string
1145				err = json.Unmarshal(*v, &diskURI)
1146				if err != nil {
1147					return err
1148				}
1149				apidid.DiskURI = &diskURI
1150			}
1151		case "recoveryAzureStorageAccountCustomInput":
1152			if v != nil {
1153				recoveryAzureStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
1154				if err != nil {
1155					return err
1156				}
1157				apidid.RecoveryAzureStorageAccountCustomInput = recoveryAzureStorageAccountCustomInput
1158			}
1159		case "primaryStagingStorageAccountCustomInput":
1160			if v != nil {
1161				primaryStagingStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
1162				if err != nil {
1163					return err
1164				}
1165				apidid.PrimaryStagingStorageAccountCustomInput = primaryStagingStorageAccountCustomInput
1166			}
1167		}
1168	}
1169
1170	return nil
1171}
1172
1173// A2AProtectionIntentManagedDiskInputDetails azure VM managed disk input details.
1174type A2AProtectionIntentManagedDiskInputDetails struct {
1175	// DiskID - The disk Id.
1176	DiskID *string `json:"diskId,omitempty"`
1177	// PrimaryStagingStorageAccountCustomInput - The primary staging storage account input.
1178	PrimaryStagingStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"primaryStagingStorageAccountCustomInput,omitempty"`
1179	// RecoveryResourceGroupCustomInput - The recovery resource group input.
1180	RecoveryResourceGroupCustomInput BasicRecoveryResourceGroupCustomDetails `json:"recoveryResourceGroupCustomInput,omitempty"`
1181	// RecoveryReplicaDiskAccountType - The replica disk type. Its an optional value and will be same as source disk type if not user provided.
1182	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
1183	// RecoveryTargetDiskAccountType - The target disk type after failover. Its an optional value and will be same as source disk type if not user provided.
1184	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
1185	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
1186	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
1187	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
1188	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
1189}
1190
1191// UnmarshalJSON is the custom unmarshaler for A2AProtectionIntentManagedDiskInputDetails struct.
1192func (apimdid *A2AProtectionIntentManagedDiskInputDetails) UnmarshalJSON(body []byte) error {
1193	var m map[string]*json.RawMessage
1194	err := json.Unmarshal(body, &m)
1195	if err != nil {
1196		return err
1197	}
1198	for k, v := range m {
1199		switch k {
1200		case "diskId":
1201			if v != nil {
1202				var diskID string
1203				err = json.Unmarshal(*v, &diskID)
1204				if err != nil {
1205					return err
1206				}
1207				apimdid.DiskID = &diskID
1208			}
1209		case "primaryStagingStorageAccountCustomInput":
1210			if v != nil {
1211				primaryStagingStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
1212				if err != nil {
1213					return err
1214				}
1215				apimdid.PrimaryStagingStorageAccountCustomInput = primaryStagingStorageAccountCustomInput
1216			}
1217		case "recoveryResourceGroupCustomInput":
1218			if v != nil {
1219				recoveryResourceGroupCustomInput, err := unmarshalBasicRecoveryResourceGroupCustomDetails(*v)
1220				if err != nil {
1221					return err
1222				}
1223				apimdid.RecoveryResourceGroupCustomInput = recoveryResourceGroupCustomInput
1224			}
1225		case "recoveryReplicaDiskAccountType":
1226			if v != nil {
1227				var recoveryReplicaDiskAccountType string
1228				err = json.Unmarshal(*v, &recoveryReplicaDiskAccountType)
1229				if err != nil {
1230					return err
1231				}
1232				apimdid.RecoveryReplicaDiskAccountType = &recoveryReplicaDiskAccountType
1233			}
1234		case "recoveryTargetDiskAccountType":
1235			if v != nil {
1236				var recoveryTargetDiskAccountType string
1237				err = json.Unmarshal(*v, &recoveryTargetDiskAccountType)
1238				if err != nil {
1239					return err
1240				}
1241				apimdid.RecoveryTargetDiskAccountType = &recoveryTargetDiskAccountType
1242			}
1243		case "recoveryDiskEncryptionSetId":
1244			if v != nil {
1245				var recoveryDiskEncryptionSetID string
1246				err = json.Unmarshal(*v, &recoveryDiskEncryptionSetID)
1247				if err != nil {
1248					return err
1249				}
1250				apimdid.RecoveryDiskEncryptionSetID = &recoveryDiskEncryptionSetID
1251			}
1252		case "diskEncryptionInfo":
1253			if v != nil {
1254				var diskEncryptionInfo DiskEncryptionInfo
1255				err = json.Unmarshal(*v, &diskEncryptionInfo)
1256				if err != nil {
1257					return err
1258				}
1259				apimdid.DiskEncryptionInfo = &diskEncryptionInfo
1260			}
1261		}
1262	}
1263
1264	return nil
1265}
1266
1267// A2ARecoveryPointDetails a2A provider specific recovery point details.
1268type A2ARecoveryPointDetails struct {
1269	// RecoveryPointSyncType - A value indicating whether the recovery point is multi VM consistent. Possible values include: 'MultiVMSyncRecoveryPoint', 'PerVMRecoveryPoint'
1270	RecoveryPointSyncType RecoveryPointSyncType `json:"recoveryPointSyncType,omitempty"`
1271	// Disks - List of disk ids representing a recovery point.
1272	Disks *[]string `json:"disks,omitempty"`
1273	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
1274	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
1275}
1276
1277// MarshalJSON is the custom marshaler for A2ARecoveryPointDetails.
1278func (arpd A2ARecoveryPointDetails) MarshalJSON() ([]byte, error) {
1279	arpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A
1280	objectMap := make(map[string]interface{})
1281	if arpd.RecoveryPointSyncType != "" {
1282		objectMap["recoveryPointSyncType"] = arpd.RecoveryPointSyncType
1283	}
1284	if arpd.Disks != nil {
1285		objectMap["disks"] = arpd.Disks
1286	}
1287	if arpd.InstanceType != "" {
1288		objectMap["instanceType"] = arpd.InstanceType
1289	}
1290	return json.Marshal(objectMap)
1291}
1292
1293// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1294func (arpd A2ARecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
1295	return &arpd, true
1296}
1297
1298// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1299func (arpd A2ARecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
1300	return nil, false
1301}
1302
1303// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1304func (arpd A2ARecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
1305	return nil, false
1306}
1307
1308// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1309func (arpd A2ARecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
1310	return nil, false
1311}
1312
1313// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1314func (arpd A2ARecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
1315	return &arpd, true
1316}
1317
1318// A2ARemoveDisksInput a2A remove disk(s) input.
1319type A2ARemoveDisksInput struct {
1320	// VMDisksUris - The list of vm disk vhd URIs.
1321	VMDisksUris *[]string `json:"vmDisksUris,omitempty"`
1322	// VMManagedDisksIds - The list of vm managed disk Ids.
1323	VMManagedDisksIds *[]string `json:"vmManagedDisksIds,omitempty"`
1324	// InstanceType - Possible values include: 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeRemoveDisksProviderSpecificInput', 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A'
1325	InstanceType InstanceTypeBasicRemoveDisksProviderSpecificInput `json:"instanceType,omitempty"`
1326}
1327
1328// MarshalJSON is the custom marshaler for A2ARemoveDisksInput.
1329func (ardi A2ARemoveDisksInput) MarshalJSON() ([]byte, error) {
1330	ardi.InstanceType = InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A
1331	objectMap := make(map[string]interface{})
1332	if ardi.VMDisksUris != nil {
1333		objectMap["vmDisksUris"] = ardi.VMDisksUris
1334	}
1335	if ardi.VMManagedDisksIds != nil {
1336		objectMap["vmManagedDisksIds"] = ardi.VMManagedDisksIds
1337	}
1338	if ardi.InstanceType != "" {
1339		objectMap["instanceType"] = ardi.InstanceType
1340	}
1341	return json.Marshal(objectMap)
1342}
1343
1344// AsA2ARemoveDisksInput is the BasicRemoveDisksProviderSpecificInput implementation for A2ARemoveDisksInput.
1345func (ardi A2ARemoveDisksInput) AsA2ARemoveDisksInput() (*A2ARemoveDisksInput, bool) {
1346	return &ardi, true
1347}
1348
1349// AsRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for A2ARemoveDisksInput.
1350func (ardi A2ARemoveDisksInput) AsRemoveDisksProviderSpecificInput() (*RemoveDisksProviderSpecificInput, bool) {
1351	return nil, false
1352}
1353
1354// AsBasicRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for A2ARemoveDisksInput.
1355func (ardi A2ARemoveDisksInput) AsBasicRemoveDisksProviderSpecificInput() (BasicRemoveDisksProviderSpecificInput, bool) {
1356	return &ardi, true
1357}
1358
1359// A2AReplicationDetails a2A provider specific settings.
1360type A2AReplicationDetails struct {
1361	// FabricObjectID - The fabric specific object Id of the virtual machine.
1362	FabricObjectID *string `json:"fabricObjectId,omitempty"`
1363	// InitialPrimaryFabricLocation - READ-ONLY; The initial primary fabric location.
1364	InitialPrimaryFabricLocation *string `json:"initialPrimaryFabricLocation,omitempty"`
1365	// InitialRecoveryFabricLocation - READ-ONLY; The initial recovery fabric location.
1366	InitialRecoveryFabricLocation *string `json:"initialRecoveryFabricLocation,omitempty"`
1367	// InitialPrimaryZone - READ-ONLY; The initial primary availability zone.
1368	InitialPrimaryZone *string `json:"initialPrimaryZone,omitempty"`
1369	// InitialRecoveryZone - READ-ONLY; The initial recovery availability zone.
1370	InitialRecoveryZone *string `json:"initialRecoveryZone,omitempty"`
1371	// MultiVMGroupID - The multi vm group Id.
1372	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
1373	// MultiVMGroupName - The multi vm group name.
1374	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
1375	// MultiVMGroupCreateOption - Whether Multi VM group is auto created or specified by user. Possible values include: 'AutoCreated', 'UserSpecified'
1376	MultiVMGroupCreateOption MultiVMGroupCreateOption `json:"multiVmGroupCreateOption,omitempty"`
1377	// ManagementID - The management Id.
1378	ManagementID *string `json:"managementId,omitempty"`
1379	// ProtectedDisks - The list of protected disks.
1380	ProtectedDisks *[]A2AProtectedDiskDetails `json:"protectedDisks,omitempty"`
1381	// UnprotectedDisks - The list of unprotected disks.
1382	UnprotectedDisks *[]A2AUnprotectedDiskDetails `json:"unprotectedDisks,omitempty"`
1383	// ProtectedManagedDisks - The list of protected managed disks.
1384	ProtectedManagedDisks *[]A2AProtectedManagedDiskDetails `json:"protectedManagedDisks,omitempty"`
1385	// RecoveryBootDiagStorageAccountID - The recovery boot diagnostic storage account Arm Id.
1386	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
1387	// PrimaryFabricLocation - Primary fabric location.
1388	PrimaryFabricLocation *string `json:"primaryFabricLocation,omitempty"`
1389	// RecoveryFabricLocation - The recovery fabric location.
1390	RecoveryFabricLocation *string `json:"recoveryFabricLocation,omitempty"`
1391	// OsType - The type of operating system.
1392	OsType *string `json:"osType,omitempty"`
1393	// RecoveryAzureVMSize - The size of recovery virtual machine.
1394	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
1395	// RecoveryAzureVMName - The name of recovery virtual machine.
1396	RecoveryAzureVMName *string `json:"recoveryAzureVMName,omitempty"`
1397	// RecoveryAzureResourceGroupID - The recovery resource group.
1398	RecoveryAzureResourceGroupID *string `json:"recoveryAzureResourceGroupId,omitempty"`
1399	// RecoveryCloudService - The recovery cloud service.
1400	RecoveryCloudService *string `json:"recoveryCloudService,omitempty"`
1401	// RecoveryAvailabilitySet - The recovery availability set.
1402	RecoveryAvailabilitySet *string `json:"recoveryAvailabilitySet,omitempty"`
1403	// SelectedRecoveryAzureNetworkID - The recovery virtual network.
1404	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
1405	// SelectedTfoAzureNetworkID - The test failover virtual network.
1406	SelectedTfoAzureNetworkID *string `json:"selectedTfoAzureNetworkId,omitempty"`
1407	// VMNics - The virtual machine nic details.
1408	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
1409	// VMSyncedConfigDetails - The synced configuration details.
1410	VMSyncedConfigDetails *AzureToAzureVMSyncedConfigDetails `json:"vmSyncedConfigDetails,omitempty"`
1411	// MonitoringPercentageCompletion - The percentage of the monitoring job. The type of the monitoring job is defined by MonitoringJobType property.
1412	MonitoringPercentageCompletion *int32 `json:"monitoringPercentageCompletion,omitempty"`
1413	// MonitoringJobType - The type of the monitoring job. The progress is contained in MonitoringPercentageCompletion property.
1414	MonitoringJobType *string `json:"monitoringJobType,omitempty"`
1415	// LastHeartbeat - The last heartbeat received from the source server.
1416	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
1417	// AgentVersion - The agent version.
1418	AgentVersion *string `json:"agentVersion,omitempty"`
1419	// IsReplicationAgentUpdateRequired - A value indicating whether replication agent update is required.
1420	IsReplicationAgentUpdateRequired *bool `json:"isReplicationAgentUpdateRequired,omitempty"`
1421	// RecoveryFabricObjectID - The recovery fabric object Id.
1422	RecoveryFabricObjectID *string `json:"recoveryFabricObjectId,omitempty"`
1423	// VMProtectionState - The protection state for the vm.
1424	VMProtectionState *string `json:"vmProtectionState,omitempty"`
1425	// VMProtectionStateDescription - The protection state description for the vm.
1426	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
1427	// LifecycleID - An id associated with the PE that survives actions like switch protection which change the backing PE/CPE objects internally.The lifecycle id gets carried forward to have a link/continuity in being able to have an Id that denotes the "same" protected item even though other internal Ids/ARM Id might be changing.
1428	LifecycleID *string `json:"lifecycleId,omitempty"`
1429	// TestFailoverRecoveryFabricObjectID - The test failover fabric object Id.
1430	TestFailoverRecoveryFabricObjectID *string `json:"testFailoverRecoveryFabricObjectId,omitempty"`
1431	// RpoInSeconds - The last RPO value in seconds.
1432	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
1433	// LastRpoCalculatedTime - The time (in UTC) when the last RPO value was calculated by Protection Service.
1434	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
1435	// RecoveryAvailabilityZone - The recovery availability zone.
1436	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
1437	// VMEncryptionType - READ-ONLY; The encryption type of the VM. Possible values include: 'NotEncrypted', 'OnePassEncrypted', 'TwoPassEncrypted'
1438	VMEncryptionType VMEncryptionType `json:"vmEncryptionType,omitempty"`
1439	// TfoAzureVMName - The test failover VM name.
1440	TfoAzureVMName *string `json:"tfoAzureVMName,omitempty"`
1441	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
1442	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
1443	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
1444	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
1445}
1446
1447// MarshalJSON is the custom marshaler for A2AReplicationDetails.
1448func (ard A2AReplicationDetails) MarshalJSON() ([]byte, error) {
1449	ard.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A
1450	objectMap := make(map[string]interface{})
1451	if ard.FabricObjectID != nil {
1452		objectMap["fabricObjectId"] = ard.FabricObjectID
1453	}
1454	if ard.MultiVMGroupID != nil {
1455		objectMap["multiVmGroupId"] = ard.MultiVMGroupID
1456	}
1457	if ard.MultiVMGroupName != nil {
1458		objectMap["multiVmGroupName"] = ard.MultiVMGroupName
1459	}
1460	if ard.MultiVMGroupCreateOption != "" {
1461		objectMap["multiVmGroupCreateOption"] = ard.MultiVMGroupCreateOption
1462	}
1463	if ard.ManagementID != nil {
1464		objectMap["managementId"] = ard.ManagementID
1465	}
1466	if ard.ProtectedDisks != nil {
1467		objectMap["protectedDisks"] = ard.ProtectedDisks
1468	}
1469	if ard.UnprotectedDisks != nil {
1470		objectMap["unprotectedDisks"] = ard.UnprotectedDisks
1471	}
1472	if ard.ProtectedManagedDisks != nil {
1473		objectMap["protectedManagedDisks"] = ard.ProtectedManagedDisks
1474	}
1475	if ard.RecoveryBootDiagStorageAccountID != nil {
1476		objectMap["recoveryBootDiagStorageAccountId"] = ard.RecoveryBootDiagStorageAccountID
1477	}
1478	if ard.PrimaryFabricLocation != nil {
1479		objectMap["primaryFabricLocation"] = ard.PrimaryFabricLocation
1480	}
1481	if ard.RecoveryFabricLocation != nil {
1482		objectMap["recoveryFabricLocation"] = ard.RecoveryFabricLocation
1483	}
1484	if ard.OsType != nil {
1485		objectMap["osType"] = ard.OsType
1486	}
1487	if ard.RecoveryAzureVMSize != nil {
1488		objectMap["recoveryAzureVMSize"] = ard.RecoveryAzureVMSize
1489	}
1490	if ard.RecoveryAzureVMName != nil {
1491		objectMap["recoveryAzureVMName"] = ard.RecoveryAzureVMName
1492	}
1493	if ard.RecoveryAzureResourceGroupID != nil {
1494		objectMap["recoveryAzureResourceGroupId"] = ard.RecoveryAzureResourceGroupID
1495	}
1496	if ard.RecoveryCloudService != nil {
1497		objectMap["recoveryCloudService"] = ard.RecoveryCloudService
1498	}
1499	if ard.RecoveryAvailabilitySet != nil {
1500		objectMap["recoveryAvailabilitySet"] = ard.RecoveryAvailabilitySet
1501	}
1502	if ard.SelectedRecoveryAzureNetworkID != nil {
1503		objectMap["selectedRecoveryAzureNetworkId"] = ard.SelectedRecoveryAzureNetworkID
1504	}
1505	if ard.SelectedTfoAzureNetworkID != nil {
1506		objectMap["selectedTfoAzureNetworkId"] = ard.SelectedTfoAzureNetworkID
1507	}
1508	if ard.VMNics != nil {
1509		objectMap["vmNics"] = ard.VMNics
1510	}
1511	if ard.VMSyncedConfigDetails != nil {
1512		objectMap["vmSyncedConfigDetails"] = ard.VMSyncedConfigDetails
1513	}
1514	if ard.MonitoringPercentageCompletion != nil {
1515		objectMap["monitoringPercentageCompletion"] = ard.MonitoringPercentageCompletion
1516	}
1517	if ard.MonitoringJobType != nil {
1518		objectMap["monitoringJobType"] = ard.MonitoringJobType
1519	}
1520	if ard.LastHeartbeat != nil {
1521		objectMap["lastHeartbeat"] = ard.LastHeartbeat
1522	}
1523	if ard.AgentVersion != nil {
1524		objectMap["agentVersion"] = ard.AgentVersion
1525	}
1526	if ard.IsReplicationAgentUpdateRequired != nil {
1527		objectMap["isReplicationAgentUpdateRequired"] = ard.IsReplicationAgentUpdateRequired
1528	}
1529	if ard.RecoveryFabricObjectID != nil {
1530		objectMap["recoveryFabricObjectId"] = ard.RecoveryFabricObjectID
1531	}
1532	if ard.VMProtectionState != nil {
1533		objectMap["vmProtectionState"] = ard.VMProtectionState
1534	}
1535	if ard.VMProtectionStateDescription != nil {
1536		objectMap["vmProtectionStateDescription"] = ard.VMProtectionStateDescription
1537	}
1538	if ard.LifecycleID != nil {
1539		objectMap["lifecycleId"] = ard.LifecycleID
1540	}
1541	if ard.TestFailoverRecoveryFabricObjectID != nil {
1542		objectMap["testFailoverRecoveryFabricObjectId"] = ard.TestFailoverRecoveryFabricObjectID
1543	}
1544	if ard.RpoInSeconds != nil {
1545		objectMap["rpoInSeconds"] = ard.RpoInSeconds
1546	}
1547	if ard.LastRpoCalculatedTime != nil {
1548		objectMap["lastRpoCalculatedTime"] = ard.LastRpoCalculatedTime
1549	}
1550	if ard.RecoveryAvailabilityZone != nil {
1551		objectMap["recoveryAvailabilityZone"] = ard.RecoveryAvailabilityZone
1552	}
1553	if ard.TfoAzureVMName != nil {
1554		objectMap["tfoAzureVMName"] = ard.TfoAzureVMName
1555	}
1556	if ard.RecoveryProximityPlacementGroupID != nil {
1557		objectMap["recoveryProximityPlacementGroupId"] = ard.RecoveryProximityPlacementGroupID
1558	}
1559	if ard.InstanceType != "" {
1560		objectMap["instanceType"] = ard.InstanceType
1561	}
1562	return json.Marshal(objectMap)
1563}
1564
1565// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1566func (ard A2AReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
1567	return &ard, true
1568}
1569
1570// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1571func (ard A2AReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
1572	return nil, false
1573}
1574
1575// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1576func (ard A2AReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
1577	return nil, false
1578}
1579
1580// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1581func (ard A2AReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
1582	return nil, false
1583}
1584
1585// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1586func (ard A2AReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
1587	return nil, false
1588}
1589
1590// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1591func (ard A2AReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
1592	return nil, false
1593}
1594
1595// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1596func (ard A2AReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
1597	return nil, false
1598}
1599
1600// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1601func (ard A2AReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
1602	return nil, false
1603}
1604
1605// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1606func (ard A2AReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
1607	return nil, false
1608}
1609
1610// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1611func (ard A2AReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
1612	return &ard, true
1613}
1614
1615// A2AReplicationIntentDetails a2A provider specific settings.
1616type A2AReplicationIntentDetails struct {
1617	// FabricObjectID - The fabric specific object Id of the virtual machine.
1618	FabricObjectID *string `json:"fabricObjectId,omitempty"`
1619	// PolicyID - The ID of Policy governing this PE.
1620	PolicyID *string `json:"policyId,omitempty"`
1621	// PrimaryLocation - The primary location for the virtual machine.
1622	PrimaryLocation *string `json:"primaryLocation,omitempty"`
1623	// RecoveryLocation - The recovery location for the virtual machine.
1624	RecoveryLocation *string `json:"recoveryLocation,omitempty"`
1625	// RecoverySubscriptionID - The recovery subscription Id of the virtual machine.
1626	RecoverySubscriptionID *string `json:"recoverySubscriptionId,omitempty"`
1627	// PrimaryFabricFriendlyName - The recovery fabric Name.
1628	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
1629	// RecoveryFabricFriendlyName - The recovery fabric Name.
1630	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
1631	// PrimaryContainerFriendlyName - The primary container Name.
1632	PrimaryContainerFriendlyName *string `json:"primaryContainerFriendlyName,omitempty"`
1633	// RecoveryContainerFriendlyName - The recovery container Name.
1634	RecoveryContainerFriendlyName *string `json:"recoveryContainerFriendlyName,omitempty"`
1635	// RecoveryAvailabilityType - The recovery availability type of the virtual machine.
1636	RecoveryAvailabilityType *string `json:"recoveryAvailabilityType,omitempty"`
1637	// VMDisks - The list of vm disk details.
1638	VMDisks *[]A2AVMDiskDetails `json:"vmDisks,omitempty"`
1639	// VMManagedDisks - The list of vm managed disk details.
1640	VMManagedDisks *[]A2AVMManagedDiskDetails `json:"vmManagedDisks,omitempty"`
1641	// RecoveryResourceGroupID - The recovery resource group id.
1642	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1643	// RecoveryAvailabilitySetID - The recovery availability set Id.
1644	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
1645	// RecoveryVirtualNetworkID - The recovery virtual network Id.
1646	RecoveryVirtualNetworkID *string `json:"recoveryVirtualNetworkId,omitempty"`
1647	// RecoveryProximityPlacementGroupID - The recovery proximity placement group custom details.
1648	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
1649	// AutoProtectionOfDataDiskStatus - A value indicating whether the auto protection is enabled. Possible values include: 'AutoProtectionOfDataDiskStatusDisabled', 'AutoProtectionOfDataDiskStatusEnabled'
1650	AutoProtectionOfDataDiskStatus AutoProtectionOfDataDiskStatus `json:"autoProtectionOfDataDiskStatus,omitempty"`
1651	// MultiVMGroupName - The multi vm group name.
1652	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
1653	// MultiVMGroupID - The multi vm group id.
1654	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
1655	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
1656	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
1657	// DiskEncryptionInfo - The recovery disk encryption information (for two pass flows).
1658	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
1659	// RecoveryAvailabilityZone - The recovery availability zone.
1660	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
1661	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeReplicationProtectionIntentProviderSpecificSettings', 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A'
1662	InstanceType InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettings `json:"instanceType,omitempty"`
1663}
1664
1665// MarshalJSON is the custom marshaler for A2AReplicationIntentDetails.
1666func (arid A2AReplicationIntentDetails) MarshalJSON() ([]byte, error) {
1667	arid.InstanceType = InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A
1668	objectMap := make(map[string]interface{})
1669	if arid.FabricObjectID != nil {
1670		objectMap["fabricObjectId"] = arid.FabricObjectID
1671	}
1672	if arid.PolicyID != nil {
1673		objectMap["policyId"] = arid.PolicyID
1674	}
1675	if arid.PrimaryLocation != nil {
1676		objectMap["primaryLocation"] = arid.PrimaryLocation
1677	}
1678	if arid.RecoveryLocation != nil {
1679		objectMap["recoveryLocation"] = arid.RecoveryLocation
1680	}
1681	if arid.RecoverySubscriptionID != nil {
1682		objectMap["recoverySubscriptionId"] = arid.RecoverySubscriptionID
1683	}
1684	if arid.PrimaryFabricFriendlyName != nil {
1685		objectMap["primaryFabricFriendlyName"] = arid.PrimaryFabricFriendlyName
1686	}
1687	if arid.RecoveryFabricFriendlyName != nil {
1688		objectMap["recoveryFabricFriendlyName"] = arid.RecoveryFabricFriendlyName
1689	}
1690	if arid.PrimaryContainerFriendlyName != nil {
1691		objectMap["primaryContainerFriendlyName"] = arid.PrimaryContainerFriendlyName
1692	}
1693	if arid.RecoveryContainerFriendlyName != nil {
1694		objectMap["recoveryContainerFriendlyName"] = arid.RecoveryContainerFriendlyName
1695	}
1696	if arid.RecoveryAvailabilityType != nil {
1697		objectMap["recoveryAvailabilityType"] = arid.RecoveryAvailabilityType
1698	}
1699	if arid.VMDisks != nil {
1700		objectMap["vmDisks"] = arid.VMDisks
1701	}
1702	if arid.VMManagedDisks != nil {
1703		objectMap["vmManagedDisks"] = arid.VMManagedDisks
1704	}
1705	if arid.RecoveryResourceGroupID != nil {
1706		objectMap["recoveryResourceGroupId"] = arid.RecoveryResourceGroupID
1707	}
1708	if arid.RecoveryAvailabilitySetID != nil {
1709		objectMap["recoveryAvailabilitySetId"] = arid.RecoveryAvailabilitySetID
1710	}
1711	if arid.RecoveryVirtualNetworkID != nil {
1712		objectMap["recoveryVirtualNetworkId"] = arid.RecoveryVirtualNetworkID
1713	}
1714	if arid.RecoveryProximityPlacementGroupID != nil {
1715		objectMap["recoveryProximityPlacementGroupId"] = arid.RecoveryProximityPlacementGroupID
1716	}
1717	if arid.AutoProtectionOfDataDiskStatus != "" {
1718		objectMap["autoProtectionOfDataDiskStatus"] = arid.AutoProtectionOfDataDiskStatus
1719	}
1720	if arid.MultiVMGroupName != nil {
1721		objectMap["multiVmGroupName"] = arid.MultiVMGroupName
1722	}
1723	if arid.MultiVMGroupID != nil {
1724		objectMap["multiVmGroupId"] = arid.MultiVMGroupID
1725	}
1726	if arid.RecoveryBootDiagStorageAccountID != nil {
1727		objectMap["recoveryBootDiagStorageAccountId"] = arid.RecoveryBootDiagStorageAccountID
1728	}
1729	if arid.DiskEncryptionInfo != nil {
1730		objectMap["diskEncryptionInfo"] = arid.DiskEncryptionInfo
1731	}
1732	if arid.RecoveryAvailabilityZone != nil {
1733		objectMap["recoveryAvailabilityZone"] = arid.RecoveryAvailabilityZone
1734	}
1735	if arid.InstanceType != "" {
1736		objectMap["instanceType"] = arid.InstanceType
1737	}
1738	return json.Marshal(objectMap)
1739}
1740
1741// AsA2AReplicationIntentDetails is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for A2AReplicationIntentDetails.
1742func (arid A2AReplicationIntentDetails) AsA2AReplicationIntentDetails() (*A2AReplicationIntentDetails, bool) {
1743	return &arid, true
1744}
1745
1746// AsReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for A2AReplicationIntentDetails.
1747func (arid A2AReplicationIntentDetails) AsReplicationProtectionIntentProviderSpecificSettings() (*ReplicationProtectionIntentProviderSpecificSettings, bool) {
1748	return nil, false
1749}
1750
1751// AsBasicReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for A2AReplicationIntentDetails.
1752func (arid A2AReplicationIntentDetails) AsBasicReplicationProtectionIntentProviderSpecificSettings() (BasicReplicationProtectionIntentProviderSpecificSettings, bool) {
1753	return &arid, true
1754}
1755
1756// A2AReprotectInput azure specific reprotect input.
1757type A2AReprotectInput struct {
1758	// RecoveryContainerID - The recovery container Id.
1759	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
1760	// VMDisks - The list of vm disk details.
1761	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
1762	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
1763	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1764	// RecoveryCloudServiceID - The recovery cloud service Id. Valid for V1 scenarios.
1765	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
1766	// RecoveryAvailabilitySetID - The recovery availability set.
1767	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
1768	// PolicyID - The Policy Id.
1769	PolicyID *string `json:"policyId,omitempty"`
1770	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
1771	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
1772}
1773
1774// MarshalJSON is the custom marshaler for A2AReprotectInput.
1775func (ari A2AReprotectInput) MarshalJSON() ([]byte, error) {
1776	ari.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A
1777	objectMap := make(map[string]interface{})
1778	if ari.RecoveryContainerID != nil {
1779		objectMap["recoveryContainerId"] = ari.RecoveryContainerID
1780	}
1781	if ari.VMDisks != nil {
1782		objectMap["vmDisks"] = ari.VMDisks
1783	}
1784	if ari.RecoveryResourceGroupID != nil {
1785		objectMap["recoveryResourceGroupId"] = ari.RecoveryResourceGroupID
1786	}
1787	if ari.RecoveryCloudServiceID != nil {
1788		objectMap["recoveryCloudServiceId"] = ari.RecoveryCloudServiceID
1789	}
1790	if ari.RecoveryAvailabilitySetID != nil {
1791		objectMap["recoveryAvailabilitySetId"] = ari.RecoveryAvailabilitySetID
1792	}
1793	if ari.PolicyID != nil {
1794		objectMap["policyId"] = ari.PolicyID
1795	}
1796	if ari.InstanceType != "" {
1797		objectMap["instanceType"] = ari.InstanceType
1798	}
1799	return json.Marshal(objectMap)
1800}
1801
1802// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1803func (ari A2AReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
1804	return &ari, true
1805}
1806
1807// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1808func (ari A2AReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
1809	return nil, false
1810}
1811
1812// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1813func (ari A2AReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
1814	return nil, false
1815}
1816
1817// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1818func (ari A2AReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
1819	return nil, false
1820}
1821
1822// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1823func (ari A2AReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
1824	return nil, false
1825}
1826
1827// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1828func (ari A2AReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
1829	return &ari, true
1830}
1831
1832// A2ASwitchProtectionInput a2A specific switch protection input.
1833type A2ASwitchProtectionInput struct {
1834	// RecoveryContainerID - The recovery container Id.
1835	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
1836	// VMDisks - The list of vm disk details.
1837	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
1838	// VMManagedDisks - The list of vm managed disk details.
1839	VMManagedDisks *[]A2AVMManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
1840	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
1841	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1842	// RecoveryCloudServiceID - The recovery cloud service Id. Valid for V1 scenarios.
1843	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
1844	// RecoveryAvailabilitySetID - The recovery availability set.
1845	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
1846	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
1847	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
1848	// PolicyID - The Policy Id.
1849	PolicyID *string `json:"policyId,omitempty"`
1850	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
1851	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
1852	// DiskEncryptionInfo - The recovery disk encryption information.
1853	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
1854	// InstanceType - Possible values include: 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeSwitchProtectionProviderSpecificInput', 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A'
1855	InstanceType InstanceTypeBasicSwitchProtectionProviderSpecificInput `json:"instanceType,omitempty"`
1856}
1857
1858// MarshalJSON is the custom marshaler for A2ASwitchProtectionInput.
1859func (aspi A2ASwitchProtectionInput) MarshalJSON() ([]byte, error) {
1860	aspi.InstanceType = InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A
1861	objectMap := make(map[string]interface{})
1862	if aspi.RecoveryContainerID != nil {
1863		objectMap["recoveryContainerId"] = aspi.RecoveryContainerID
1864	}
1865	if aspi.VMDisks != nil {
1866		objectMap["vmDisks"] = aspi.VMDisks
1867	}
1868	if aspi.VMManagedDisks != nil {
1869		objectMap["vmManagedDisks"] = aspi.VMManagedDisks
1870	}
1871	if aspi.RecoveryResourceGroupID != nil {
1872		objectMap["recoveryResourceGroupId"] = aspi.RecoveryResourceGroupID
1873	}
1874	if aspi.RecoveryCloudServiceID != nil {
1875		objectMap["recoveryCloudServiceId"] = aspi.RecoveryCloudServiceID
1876	}
1877	if aspi.RecoveryAvailabilitySetID != nil {
1878		objectMap["recoveryAvailabilitySetId"] = aspi.RecoveryAvailabilitySetID
1879	}
1880	if aspi.RecoveryProximityPlacementGroupID != nil {
1881		objectMap["recoveryProximityPlacementGroupId"] = aspi.RecoveryProximityPlacementGroupID
1882	}
1883	if aspi.PolicyID != nil {
1884		objectMap["policyId"] = aspi.PolicyID
1885	}
1886	if aspi.RecoveryBootDiagStorageAccountID != nil {
1887		objectMap["recoveryBootDiagStorageAccountId"] = aspi.RecoveryBootDiagStorageAccountID
1888	}
1889	if aspi.DiskEncryptionInfo != nil {
1890		objectMap["diskEncryptionInfo"] = aspi.DiskEncryptionInfo
1891	}
1892	if aspi.InstanceType != "" {
1893		objectMap["instanceType"] = aspi.InstanceType
1894	}
1895	return json.Marshal(objectMap)
1896}
1897
1898// AsA2ASwitchProtectionInput is the BasicSwitchProtectionProviderSpecificInput implementation for A2ASwitchProtectionInput.
1899func (aspi A2ASwitchProtectionInput) AsA2ASwitchProtectionInput() (*A2ASwitchProtectionInput, bool) {
1900	return &aspi, true
1901}
1902
1903// AsSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for A2ASwitchProtectionInput.
1904func (aspi A2ASwitchProtectionInput) AsSwitchProtectionProviderSpecificInput() (*SwitchProtectionProviderSpecificInput, bool) {
1905	return nil, false
1906}
1907
1908// AsBasicSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for A2ASwitchProtectionInput.
1909func (aspi A2ASwitchProtectionInput) AsBasicSwitchProtectionProviderSpecificInput() (BasicSwitchProtectionProviderSpecificInput, bool) {
1910	return &aspi, true
1911}
1912
1913// A2ATestFailoverInput a2A provider specific input for test failover.
1914type A2ATestFailoverInput struct {
1915	// RecoveryPointID - The recovery point id to be passed to test failover to a particular recovery point. In case of latest recovery point, null should be passed.
1916	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
1917	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for TFO or not.
1918	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
1919	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
1920	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
1921}
1922
1923// MarshalJSON is the custom marshaler for A2ATestFailoverInput.
1924func (atfi A2ATestFailoverInput) MarshalJSON() ([]byte, error) {
1925	atfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A
1926	objectMap := make(map[string]interface{})
1927	if atfi.RecoveryPointID != nil {
1928		objectMap["recoveryPointId"] = atfi.RecoveryPointID
1929	}
1930	if atfi.CloudServiceCreationOption != nil {
1931		objectMap["cloudServiceCreationOption"] = atfi.CloudServiceCreationOption
1932	}
1933	if atfi.InstanceType != "" {
1934		objectMap["instanceType"] = atfi.InstanceType
1935	}
1936	return json.Marshal(objectMap)
1937}
1938
1939// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1940func (atfi A2ATestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
1941	return &atfi, true
1942}
1943
1944// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1945func (atfi A2ATestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
1946	return nil, false
1947}
1948
1949// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1950func (atfi A2ATestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
1951	return nil, false
1952}
1953
1954// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1955func (atfi A2ATestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
1956	return nil, false
1957}
1958
1959// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1960func (atfi A2ATestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
1961	return nil, false
1962}
1963
1964// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1965func (atfi A2ATestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
1966	return nil, false
1967}
1968
1969// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1970func (atfi A2ATestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
1971	return &atfi, true
1972}
1973
1974// A2AUnplannedFailoverInput a2A provider specific input for unplanned failover.
1975type A2AUnplannedFailoverInput struct {
1976	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
1977	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
1978	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for failover or not.
1979	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
1980	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
1981	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
1982}
1983
1984// MarshalJSON is the custom marshaler for A2AUnplannedFailoverInput.
1985func (aufi A2AUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
1986	aufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A
1987	objectMap := make(map[string]interface{})
1988	if aufi.RecoveryPointID != nil {
1989		objectMap["recoveryPointId"] = aufi.RecoveryPointID
1990	}
1991	if aufi.CloudServiceCreationOption != nil {
1992		objectMap["cloudServiceCreationOption"] = aufi.CloudServiceCreationOption
1993	}
1994	if aufi.InstanceType != "" {
1995		objectMap["instanceType"] = aufi.InstanceType
1996	}
1997	return json.Marshal(objectMap)
1998}
1999
2000// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2001func (aufi A2AUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
2002	return &aufi, true
2003}
2004
2005// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2006func (aufi A2AUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
2007	return nil, false
2008}
2009
2010// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2011func (aufi A2AUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
2012	return nil, false
2013}
2014
2015// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2016func (aufi A2AUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
2017	return nil, false
2018}
2019
2020// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2021func (aufi A2AUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
2022	return nil, false
2023}
2024
2025// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2026func (aufi A2AUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
2027	return nil, false
2028}
2029
2030// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2031func (aufi A2AUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
2032	return &aufi, true
2033}
2034
2035// A2AUnprotectedDiskDetails a2A unprotected disk details.
2036type A2AUnprotectedDiskDetails struct {
2037	// DiskLunID - The source lun Id for the data disk.
2038	DiskLunID *int32 `json:"diskLunId,omitempty"`
2039}
2040
2041// A2AUpdateContainerMappingInput a2A update protection container mapping.
2042type A2AUpdateContainerMappingInput struct {
2043	// AgentAutoUpdateStatus - A value indicating whether the auto update is enabled. Possible values include: 'Disabled', 'Enabled'
2044	AgentAutoUpdateStatus AgentAutoUpdateStatus `json:"agentAutoUpdateStatus,omitempty"`
2045	// AutomationAccountArmID - The automation account arm id.
2046	AutomationAccountArmID *string `json:"automationAccountArmId,omitempty"`
2047	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeReplicationProviderSpecificUpdateContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A'
2048	InstanceType InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInput `json:"instanceType,omitempty"`
2049}
2050
2051// MarshalJSON is the custom marshaler for A2AUpdateContainerMappingInput.
2052func (aucmi A2AUpdateContainerMappingInput) MarshalJSON() ([]byte, error) {
2053	aucmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A
2054	objectMap := make(map[string]interface{})
2055	if aucmi.AgentAutoUpdateStatus != "" {
2056		objectMap["agentAutoUpdateStatus"] = aucmi.AgentAutoUpdateStatus
2057	}
2058	if aucmi.AutomationAccountArmID != nil {
2059		objectMap["automationAccountArmId"] = aucmi.AutomationAccountArmID
2060	}
2061	if aucmi.InstanceType != "" {
2062		objectMap["instanceType"] = aucmi.InstanceType
2063	}
2064	return json.Marshal(objectMap)
2065}
2066
2067// AsA2AUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for A2AUpdateContainerMappingInput.
2068func (aucmi A2AUpdateContainerMappingInput) AsA2AUpdateContainerMappingInput() (*A2AUpdateContainerMappingInput, bool) {
2069	return &aucmi, true
2070}
2071
2072// AsReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for A2AUpdateContainerMappingInput.
2073func (aucmi A2AUpdateContainerMappingInput) AsReplicationProviderSpecificUpdateContainerMappingInput() (*ReplicationProviderSpecificUpdateContainerMappingInput, bool) {
2074	return nil, false
2075}
2076
2077// AsBasicReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for A2AUpdateContainerMappingInput.
2078func (aucmi A2AUpdateContainerMappingInput) AsBasicReplicationProviderSpecificUpdateContainerMappingInput() (BasicReplicationProviderSpecificUpdateContainerMappingInput, bool) {
2079	return &aucmi, true
2080}
2081
2082// A2AUpdateReplicationProtectedItemInput inMage Azure V2 input to update replication protected item.
2083type A2AUpdateReplicationProtectedItemInput struct {
2084	// RecoveryCloudServiceID - The target cloud service ARM Id (for V1).
2085	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
2086	// RecoveryResourceGroupID - The target resource group ARM Id (for V2).
2087	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
2088	// ManagedDiskUpdateDetails - Managed disk update details.
2089	ManagedDiskUpdateDetails *[]A2AVMManagedDiskUpdateDetails `json:"managedDiskUpdateDetails,omitempty"`
2090	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
2091	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
2092	// DiskEncryptionInfo - The recovery os disk encryption information.
2093	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2094	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
2095	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
2096	// TfoAzureVMName - The user given name for test failover VM.
2097	TfoAzureVMName *string `json:"tfoAzureVMName,omitempty"`
2098	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
2099	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
2100}
2101
2102// MarshalJSON is the custom marshaler for A2AUpdateReplicationProtectedItemInput.
2103func (aurpii A2AUpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
2104	aurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A
2105	objectMap := make(map[string]interface{})
2106	if aurpii.RecoveryCloudServiceID != nil {
2107		objectMap["recoveryCloudServiceId"] = aurpii.RecoveryCloudServiceID
2108	}
2109	if aurpii.RecoveryResourceGroupID != nil {
2110		objectMap["recoveryResourceGroupId"] = aurpii.RecoveryResourceGroupID
2111	}
2112	if aurpii.ManagedDiskUpdateDetails != nil {
2113		objectMap["managedDiskUpdateDetails"] = aurpii.ManagedDiskUpdateDetails
2114	}
2115	if aurpii.RecoveryBootDiagStorageAccountID != nil {
2116		objectMap["recoveryBootDiagStorageAccountId"] = aurpii.RecoveryBootDiagStorageAccountID
2117	}
2118	if aurpii.DiskEncryptionInfo != nil {
2119		objectMap["diskEncryptionInfo"] = aurpii.DiskEncryptionInfo
2120	}
2121	if aurpii.RecoveryProximityPlacementGroupID != nil {
2122		objectMap["recoveryProximityPlacementGroupId"] = aurpii.RecoveryProximityPlacementGroupID
2123	}
2124	if aurpii.TfoAzureVMName != nil {
2125		objectMap["tfoAzureVMName"] = aurpii.TfoAzureVMName
2126	}
2127	if aurpii.InstanceType != "" {
2128		objectMap["instanceType"] = aurpii.InstanceType
2129	}
2130	return json.Marshal(objectMap)
2131}
2132
2133// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2134func (aurpii A2AUpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
2135	return &aurpii, true
2136}
2137
2138// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2139func (aurpii A2AUpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
2140	return nil, false
2141}
2142
2143// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2144func (aurpii A2AUpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
2145	return nil, false
2146}
2147
2148// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2149func (aurpii A2AUpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
2150	return nil, false
2151}
2152
2153// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2154func (aurpii A2AUpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
2155	return nil, false
2156}
2157
2158// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2159func (aurpii A2AUpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
2160	return &aurpii, true
2161}
2162
2163// A2AVMDiskDetails azure VM disk details.
2164type A2AVMDiskDetails struct {
2165	// DiskURI - The disk Uri.
2166	DiskURI *string `json:"diskUri,omitempty"`
2167	// RecoveryAzureStorageAccountID - The recovery VHD storage account Id.
2168	RecoveryAzureStorageAccountID *string `json:"recoveryAzureStorageAccountId,omitempty"`
2169	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Id.
2170	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2171}
2172
2173// A2AVMDiskInputDetails azure VM disk input details.
2174type A2AVMDiskInputDetails struct {
2175	// DiskURI - The disk Uri.
2176	DiskURI *string `json:"diskUri,omitempty"`
2177	// RecoveryAzureStorageAccountID - The recovery VHD storage account Id.
2178	RecoveryAzureStorageAccountID *string `json:"recoveryAzureStorageAccountId,omitempty"`
2179	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Id.
2180	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2181}
2182
2183// A2AVMManagedDiskDetails azure VM managed disk input details.
2184type A2AVMManagedDiskDetails struct {
2185	// DiskID - The disk Id.
2186	DiskID *string `json:"diskId,omitempty"`
2187	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Arm Id.
2188	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2189	// RecoveryResourceGroupID - The target resource group Arm Id.
2190	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
2191	// RecoveryReplicaDiskAccountType - The replica disk type.
2192	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
2193	// RecoveryTargetDiskAccountType - The target disk type after failover.
2194	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
2195	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
2196	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
2197	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
2198	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2199}
2200
2201// A2AVMManagedDiskInputDetails azure VM managed disk input details.
2202type A2AVMManagedDiskInputDetails struct {
2203	// DiskID - The disk Id.
2204	DiskID *string `json:"diskId,omitempty"`
2205	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Arm Id.
2206	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2207	// RecoveryResourceGroupID - The target resource group Arm Id.
2208	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
2209	// RecoveryReplicaDiskAccountType - The replica disk type. Its an optional value and will be same as source disk type if not user provided.
2210	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
2211	// RecoveryTargetDiskAccountType - The target disk type after failover. Its an optional value and will be same as source disk type if not user provided.
2212	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
2213	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
2214	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
2215	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
2216	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2217}
2218
2219// A2AVMManagedDiskUpdateDetails azure VM managed disk update input details.
2220type A2AVMManagedDiskUpdateDetails struct {
2221	// DiskID - The disk Id.
2222	DiskID *string `json:"diskId,omitempty"`
2223	// RecoveryTargetDiskAccountType - The target disk type before failover.
2224	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
2225	// RecoveryReplicaDiskAccountType - The replica disk type before failover.
2226	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
2227	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
2228	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2229	// FailoverDiskName - The target disk name for unplanned failover operation.
2230	FailoverDiskName *string `json:"failoverDiskName,omitempty"`
2231	// TfoDiskName - The target disk name for test failover operation.
2232	TfoDiskName *string `json:"tfoDiskName,omitempty"`
2233}
2234
2235// AddDisksInput input for add disk(s) operation.
2236type AddDisksInput struct {
2237	// Properties - Add disks input properties.
2238	Properties *AddDisksInputProperties `json:"properties,omitempty"`
2239}
2240
2241// AddDisksInputProperties add Disks input properties.
2242type AddDisksInputProperties struct {
2243	// ProviderSpecificDetails - The ReplicationProviderInput. For HyperVReplicaAzure provider, it will be AzureEnableProtectionInput object. For San provider, it will be SanEnableProtectionInput object. For HyperVReplicaAzure provider, it can be null.
2244	ProviderSpecificDetails BasicAddDisksProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
2245}
2246
2247// UnmarshalJSON is the custom unmarshaler for AddDisksInputProperties struct.
2248func (adip *AddDisksInputProperties) UnmarshalJSON(body []byte) error {
2249	var m map[string]*json.RawMessage
2250	err := json.Unmarshal(body, &m)
2251	if err != nil {
2252		return err
2253	}
2254	for k, v := range m {
2255		switch k {
2256		case "providerSpecificDetails":
2257			if v != nil {
2258				providerSpecificDetails, err := unmarshalBasicAddDisksProviderSpecificInput(*v)
2259				if err != nil {
2260					return err
2261				}
2262				adip.ProviderSpecificDetails = providerSpecificDetails
2263			}
2264		}
2265	}
2266
2267	return nil
2268}
2269
2270// BasicAddDisksProviderSpecificInput add Disks provider specific input.
2271type BasicAddDisksProviderSpecificInput interface {
2272	AsA2AAddDisksInput() (*A2AAddDisksInput, bool)
2273	AsAddDisksProviderSpecificInput() (*AddDisksProviderSpecificInput, bool)
2274}
2275
2276// AddDisksProviderSpecificInput add Disks provider specific input.
2277type AddDisksProviderSpecificInput struct {
2278	// InstanceType - Possible values include: 'InstanceTypeAddDisksProviderSpecificInput', 'InstanceTypeA2A'
2279	InstanceType InstanceType `json:"instanceType,omitempty"`
2280}
2281
2282func unmarshalBasicAddDisksProviderSpecificInput(body []byte) (BasicAddDisksProviderSpecificInput, error) {
2283	var m map[string]interface{}
2284	err := json.Unmarshal(body, &m)
2285	if err != nil {
2286		return nil, err
2287	}
2288
2289	switch m["instanceType"] {
2290	case string(InstanceTypeA2A):
2291		var aadi A2AAddDisksInput
2292		err := json.Unmarshal(body, &aadi)
2293		return aadi, err
2294	default:
2295		var adpsi AddDisksProviderSpecificInput
2296		err := json.Unmarshal(body, &adpsi)
2297		return adpsi, err
2298	}
2299}
2300func unmarshalBasicAddDisksProviderSpecificInputArray(body []byte) ([]BasicAddDisksProviderSpecificInput, error) {
2301	var rawMessages []*json.RawMessage
2302	err := json.Unmarshal(body, &rawMessages)
2303	if err != nil {
2304		return nil, err
2305	}
2306
2307	adpsiArray := make([]BasicAddDisksProviderSpecificInput, len(rawMessages))
2308
2309	for index, rawMessage := range rawMessages {
2310		adpsi, err := unmarshalBasicAddDisksProviderSpecificInput(*rawMessage)
2311		if err != nil {
2312			return nil, err
2313		}
2314		adpsiArray[index] = adpsi
2315	}
2316	return adpsiArray, nil
2317}
2318
2319// MarshalJSON is the custom marshaler for AddDisksProviderSpecificInput.
2320func (adpsi AddDisksProviderSpecificInput) MarshalJSON() ([]byte, error) {
2321	adpsi.InstanceType = InstanceTypeAddDisksProviderSpecificInput
2322	objectMap := make(map[string]interface{})
2323	if adpsi.InstanceType != "" {
2324		objectMap["instanceType"] = adpsi.InstanceType
2325	}
2326	return json.Marshal(objectMap)
2327}
2328
2329// AsA2AAddDisksInput is the BasicAddDisksProviderSpecificInput implementation for AddDisksProviderSpecificInput.
2330func (adpsi AddDisksProviderSpecificInput) AsA2AAddDisksInput() (*A2AAddDisksInput, bool) {
2331	return nil, false
2332}
2333
2334// AsAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for AddDisksProviderSpecificInput.
2335func (adpsi AddDisksProviderSpecificInput) AsAddDisksProviderSpecificInput() (*AddDisksProviderSpecificInput, bool) {
2336	return &adpsi, true
2337}
2338
2339// AsBasicAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for AddDisksProviderSpecificInput.
2340func (adpsi AddDisksProviderSpecificInput) AsBasicAddDisksProviderSpecificInput() (BasicAddDisksProviderSpecificInput, bool) {
2341	return &adpsi, true
2342}
2343
2344// AddRecoveryServicesProviderInput input required to add a provider.
2345type AddRecoveryServicesProviderInput struct {
2346	// Properties - The properties of an add provider request.
2347	Properties *AddRecoveryServicesProviderInputProperties `json:"properties,omitempty"`
2348}
2349
2350// AddRecoveryServicesProviderInputProperties the properties of an add provider request.
2351type AddRecoveryServicesProviderInputProperties struct {
2352	// MachineName - The name of the machine where the provider is getting added.
2353	MachineName *string `json:"machineName,omitempty"`
2354	// MachineID - The Id of the machine where the provider is getting added.
2355	MachineID *string `json:"machineId,omitempty"`
2356	// AuthenticationIdentityInput - The identity provider input for DRA authentication.
2357	AuthenticationIdentityInput *IdentityProviderInput `json:"authenticationIdentityInput,omitempty"`
2358	// ResourceAccessIdentityInput - The identity provider input for resource access.
2359	ResourceAccessIdentityInput *IdentityProviderInput `json:"resourceAccessIdentityInput,omitempty"`
2360	// DataPlaneAuthenticationIdentityInput - The identity provider input for data plane authentication.
2361	DataPlaneAuthenticationIdentityInput *IdentityProviderInput `json:"dataPlaneAuthenticationIdentityInput,omitempty"`
2362}
2363
2364// AddVCenterRequest input required to add vCenter.
2365type AddVCenterRequest struct {
2366	// Properties - The properties of an add vCenter request.
2367	Properties *AddVCenterRequestProperties `json:"properties,omitempty"`
2368}
2369
2370// AddVCenterRequestProperties the properties of an add vCenter request.
2371type AddVCenterRequestProperties struct {
2372	// FriendlyName - The friendly name of the vCenter.
2373	FriendlyName *string `json:"friendlyName,omitempty"`
2374	// IPAddress - The IP address of the vCenter to be discovered.
2375	IPAddress *string `json:"ipAddress,omitempty"`
2376	// ProcessServerID - The process server Id from where the discovery is orchestrated.
2377	ProcessServerID *string `json:"processServerId,omitempty"`
2378	// Port - The port number for discovery.
2379	Port *string `json:"port,omitempty"`
2380	// RunAsAccountID - The account Id which has privileges to discover the vCenter.
2381	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
2382}
2383
2384// AgentDetails agent details.
2385type AgentDetails struct {
2386	// AgentID - READ-ONLY; The Id of the agent running on the server.
2387	AgentID *string `json:"agentId,omitempty"`
2388	// MachineID - READ-ONLY; The Id of the machine to which the agent is registered.
2389	MachineID *string `json:"machineId,omitempty"`
2390	// BiosID - READ-ONLY; The machine BIOS Id.
2391	BiosID *string `json:"biosId,omitempty"`
2392	// Fqdn - READ-ONLY; The machine FQDN.
2393	Fqdn *string `json:"fqdn,omitempty"`
2394	// Disks - READ-ONLY; The details of agent disks.
2395	Disks *[]AgentDiskDetails `json:"disks,omitempty"`
2396}
2397
2398// MarshalJSON is the custom marshaler for AgentDetails.
2399func (ad AgentDetails) MarshalJSON() ([]byte, error) {
2400	objectMap := make(map[string]interface{})
2401	return json.Marshal(objectMap)
2402}
2403
2404// AgentDiskDetails agent disk details.
2405type AgentDiskDetails struct {
2406	// DiskID - READ-ONLY; The disk Id.
2407	DiskID *string `json:"diskId,omitempty"`
2408	// DiskName - READ-ONLY; The disk name.
2409	DiskName *string `json:"diskName,omitempty"`
2410	// IsOSDisk - READ-ONLY; A value indicating whether the disk is the OS disk.
2411	IsOSDisk *string `json:"isOSDisk,omitempty"`
2412	// CapacityInBytes - READ-ONLY; The disk capacity in bytes.
2413	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
2414	// LunID - READ-ONLY; The lun of disk.
2415	LunID *int32 `json:"lunId,omitempty"`
2416}
2417
2418// MarshalJSON is the custom marshaler for AgentDiskDetails.
2419func (add AgentDiskDetails) MarshalJSON() ([]byte, error) {
2420	objectMap := make(map[string]interface{})
2421	return json.Marshal(objectMap)
2422}
2423
2424// Alert implements the Alert class.
2425type Alert struct {
2426	autorest.Response `json:"-"`
2427	// Properties - Alert related data.
2428	Properties *AlertProperties `json:"properties,omitempty"`
2429	// ID - READ-ONLY; Resource Id
2430	ID *string `json:"id,omitempty"`
2431	// Name - READ-ONLY; Resource Name
2432	Name *string `json:"name,omitempty"`
2433	// Type - READ-ONLY; Resource Type
2434	Type *string `json:"type,omitempty"`
2435	// Location - Resource Location
2436	Location *string `json:"location,omitempty"`
2437}
2438
2439// MarshalJSON is the custom marshaler for Alert.
2440func (a Alert) MarshalJSON() ([]byte, error) {
2441	objectMap := make(map[string]interface{})
2442	if a.Properties != nil {
2443		objectMap["properties"] = a.Properties
2444	}
2445	if a.Location != nil {
2446		objectMap["location"] = a.Location
2447	}
2448	return json.Marshal(objectMap)
2449}
2450
2451// AlertCollection collection of alerts.
2452type AlertCollection struct {
2453	autorest.Response `json:"-"`
2454	// Value - The list of alerts.
2455	Value *[]Alert `json:"value,omitempty"`
2456	// NextLink - The value of next link.
2457	NextLink *string `json:"nextLink,omitempty"`
2458}
2459
2460// AlertCollectionIterator provides access to a complete listing of Alert values.
2461type AlertCollectionIterator struct {
2462	i    int
2463	page AlertCollectionPage
2464}
2465
2466// NextWithContext advances to the next value.  If there was an error making
2467// the request the iterator does not advance and the error is returned.
2468func (iter *AlertCollectionIterator) NextWithContext(ctx context.Context) (err error) {
2469	if tracing.IsEnabled() {
2470		ctx = tracing.StartSpan(ctx, fqdn+"/AlertCollectionIterator.NextWithContext")
2471		defer func() {
2472			sc := -1
2473			if iter.Response().Response.Response != nil {
2474				sc = iter.Response().Response.Response.StatusCode
2475			}
2476			tracing.EndSpan(ctx, sc, err)
2477		}()
2478	}
2479	iter.i++
2480	if iter.i < len(iter.page.Values()) {
2481		return nil
2482	}
2483	err = iter.page.NextWithContext(ctx)
2484	if err != nil {
2485		iter.i--
2486		return err
2487	}
2488	iter.i = 0
2489	return nil
2490}
2491
2492// Next advances to the next value.  If there was an error making
2493// the request the iterator does not advance and the error is returned.
2494// Deprecated: Use NextWithContext() instead.
2495func (iter *AlertCollectionIterator) Next() error {
2496	return iter.NextWithContext(context.Background())
2497}
2498
2499// NotDone returns true if the enumeration should be started or is not yet complete.
2500func (iter AlertCollectionIterator) NotDone() bool {
2501	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2502}
2503
2504// Response returns the raw server response from the last page request.
2505func (iter AlertCollectionIterator) Response() AlertCollection {
2506	return iter.page.Response()
2507}
2508
2509// Value returns the current value or a zero-initialized value if the
2510// iterator has advanced beyond the end of the collection.
2511func (iter AlertCollectionIterator) Value() Alert {
2512	if !iter.page.NotDone() {
2513		return Alert{}
2514	}
2515	return iter.page.Values()[iter.i]
2516}
2517
2518// Creates a new instance of the AlertCollectionIterator type.
2519func NewAlertCollectionIterator(page AlertCollectionPage) AlertCollectionIterator {
2520	return AlertCollectionIterator{page: page}
2521}
2522
2523// IsEmpty returns true if the ListResult contains no values.
2524func (ac AlertCollection) IsEmpty() bool {
2525	return ac.Value == nil || len(*ac.Value) == 0
2526}
2527
2528// hasNextLink returns true if the NextLink is not empty.
2529func (ac AlertCollection) hasNextLink() bool {
2530	return ac.NextLink != nil && len(*ac.NextLink) != 0
2531}
2532
2533// alertCollectionPreparer prepares a request to retrieve the next set of results.
2534// It returns nil if no more results exist.
2535func (ac AlertCollection) alertCollectionPreparer(ctx context.Context) (*http.Request, error) {
2536	if !ac.hasNextLink() {
2537		return nil, nil
2538	}
2539	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2540		autorest.AsJSON(),
2541		autorest.AsGet(),
2542		autorest.WithBaseURL(to.String(ac.NextLink)))
2543}
2544
2545// AlertCollectionPage contains a page of Alert values.
2546type AlertCollectionPage struct {
2547	fn func(context.Context, AlertCollection) (AlertCollection, error)
2548	ac AlertCollection
2549}
2550
2551// NextWithContext advances to the next page of values.  If there was an error making
2552// the request the page does not advance and the error is returned.
2553func (page *AlertCollectionPage) NextWithContext(ctx context.Context) (err error) {
2554	if tracing.IsEnabled() {
2555		ctx = tracing.StartSpan(ctx, fqdn+"/AlertCollectionPage.NextWithContext")
2556		defer func() {
2557			sc := -1
2558			if page.Response().Response.Response != nil {
2559				sc = page.Response().Response.Response.StatusCode
2560			}
2561			tracing.EndSpan(ctx, sc, err)
2562		}()
2563	}
2564	for {
2565		next, err := page.fn(ctx, page.ac)
2566		if err != nil {
2567			return err
2568		}
2569		page.ac = next
2570		if !next.hasNextLink() || !next.IsEmpty() {
2571			break
2572		}
2573	}
2574	return nil
2575}
2576
2577// Next advances to the next page of values.  If there was an error making
2578// the request the page does not advance and the error is returned.
2579// Deprecated: Use NextWithContext() instead.
2580func (page *AlertCollectionPage) Next() error {
2581	return page.NextWithContext(context.Background())
2582}
2583
2584// NotDone returns true if the page enumeration should be started or is not yet complete.
2585func (page AlertCollectionPage) NotDone() bool {
2586	return !page.ac.IsEmpty()
2587}
2588
2589// Response returns the raw server response from the last page request.
2590func (page AlertCollectionPage) Response() AlertCollection {
2591	return page.ac
2592}
2593
2594// Values returns the slice of values for the current page or nil if there are no values.
2595func (page AlertCollectionPage) Values() []Alert {
2596	if page.ac.IsEmpty() {
2597		return nil
2598	}
2599	return *page.ac.Value
2600}
2601
2602// Creates a new instance of the AlertCollectionPage type.
2603func NewAlertCollectionPage(cur AlertCollection, getNextPage func(context.Context, AlertCollection) (AlertCollection, error)) AlertCollectionPage {
2604	return AlertCollectionPage{
2605		fn: getNextPage,
2606		ac: cur,
2607	}
2608}
2609
2610// AlertProperties the properties of an alert.
2611type AlertProperties struct {
2612	// SendToOwners - A value indicating whether to send email to subscription administrator.
2613	SendToOwners *string `json:"sendToOwners,omitempty"`
2614	// CustomEmailAddresses - The custom email address for sending emails.
2615	CustomEmailAddresses *[]string `json:"customEmailAddresses,omitempty"`
2616	// Locale - The locale for the email notification.
2617	Locale *string `json:"locale,omitempty"`
2618}
2619
2620// ApplyRecoveryPointInput input to apply recovery point.
2621type ApplyRecoveryPointInput struct {
2622	// Properties - The input properties to apply recovery point.
2623	Properties *ApplyRecoveryPointInputProperties `json:"properties,omitempty"`
2624}
2625
2626// ApplyRecoveryPointInputProperties input properties to apply recovery point.
2627type ApplyRecoveryPointInputProperties struct {
2628	// RecoveryPointID - The recovery point Id.
2629	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
2630	// ProviderSpecificDetails - Provider specific input for applying recovery point.
2631	ProviderSpecificDetails BasicApplyRecoveryPointProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
2632}
2633
2634// UnmarshalJSON is the custom unmarshaler for ApplyRecoveryPointInputProperties struct.
2635func (arpip *ApplyRecoveryPointInputProperties) UnmarshalJSON(body []byte) error {
2636	var m map[string]*json.RawMessage
2637	err := json.Unmarshal(body, &m)
2638	if err != nil {
2639		return err
2640	}
2641	for k, v := range m {
2642		switch k {
2643		case "recoveryPointId":
2644			if v != nil {
2645				var recoveryPointID string
2646				err = json.Unmarshal(*v, &recoveryPointID)
2647				if err != nil {
2648					return err
2649				}
2650				arpip.RecoveryPointID = &recoveryPointID
2651			}
2652		case "providerSpecificDetails":
2653			if v != nil {
2654				providerSpecificDetails, err := unmarshalBasicApplyRecoveryPointProviderSpecificInput(*v)
2655				if err != nil {
2656					return err
2657				}
2658				arpip.ProviderSpecificDetails = providerSpecificDetails
2659			}
2660		}
2661	}
2662
2663	return nil
2664}
2665
2666// BasicApplyRecoveryPointProviderSpecificInput provider specific input for apply recovery point.
2667type BasicApplyRecoveryPointProviderSpecificInput interface {
2668	AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool)
2669	AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool)
2670	AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool)
2671	AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool)
2672	AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool)
2673}
2674
2675// ApplyRecoveryPointProviderSpecificInput provider specific input for apply recovery point.
2676type ApplyRecoveryPointProviderSpecificInput struct {
2677	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
2678	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
2679}
2680
2681func unmarshalBasicApplyRecoveryPointProviderSpecificInput(body []byte) (BasicApplyRecoveryPointProviderSpecificInput, error) {
2682	var m map[string]interface{}
2683	err := json.Unmarshal(body, &m)
2684	if err != nil {
2685		return nil, err
2686	}
2687
2688	switch m["instanceType"] {
2689	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A):
2690		var aarpi A2AApplyRecoveryPointInput
2691		err := json.Unmarshal(body, &aarpi)
2692		return aarpi, err
2693	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure):
2694		var hvraarpi HyperVReplicaAzureApplyRecoveryPointInput
2695		err := json.Unmarshal(body, &hvraarpi)
2696		return hvraarpi, err
2697	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2):
2698		var imavarpi InMageAzureV2ApplyRecoveryPointInput
2699		err := json.Unmarshal(body, &imavarpi)
2700		return imavarpi, err
2701	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm):
2702		var imrarpi InMageRcmApplyRecoveryPointInput
2703		err := json.Unmarshal(body, &imrarpi)
2704		return imrarpi, err
2705	default:
2706		var arppsi ApplyRecoveryPointProviderSpecificInput
2707		err := json.Unmarshal(body, &arppsi)
2708		return arppsi, err
2709	}
2710}
2711func unmarshalBasicApplyRecoveryPointProviderSpecificInputArray(body []byte) ([]BasicApplyRecoveryPointProviderSpecificInput, error) {
2712	var rawMessages []*json.RawMessage
2713	err := json.Unmarshal(body, &rawMessages)
2714	if err != nil {
2715		return nil, err
2716	}
2717
2718	arppsiArray := make([]BasicApplyRecoveryPointProviderSpecificInput, len(rawMessages))
2719
2720	for index, rawMessage := range rawMessages {
2721		arppsi, err := unmarshalBasicApplyRecoveryPointProviderSpecificInput(*rawMessage)
2722		if err != nil {
2723			return nil, err
2724		}
2725		arppsiArray[index] = arppsi
2726	}
2727	return arppsiArray, nil
2728}
2729
2730// MarshalJSON is the custom marshaler for ApplyRecoveryPointProviderSpecificInput.
2731func (arppsi ApplyRecoveryPointProviderSpecificInput) MarshalJSON() ([]byte, error) {
2732	arppsi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput
2733	objectMap := make(map[string]interface{})
2734	if arppsi.InstanceType != "" {
2735		objectMap["instanceType"] = arppsi.InstanceType
2736	}
2737	return json.Marshal(objectMap)
2738}
2739
2740// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2741func (arppsi ApplyRecoveryPointProviderSpecificInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
2742	return nil, false
2743}
2744
2745// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2746func (arppsi ApplyRecoveryPointProviderSpecificInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
2747	return nil, false
2748}
2749
2750// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2751func (arppsi ApplyRecoveryPointProviderSpecificInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
2752	return nil, false
2753}
2754
2755// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2756func (arppsi ApplyRecoveryPointProviderSpecificInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
2757	return nil, false
2758}
2759
2760// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2761func (arppsi ApplyRecoveryPointProviderSpecificInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
2762	return &arppsi, true
2763}
2764
2765// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2766func (arppsi ApplyRecoveryPointProviderSpecificInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
2767	return &arppsi, true
2768}
2769
2770// AsrJobDetails this class represents job details based on specific job type.
2771type AsrJobDetails struct {
2772	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
2773	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
2774	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
2775	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
2776}
2777
2778// MarshalJSON is the custom marshaler for AsrJobDetails.
2779func (ajd AsrJobDetails) MarshalJSON() ([]byte, error) {
2780	ajd.InstanceType = InstanceTypeAsrJobDetails
2781	objectMap := make(map[string]interface{})
2782	if ajd.AffectedObjectDetails != nil {
2783		objectMap["affectedObjectDetails"] = ajd.AffectedObjectDetails
2784	}
2785	if ajd.InstanceType != "" {
2786		objectMap["instanceType"] = ajd.InstanceType
2787	}
2788	return json.Marshal(objectMap)
2789}
2790
2791// AsAsrJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2792func (ajd AsrJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
2793	return &ajd, true
2794}
2795
2796// AsExportJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2797func (ajd AsrJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
2798	return nil, false
2799}
2800
2801// AsFailoverJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2802func (ajd AsrJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
2803	return nil, false
2804}
2805
2806// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2807func (ajd AsrJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
2808	return nil, false
2809}
2810
2811// AsTestFailoverJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2812func (ajd AsrJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
2813	return nil, false
2814}
2815
2816// AsJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2817func (ajd AsrJobDetails) AsJobDetails() (*JobDetails, bool) {
2818	return nil, false
2819}
2820
2821// AsBasicJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2822func (ajd AsrJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
2823	return &ajd, true
2824}
2825
2826// ASRTask task of the Job.
2827type ASRTask struct {
2828	// TaskID - The Id.
2829	TaskID *string `json:"taskId,omitempty"`
2830	// Name - The unique Task name.
2831	Name *string `json:"name,omitempty"`
2832	// StartTime - The start time.
2833	StartTime *date.Time `json:"startTime,omitempty"`
2834	// EndTime - The end time.
2835	EndTime *date.Time `json:"endTime,omitempty"`
2836	// AllowedActions - The state/actions applicable on this task.
2837	AllowedActions *[]string `json:"allowedActions,omitempty"`
2838	// FriendlyName - The name.
2839	FriendlyName *string `json:"friendlyName,omitempty"`
2840	// State - The State. It is one of these values - NotStarted, InProgress, Succeeded, Failed, Cancelled, Suspended or Other.
2841	State *string `json:"state,omitempty"`
2842	// StateDescription - The description of the task state. For example - For Succeeded state, description can be Completed, PartiallySucceeded, CompletedWithInformation or Skipped.
2843	StateDescription *string `json:"stateDescription,omitempty"`
2844	// TaskType - The type of task. Details in CustomDetails property depend on this type.
2845	TaskType *string `json:"taskType,omitempty"`
2846	// CustomDetails - The custom task details based on the task type.
2847	CustomDetails BasicTaskTypeDetails `json:"customDetails,omitempty"`
2848	// GroupTaskCustomDetails - The custom task details based on the task type, if the task type is GroupTaskDetails or one of the types derived from it.
2849	GroupTaskCustomDetails BasicGroupTaskDetails `json:"groupTaskCustomDetails,omitempty"`
2850	// Errors - The task error details.
2851	Errors *[]JobErrorDetails `json:"errors,omitempty"`
2852}
2853
2854// UnmarshalJSON is the custom unmarshaler for ASRTask struct.
2855func (at *ASRTask) UnmarshalJSON(body []byte) error {
2856	var m map[string]*json.RawMessage
2857	err := json.Unmarshal(body, &m)
2858	if err != nil {
2859		return err
2860	}
2861	for k, v := range m {
2862		switch k {
2863		case "taskId":
2864			if v != nil {
2865				var taskID string
2866				err = json.Unmarshal(*v, &taskID)
2867				if err != nil {
2868					return err
2869				}
2870				at.TaskID = &taskID
2871			}
2872		case "name":
2873			if v != nil {
2874				var name string
2875				err = json.Unmarshal(*v, &name)
2876				if err != nil {
2877					return err
2878				}
2879				at.Name = &name
2880			}
2881		case "startTime":
2882			if v != nil {
2883				var startTime date.Time
2884				err = json.Unmarshal(*v, &startTime)
2885				if err != nil {
2886					return err
2887				}
2888				at.StartTime = &startTime
2889			}
2890		case "endTime":
2891			if v != nil {
2892				var endTime date.Time
2893				err = json.Unmarshal(*v, &endTime)
2894				if err != nil {
2895					return err
2896				}
2897				at.EndTime = &endTime
2898			}
2899		case "allowedActions":
2900			if v != nil {
2901				var allowedActions []string
2902				err = json.Unmarshal(*v, &allowedActions)
2903				if err != nil {
2904					return err
2905				}
2906				at.AllowedActions = &allowedActions
2907			}
2908		case "friendlyName":
2909			if v != nil {
2910				var friendlyName string
2911				err = json.Unmarshal(*v, &friendlyName)
2912				if err != nil {
2913					return err
2914				}
2915				at.FriendlyName = &friendlyName
2916			}
2917		case "state":
2918			if v != nil {
2919				var state string
2920				err = json.Unmarshal(*v, &state)
2921				if err != nil {
2922					return err
2923				}
2924				at.State = &state
2925			}
2926		case "stateDescription":
2927			if v != nil {
2928				var stateDescription string
2929				err = json.Unmarshal(*v, &stateDescription)
2930				if err != nil {
2931					return err
2932				}
2933				at.StateDescription = &stateDescription
2934			}
2935		case "taskType":
2936			if v != nil {
2937				var taskType string
2938				err = json.Unmarshal(*v, &taskType)
2939				if err != nil {
2940					return err
2941				}
2942				at.TaskType = &taskType
2943			}
2944		case "customDetails":
2945			if v != nil {
2946				customDetails, err := unmarshalBasicTaskTypeDetails(*v)
2947				if err != nil {
2948					return err
2949				}
2950				at.CustomDetails = customDetails
2951			}
2952		case "groupTaskCustomDetails":
2953			if v != nil {
2954				groupTaskCustomDetails, err := unmarshalBasicGroupTaskDetails(*v)
2955				if err != nil {
2956					return err
2957				}
2958				at.GroupTaskCustomDetails = groupTaskCustomDetails
2959			}
2960		case "errors":
2961			if v != nil {
2962				var errorsVar []JobErrorDetails
2963				err = json.Unmarshal(*v, &errorsVar)
2964				if err != nil {
2965					return err
2966				}
2967				at.Errors = &errorsVar
2968			}
2969		}
2970	}
2971
2972	return nil
2973}
2974
2975// AutomationRunbookTaskDetails this class represents the task details for an automation runbook.
2976type AutomationRunbookTaskDetails struct {
2977	// Name - The recovery plan task name.
2978	Name *string `json:"name,omitempty"`
2979	// CloudServiceName - The cloud service of the automation runbook account.
2980	CloudServiceName *string `json:"cloudServiceName,omitempty"`
2981	// SubscriptionID - The subscription Id of the automation runbook account.
2982	SubscriptionID *string `json:"subscriptionId,omitempty"`
2983	// AccountName - The automation account name of the runbook.
2984	AccountName *string `json:"accountName,omitempty"`
2985	// RunbookID - The runbook Id.
2986	RunbookID *string `json:"runbookId,omitempty"`
2987	// RunbookName - The runbook name.
2988	RunbookName *string `json:"runbookName,omitempty"`
2989	// JobID - The job Id of the runbook execution.
2990	JobID *string `json:"jobId,omitempty"`
2991	// JobOutput - The execution output of the runbook.
2992	JobOutput *string `json:"jobOutput,omitempty"`
2993	// IsPrimarySideScript - A value indicating whether it is a primary side script or not.
2994	IsPrimarySideScript *bool `json:"isPrimarySideScript,omitempty"`
2995	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
2996	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
2997}
2998
2999// MarshalJSON is the custom marshaler for AutomationRunbookTaskDetails.
3000func (artd AutomationRunbookTaskDetails) MarshalJSON() ([]byte, error) {
3001	artd.InstanceType = InstanceTypeAutomationRunbookTaskDetails
3002	objectMap := make(map[string]interface{})
3003	if artd.Name != nil {
3004		objectMap["name"] = artd.Name
3005	}
3006	if artd.CloudServiceName != nil {
3007		objectMap["cloudServiceName"] = artd.CloudServiceName
3008	}
3009	if artd.SubscriptionID != nil {
3010		objectMap["subscriptionId"] = artd.SubscriptionID
3011	}
3012	if artd.AccountName != nil {
3013		objectMap["accountName"] = artd.AccountName
3014	}
3015	if artd.RunbookID != nil {
3016		objectMap["runbookId"] = artd.RunbookID
3017	}
3018	if artd.RunbookName != nil {
3019		objectMap["runbookName"] = artd.RunbookName
3020	}
3021	if artd.JobID != nil {
3022		objectMap["jobId"] = artd.JobID
3023	}
3024	if artd.JobOutput != nil {
3025		objectMap["jobOutput"] = artd.JobOutput
3026	}
3027	if artd.IsPrimarySideScript != nil {
3028		objectMap["isPrimarySideScript"] = artd.IsPrimarySideScript
3029	}
3030	if artd.InstanceType != "" {
3031		objectMap["instanceType"] = artd.InstanceType
3032	}
3033	return json.Marshal(objectMap)
3034}
3035
3036// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3037func (artd AutomationRunbookTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
3038	return &artd, true
3039}
3040
3041// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3042func (artd AutomationRunbookTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
3043	return nil, false
3044}
3045
3046// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3047func (artd AutomationRunbookTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
3048	return nil, false
3049}
3050
3051// AsJobTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3052func (artd AutomationRunbookTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
3053	return nil, false
3054}
3055
3056// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3057func (artd AutomationRunbookTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
3058	return nil, false
3059}
3060
3061// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3062func (artd AutomationRunbookTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
3063	return nil, false
3064}
3065
3066// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3067func (artd AutomationRunbookTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
3068	return nil, false
3069}
3070
3071// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3072func (artd AutomationRunbookTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
3073	return nil, false
3074}
3075
3076// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3077func (artd AutomationRunbookTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
3078	return nil, false
3079}
3080
3081// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3082func (artd AutomationRunbookTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
3083	return &artd, true
3084}
3085
3086// AzureFabricCreationInput fabric provider specific settings.
3087type AzureFabricCreationInput struct {
3088	// Location - The Location.
3089	Location *string `json:"location,omitempty"`
3090	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
3091	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
3092}
3093
3094// MarshalJSON is the custom marshaler for AzureFabricCreationInput.
3095func (afci AzureFabricCreationInput) MarshalJSON() ([]byte, error) {
3096	afci.InstanceType = InstanceTypeAzure
3097	objectMap := make(map[string]interface{})
3098	if afci.Location != nil {
3099		objectMap["location"] = afci.Location
3100	}
3101	if afci.InstanceType != "" {
3102		objectMap["instanceType"] = afci.InstanceType
3103	}
3104	return json.Marshal(objectMap)
3105}
3106
3107// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3108func (afci AzureFabricCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
3109	return &afci, true
3110}
3111
3112// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3113func (afci AzureFabricCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
3114	return nil, false
3115}
3116
3117// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3118func (afci AzureFabricCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
3119	return nil, false
3120}
3121
3122// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3123func (afci AzureFabricCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
3124	return nil, false
3125}
3126
3127// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3128func (afci AzureFabricCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
3129	return &afci, true
3130}
3131
3132// AzureFabricSpecificDetails azure Fabric Specific Details.
3133type AzureFabricSpecificDetails struct {
3134	// Location - The Location for the Azure fabric.
3135	Location *string `json:"location,omitempty"`
3136	// ContainerIds - The container Ids for the Azure fabric.
3137	ContainerIds *[]string `json:"containerIds,omitempty"`
3138	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
3139	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
3140}
3141
3142// MarshalJSON is the custom marshaler for AzureFabricSpecificDetails.
3143func (afsd AzureFabricSpecificDetails) MarshalJSON() ([]byte, error) {
3144	afsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure
3145	objectMap := make(map[string]interface{})
3146	if afsd.Location != nil {
3147		objectMap["location"] = afsd.Location
3148	}
3149	if afsd.ContainerIds != nil {
3150		objectMap["containerIds"] = afsd.ContainerIds
3151	}
3152	if afsd.InstanceType != "" {
3153		objectMap["instanceType"] = afsd.InstanceType
3154	}
3155	return json.Marshal(objectMap)
3156}
3157
3158// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3159func (afsd AzureFabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
3160	return &afsd, true
3161}
3162
3163// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3164func (afsd AzureFabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
3165	return nil, false
3166}
3167
3168// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3169func (afsd AzureFabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
3170	return nil, false
3171}
3172
3173// AsVmmDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3174func (afsd AzureFabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
3175	return nil, false
3176}
3177
3178// AsVMwareDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3179func (afsd AzureFabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
3180	return nil, false
3181}
3182
3183// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3184func (afsd AzureFabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
3185	return nil, false
3186}
3187
3188// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3189func (afsd AzureFabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
3190	return nil, false
3191}
3192
3193// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3194func (afsd AzureFabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
3195	return &afsd, true
3196}
3197
3198// AzureToAzureCreateNetworkMappingInput create network mappings input properties/behavior specific to
3199// Azure to Azure Network mapping.
3200type AzureToAzureCreateNetworkMappingInput struct {
3201	// PrimaryNetworkID - The primary azure vnet Id.
3202	PrimaryNetworkID *string `json:"primaryNetworkId,omitempty"`
3203	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
3204	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
3205}
3206
3207// MarshalJSON is the custom marshaler for AzureToAzureCreateNetworkMappingInput.
3208func (atacnmi AzureToAzureCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
3209	atacnmi.InstanceType = InstanceTypeAzureToAzure
3210	objectMap := make(map[string]interface{})
3211	if atacnmi.PrimaryNetworkID != nil {
3212		objectMap["primaryNetworkId"] = atacnmi.PrimaryNetworkID
3213	}
3214	if atacnmi.InstanceType != "" {
3215		objectMap["instanceType"] = atacnmi.InstanceType
3216	}
3217	return json.Marshal(objectMap)
3218}
3219
3220// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3221func (atacnmi AzureToAzureCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
3222	return &atacnmi, true
3223}
3224
3225// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3226func (atacnmi AzureToAzureCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
3227	return nil, false
3228}
3229
3230// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3231func (atacnmi AzureToAzureCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
3232	return nil, false
3233}
3234
3235// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3236func (atacnmi AzureToAzureCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
3237	return nil, false
3238}
3239
3240// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3241func (atacnmi AzureToAzureCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
3242	return &atacnmi, true
3243}
3244
3245// AzureToAzureNetworkMappingSettings a2A Network Mapping fabric specific settings.
3246type AzureToAzureNetworkMappingSettings struct {
3247	// PrimaryFabricLocation - The primary fabric location.
3248	PrimaryFabricLocation *string `json:"primaryFabricLocation,omitempty"`
3249	// RecoveryFabricLocation - The recovery fabric location.
3250	RecoveryFabricLocation *string `json:"recoveryFabricLocation,omitempty"`
3251	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
3252	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
3253}
3254
3255// MarshalJSON is the custom marshaler for AzureToAzureNetworkMappingSettings.
3256func (atanms AzureToAzureNetworkMappingSettings) MarshalJSON() ([]byte, error) {
3257	atanms.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure
3258	objectMap := make(map[string]interface{})
3259	if atanms.PrimaryFabricLocation != nil {
3260		objectMap["primaryFabricLocation"] = atanms.PrimaryFabricLocation
3261	}
3262	if atanms.RecoveryFabricLocation != nil {
3263		objectMap["recoveryFabricLocation"] = atanms.RecoveryFabricLocation
3264	}
3265	if atanms.InstanceType != "" {
3266		objectMap["instanceType"] = atanms.InstanceType
3267	}
3268	return json.Marshal(objectMap)
3269}
3270
3271// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3272func (atanms AzureToAzureNetworkMappingSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
3273	return &atanms, true
3274}
3275
3276// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3277func (atanms AzureToAzureNetworkMappingSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
3278	return nil, false
3279}
3280
3281// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3282func (atanms AzureToAzureNetworkMappingSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
3283	return nil, false
3284}
3285
3286// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3287func (atanms AzureToAzureNetworkMappingSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
3288	return nil, false
3289}
3290
3291// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3292func (atanms AzureToAzureNetworkMappingSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
3293	return &atanms, true
3294}
3295
3296// AzureToAzureUpdateNetworkMappingInput updates network mappings input.
3297type AzureToAzureUpdateNetworkMappingInput struct {
3298	// PrimaryNetworkID - The primary azure vnet Id.
3299	PrimaryNetworkID *string `json:"primaryNetworkId,omitempty"`
3300	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
3301	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
3302}
3303
3304// MarshalJSON is the custom marshaler for AzureToAzureUpdateNetworkMappingInput.
3305func (ataunmi AzureToAzureUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
3306	ataunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure
3307	objectMap := make(map[string]interface{})
3308	if ataunmi.PrimaryNetworkID != nil {
3309		objectMap["primaryNetworkId"] = ataunmi.PrimaryNetworkID
3310	}
3311	if ataunmi.InstanceType != "" {
3312		objectMap["instanceType"] = ataunmi.InstanceType
3313	}
3314	return json.Marshal(objectMap)
3315}
3316
3317// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3318func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
3319	return &ataunmi, true
3320}
3321
3322// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3323func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
3324	return nil, false
3325}
3326
3327// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3328func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
3329	return nil, false
3330}
3331
3332// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3333func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
3334	return nil, false
3335}
3336
3337// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3338func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
3339	return &ataunmi, true
3340}
3341
3342// AzureToAzureVMSyncedConfigDetails azure to Azure VM synced configuration details.
3343type AzureToAzureVMSyncedConfigDetails struct {
3344	// Tags - The Azure VM tags.
3345	Tags map[string]*string `json:"tags"`
3346	// InputEndpoints - The Azure VM input endpoints.
3347	InputEndpoints *[]InputEndpoint `json:"inputEndpoints,omitempty"`
3348}
3349
3350// MarshalJSON is the custom marshaler for AzureToAzureVMSyncedConfigDetails.
3351func (atavscd AzureToAzureVMSyncedConfigDetails) MarshalJSON() ([]byte, error) {
3352	objectMap := make(map[string]interface{})
3353	if atavscd.Tags != nil {
3354		objectMap["tags"] = atavscd.Tags
3355	}
3356	if atavscd.InputEndpoints != nil {
3357		objectMap["inputEndpoints"] = atavscd.InputEndpoints
3358	}
3359	return json.Marshal(objectMap)
3360}
3361
3362// AzureVMDiskDetails disk details for E2A provider.
3363type AzureVMDiskDetails struct {
3364	// VhdType - VHD type.
3365	VhdType *string `json:"vhdType,omitempty"`
3366	// VhdID - The VHD id.
3367	VhdID *string `json:"vhdId,omitempty"`
3368	// DiskID - The disk resource id.
3369	DiskID *string `json:"diskId,omitempty"`
3370	// VhdName - VHD name.
3371	VhdName *string `json:"vhdName,omitempty"`
3372	// MaxSizeMB - Max side in MB.
3373	MaxSizeMB *string `json:"maxSizeMB,omitempty"`
3374	// TargetDiskLocation - Blob uri of the Azure disk.
3375	TargetDiskLocation *string `json:"targetDiskLocation,omitempty"`
3376	// TargetDiskName - The target Azure disk name.
3377	TargetDiskName *string `json:"targetDiskName,omitempty"`
3378	// LunID - Ordinal\LunId of the disk for the Azure VM.
3379	LunID *string `json:"lunId,omitempty"`
3380	// DiskEncryptionSetID - The DiskEncryptionSet ARM ID.
3381	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
3382}
3383
3384// ComputeSizeErrorDetails represents the error used to indicate why the target compute size is not
3385// applicable.
3386type ComputeSizeErrorDetails struct {
3387	// Message - The error message.
3388	Message *string `json:"message,omitempty"`
3389	// Severity - The severity of the error.
3390	Severity *string `json:"severity,omitempty"`
3391}
3392
3393// BasicConfigurationSettings replication provider specific settings.
3394type BasicConfigurationSettings interface {
3395	AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool)
3396	AsReplicationGroupDetails() (*ReplicationGroupDetails, bool)
3397	AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool)
3398	AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool)
3399	AsConfigurationSettings() (*ConfigurationSettings, bool)
3400}
3401
3402// ConfigurationSettings replication provider specific settings.
3403type ConfigurationSettings struct {
3404	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
3405	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
3406}
3407
3408func unmarshalBasicConfigurationSettings(body []byte) (BasicConfigurationSettings, error) {
3409	var m map[string]interface{}
3410	err := json.Unmarshal(body, &m)
3411	if err != nil {
3412		return nil, err
3413	}
3414
3415	switch m["instanceType"] {
3416	case string(InstanceTypeHyperVVirtualMachine):
3417		var hvvmd HyperVVirtualMachineDetails
3418		err := json.Unmarshal(body, &hvvmd)
3419		return hvvmd, err
3420	case string(InstanceTypeReplicationGroupDetails):
3421		var rgd ReplicationGroupDetails
3422		err := json.Unmarshal(body, &rgd)
3423		return rgd, err
3424	case string(InstanceTypeVmmVirtualMachine):
3425		var vvmd VmmVirtualMachineDetails
3426		err := json.Unmarshal(body, &vvmd)
3427		return vvmd, err
3428	case string(InstanceTypeVMwareVirtualMachine):
3429		var vmvmd VMwareVirtualMachineDetails
3430		err := json.Unmarshal(body, &vmvmd)
3431		return vmvmd, err
3432	default:
3433		var cs ConfigurationSettings
3434		err := json.Unmarshal(body, &cs)
3435		return cs, err
3436	}
3437}
3438func unmarshalBasicConfigurationSettingsArray(body []byte) ([]BasicConfigurationSettings, error) {
3439	var rawMessages []*json.RawMessage
3440	err := json.Unmarshal(body, &rawMessages)
3441	if err != nil {
3442		return nil, err
3443	}
3444
3445	csArray := make([]BasicConfigurationSettings, len(rawMessages))
3446
3447	for index, rawMessage := range rawMessages {
3448		cs, err := unmarshalBasicConfigurationSettings(*rawMessage)
3449		if err != nil {
3450			return nil, err
3451		}
3452		csArray[index] = cs
3453	}
3454	return csArray, nil
3455}
3456
3457// MarshalJSON is the custom marshaler for ConfigurationSettings.
3458func (cs ConfigurationSettings) MarshalJSON() ([]byte, error) {
3459	cs.InstanceType = InstanceTypeConfigurationSettings
3460	objectMap := make(map[string]interface{})
3461	if cs.InstanceType != "" {
3462		objectMap["instanceType"] = cs.InstanceType
3463	}
3464	return json.Marshal(objectMap)
3465}
3466
3467// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3468func (cs ConfigurationSettings) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
3469	return nil, false
3470}
3471
3472// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3473func (cs ConfigurationSettings) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
3474	return nil, false
3475}
3476
3477// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3478func (cs ConfigurationSettings) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
3479	return nil, false
3480}
3481
3482// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3483func (cs ConfigurationSettings) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
3484	return nil, false
3485}
3486
3487// AsConfigurationSettings is the BasicConfigurationSettings implementation for ConfigurationSettings.
3488func (cs ConfigurationSettings) AsConfigurationSettings() (*ConfigurationSettings, bool) {
3489	return &cs, true
3490}
3491
3492// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for ConfigurationSettings.
3493func (cs ConfigurationSettings) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
3494	return &cs, true
3495}
3496
3497// ConfigureAlertRequest request to configure alerts for the system.
3498type ConfigureAlertRequest struct {
3499	// Properties - The properties of a configure alert request.
3500	Properties *ConfigureAlertRequestProperties `json:"properties,omitempty"`
3501}
3502
3503// ConfigureAlertRequestProperties properties of a configure alert request.
3504type ConfigureAlertRequestProperties struct {
3505	// SendToOwners - A value indicating whether to send email to subscription administrator.
3506	SendToOwners *string `json:"sendToOwners,omitempty"`
3507	// CustomEmailAddresses - The custom email address for sending emails.
3508	CustomEmailAddresses *[]string `json:"customEmailAddresses,omitempty"`
3509	// Locale - The locale for the email notification.
3510	Locale *string `json:"locale,omitempty"`
3511}
3512
3513// ConsistencyCheckTaskDetails this class contains monitoring details of all the inconsistent Protected
3514// Entities in Vmm.
3515type ConsistencyCheckTaskDetails struct {
3516	// VMDetails - The list of inconsistent Vm details.
3517	VMDetails *[]InconsistentVMDetails `json:"vmDetails,omitempty"`
3518	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
3519	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
3520}
3521
3522// MarshalJSON is the custom marshaler for ConsistencyCheckTaskDetails.
3523func (cctd ConsistencyCheckTaskDetails) MarshalJSON() ([]byte, error) {
3524	cctd.InstanceType = InstanceTypeConsistencyCheckTaskDetails
3525	objectMap := make(map[string]interface{})
3526	if cctd.VMDetails != nil {
3527		objectMap["vmDetails"] = cctd.VMDetails
3528	}
3529	if cctd.InstanceType != "" {
3530		objectMap["instanceType"] = cctd.InstanceType
3531	}
3532	return json.Marshal(objectMap)
3533}
3534
3535// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3536func (cctd ConsistencyCheckTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
3537	return nil, false
3538}
3539
3540// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3541func (cctd ConsistencyCheckTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
3542	return &cctd, true
3543}
3544
3545// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3546func (cctd ConsistencyCheckTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
3547	return nil, false
3548}
3549
3550// AsJobTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3551func (cctd ConsistencyCheckTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
3552	return nil, false
3553}
3554
3555// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3556func (cctd ConsistencyCheckTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
3557	return nil, false
3558}
3559
3560// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3561func (cctd ConsistencyCheckTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
3562	return nil, false
3563}
3564
3565// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3566func (cctd ConsistencyCheckTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
3567	return nil, false
3568}
3569
3570// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3571func (cctd ConsistencyCheckTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
3572	return nil, false
3573}
3574
3575// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3576func (cctd ConsistencyCheckTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
3577	return nil, false
3578}
3579
3580// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3581func (cctd ConsistencyCheckTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
3582	return &cctd, true
3583}
3584
3585// CreateNetworkMappingInput create network mappings input.
3586type CreateNetworkMappingInput struct {
3587	// Properties - Input properties for creating network mapping.
3588	Properties *CreateNetworkMappingInputProperties `json:"properties,omitempty"`
3589}
3590
3591// CreateNetworkMappingInputProperties common input details for network mapping operation.
3592type CreateNetworkMappingInputProperties struct {
3593	// RecoveryFabricName - Recovery fabric Name.
3594	RecoveryFabricName *string `json:"recoveryFabricName,omitempty"`
3595	// RecoveryNetworkID - Recovery network Id.
3596	RecoveryNetworkID *string `json:"recoveryNetworkId,omitempty"`
3597	// FabricSpecificDetails - Fabric specific input properties.
3598	FabricSpecificDetails BasicFabricSpecificCreateNetworkMappingInput `json:"fabricSpecificDetails,omitempty"`
3599}
3600
3601// UnmarshalJSON is the custom unmarshaler for CreateNetworkMappingInputProperties struct.
3602func (cnmip *CreateNetworkMappingInputProperties) UnmarshalJSON(body []byte) error {
3603	var m map[string]*json.RawMessage
3604	err := json.Unmarshal(body, &m)
3605	if err != nil {
3606		return err
3607	}
3608	for k, v := range m {
3609		switch k {
3610		case "recoveryFabricName":
3611			if v != nil {
3612				var recoveryFabricName string
3613				err = json.Unmarshal(*v, &recoveryFabricName)
3614				if err != nil {
3615					return err
3616				}
3617				cnmip.RecoveryFabricName = &recoveryFabricName
3618			}
3619		case "recoveryNetworkId":
3620			if v != nil {
3621				var recoveryNetworkID string
3622				err = json.Unmarshal(*v, &recoveryNetworkID)
3623				if err != nil {
3624					return err
3625				}
3626				cnmip.RecoveryNetworkID = &recoveryNetworkID
3627			}
3628		case "fabricSpecificDetails":
3629			if v != nil {
3630				fabricSpecificDetails, err := unmarshalBasicFabricSpecificCreateNetworkMappingInput(*v)
3631				if err != nil {
3632					return err
3633				}
3634				cnmip.FabricSpecificDetails = fabricSpecificDetails
3635			}
3636		}
3637	}
3638
3639	return nil
3640}
3641
3642// CreatePolicyInput protection Policy input.
3643type CreatePolicyInput struct {
3644	// Properties - Policy creation properties.
3645	Properties *CreatePolicyInputProperties `json:"properties,omitempty"`
3646}
3647
3648// CreatePolicyInputProperties policy creation properties.
3649type CreatePolicyInputProperties struct {
3650	// ProviderSpecificInput - The ReplicationProviderSettings.
3651	ProviderSpecificInput BasicPolicyProviderSpecificInput `json:"providerSpecificInput,omitempty"`
3652}
3653
3654// UnmarshalJSON is the custom unmarshaler for CreatePolicyInputProperties struct.
3655func (cpip *CreatePolicyInputProperties) UnmarshalJSON(body []byte) error {
3656	var m map[string]*json.RawMessage
3657	err := json.Unmarshal(body, &m)
3658	if err != nil {
3659		return err
3660	}
3661	for k, v := range m {
3662		switch k {
3663		case "providerSpecificInput":
3664			if v != nil {
3665				providerSpecificInput, err := unmarshalBasicPolicyProviderSpecificInput(*v)
3666				if err != nil {
3667					return err
3668				}
3669				cpip.ProviderSpecificInput = providerSpecificInput
3670			}
3671		}
3672	}
3673
3674	return nil
3675}
3676
3677// CreateProtectionContainerInput create protection container input.
3678type CreateProtectionContainerInput struct {
3679	// Properties - Create protection container input properties.
3680	Properties *CreateProtectionContainerInputProperties `json:"properties,omitempty"`
3681}
3682
3683// CreateProtectionContainerInputProperties create protection container input properties.
3684type CreateProtectionContainerInputProperties struct {
3685	// ProviderSpecificInput - Provider specific inputs for container creation.
3686	ProviderSpecificInput *[]BasicReplicationProviderSpecificContainerCreationInput `json:"providerSpecificInput,omitempty"`
3687}
3688
3689// UnmarshalJSON is the custom unmarshaler for CreateProtectionContainerInputProperties struct.
3690func (cpcip *CreateProtectionContainerInputProperties) UnmarshalJSON(body []byte) error {
3691	var m map[string]*json.RawMessage
3692	err := json.Unmarshal(body, &m)
3693	if err != nil {
3694		return err
3695	}
3696	for k, v := range m {
3697		switch k {
3698		case "providerSpecificInput":
3699			if v != nil {
3700				providerSpecificInput, err := unmarshalBasicReplicationProviderSpecificContainerCreationInputArray(*v)
3701				if err != nil {
3702					return err
3703				}
3704				cpcip.ProviderSpecificInput = &providerSpecificInput
3705			}
3706		}
3707	}
3708
3709	return nil
3710}
3711
3712// CreateProtectionContainerMappingInput configure pairing input.
3713type CreateProtectionContainerMappingInput struct {
3714	// Properties - Configure protection input properties.
3715	Properties *CreateProtectionContainerMappingInputProperties `json:"properties,omitempty"`
3716}
3717
3718// CreateProtectionContainerMappingInputProperties configure pairing input properties.
3719type CreateProtectionContainerMappingInputProperties struct {
3720	// TargetProtectionContainerID - The target unique protection container name.
3721	TargetProtectionContainerID *string `json:"targetProtectionContainerId,omitempty"`
3722	// PolicyID - Applicable policy.
3723	PolicyID *string `json:"policyId,omitempty"`
3724	// ProviderSpecificInput - Provider specific input for pairing.
3725	ProviderSpecificInput BasicReplicationProviderSpecificContainerMappingInput `json:"providerSpecificInput,omitempty"`
3726}
3727
3728// UnmarshalJSON is the custom unmarshaler for CreateProtectionContainerMappingInputProperties struct.
3729func (cpcmip *CreateProtectionContainerMappingInputProperties) UnmarshalJSON(body []byte) error {
3730	var m map[string]*json.RawMessage
3731	err := json.Unmarshal(body, &m)
3732	if err != nil {
3733		return err
3734	}
3735	for k, v := range m {
3736		switch k {
3737		case "targetProtectionContainerId":
3738			if v != nil {
3739				var targetProtectionContainerID string
3740				err = json.Unmarshal(*v, &targetProtectionContainerID)
3741				if err != nil {
3742					return err
3743				}
3744				cpcmip.TargetProtectionContainerID = &targetProtectionContainerID
3745			}
3746		case "policyId":
3747			if v != nil {
3748				var policyID string
3749				err = json.Unmarshal(*v, &policyID)
3750				if err != nil {
3751					return err
3752				}
3753				cpcmip.PolicyID = &policyID
3754			}
3755		case "providerSpecificInput":
3756			if v != nil {
3757				providerSpecificInput, err := unmarshalBasicReplicationProviderSpecificContainerMappingInput(*v)
3758				if err != nil {
3759					return err
3760				}
3761				cpcmip.ProviderSpecificInput = providerSpecificInput
3762			}
3763		}
3764	}
3765
3766	return nil
3767}
3768
3769// CreateProtectionIntentInput create protection intent input.
3770type CreateProtectionIntentInput struct {
3771	// Properties - Create protection intent input properties.
3772	Properties *CreateProtectionIntentProperties `json:"properties,omitempty"`
3773}
3774
3775// CreateProtectionIntentProperties create protection intent input properties.
3776type CreateProtectionIntentProperties struct {
3777	// ProviderSpecificDetails - The ReplicationProviderInput. For A2A provider, it will be A2ACreateProtectionIntentInput object. For other providers, it can be null.
3778	ProviderSpecificDetails BasicCreateProtectionIntentProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
3779}
3780
3781// UnmarshalJSON is the custom unmarshaler for CreateProtectionIntentProperties struct.
3782func (cpip *CreateProtectionIntentProperties) UnmarshalJSON(body []byte) error {
3783	var m map[string]*json.RawMessage
3784	err := json.Unmarshal(body, &m)
3785	if err != nil {
3786		return err
3787	}
3788	for k, v := range m {
3789		switch k {
3790		case "providerSpecificDetails":
3791			if v != nil {
3792				providerSpecificDetails, err := unmarshalBasicCreateProtectionIntentProviderSpecificDetails(*v)
3793				if err != nil {
3794					return err
3795				}
3796				cpip.ProviderSpecificDetails = providerSpecificDetails
3797			}
3798		}
3799	}
3800
3801	return nil
3802}
3803
3804// BasicCreateProtectionIntentProviderSpecificDetails create protection intent provider specific input.
3805type BasicCreateProtectionIntentProviderSpecificDetails interface {
3806	AsA2ACreateProtectionIntentInput() (*A2ACreateProtectionIntentInput, bool)
3807	AsCreateProtectionIntentProviderSpecificDetails() (*CreateProtectionIntentProviderSpecificDetails, bool)
3808}
3809
3810// CreateProtectionIntentProviderSpecificDetails create protection intent provider specific input.
3811type CreateProtectionIntentProviderSpecificDetails struct {
3812	// InstanceType - Possible values include: 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeCreateProtectionIntentProviderSpecificDetails', 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A'
3813	InstanceType InstanceTypeBasicCreateProtectionIntentProviderSpecificDetails `json:"instanceType,omitempty"`
3814}
3815
3816func unmarshalBasicCreateProtectionIntentProviderSpecificDetails(body []byte) (BasicCreateProtectionIntentProviderSpecificDetails, error) {
3817	var m map[string]interface{}
3818	err := json.Unmarshal(body, &m)
3819	if err != nil {
3820		return nil, err
3821	}
3822
3823	switch m["instanceType"] {
3824	case string(InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A):
3825		var acpii A2ACreateProtectionIntentInput
3826		err := json.Unmarshal(body, &acpii)
3827		return acpii, err
3828	default:
3829		var cpipsd CreateProtectionIntentProviderSpecificDetails
3830		err := json.Unmarshal(body, &cpipsd)
3831		return cpipsd, err
3832	}
3833}
3834func unmarshalBasicCreateProtectionIntentProviderSpecificDetailsArray(body []byte) ([]BasicCreateProtectionIntentProviderSpecificDetails, error) {
3835	var rawMessages []*json.RawMessage
3836	err := json.Unmarshal(body, &rawMessages)
3837	if err != nil {
3838		return nil, err
3839	}
3840
3841	cpipsdArray := make([]BasicCreateProtectionIntentProviderSpecificDetails, len(rawMessages))
3842
3843	for index, rawMessage := range rawMessages {
3844		cpipsd, err := unmarshalBasicCreateProtectionIntentProviderSpecificDetails(*rawMessage)
3845		if err != nil {
3846			return nil, err
3847		}
3848		cpipsdArray[index] = cpipsd
3849	}
3850	return cpipsdArray, nil
3851}
3852
3853// MarshalJSON is the custom marshaler for CreateProtectionIntentProviderSpecificDetails.
3854func (cpipsd CreateProtectionIntentProviderSpecificDetails) MarshalJSON() ([]byte, error) {
3855	cpipsd.InstanceType = InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeCreateProtectionIntentProviderSpecificDetails
3856	objectMap := make(map[string]interface{})
3857	if cpipsd.InstanceType != "" {
3858		objectMap["instanceType"] = cpipsd.InstanceType
3859	}
3860	return json.Marshal(objectMap)
3861}
3862
3863// AsA2ACreateProtectionIntentInput is the BasicCreateProtectionIntentProviderSpecificDetails implementation for CreateProtectionIntentProviderSpecificDetails.
3864func (cpipsd CreateProtectionIntentProviderSpecificDetails) AsA2ACreateProtectionIntentInput() (*A2ACreateProtectionIntentInput, bool) {
3865	return nil, false
3866}
3867
3868// AsCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for CreateProtectionIntentProviderSpecificDetails.
3869func (cpipsd CreateProtectionIntentProviderSpecificDetails) AsCreateProtectionIntentProviderSpecificDetails() (*CreateProtectionIntentProviderSpecificDetails, bool) {
3870	return &cpipsd, true
3871}
3872
3873// AsBasicCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for CreateProtectionIntentProviderSpecificDetails.
3874func (cpipsd CreateProtectionIntentProviderSpecificDetails) AsBasicCreateProtectionIntentProviderSpecificDetails() (BasicCreateProtectionIntentProviderSpecificDetails, bool) {
3875	return &cpipsd, true
3876}
3877
3878// CreateRecoveryPlanInput create recovery plan input class.
3879type CreateRecoveryPlanInput struct {
3880	// Properties - Recovery plan creation properties.
3881	Properties *CreateRecoveryPlanInputProperties `json:"properties,omitempty"`
3882}
3883
3884// CreateRecoveryPlanInputProperties recovery plan creation properties.
3885type CreateRecoveryPlanInputProperties struct {
3886	// PrimaryFabricID - The primary fabric Id.
3887	PrimaryFabricID *string `json:"primaryFabricId,omitempty"`
3888	// RecoveryFabricID - The recovery fabric Id.
3889	RecoveryFabricID *string `json:"recoveryFabricId,omitempty"`
3890	// FailoverDeploymentModel - The failover deployment model. Possible values include: 'NotApplicable', 'Classic', 'ResourceManager'
3891	FailoverDeploymentModel FailoverDeploymentModel `json:"failoverDeploymentModel,omitempty"`
3892	// Groups - The recovery plan groups.
3893	Groups *[]RecoveryPlanGroup `json:"groups,omitempty"`
3894	// ProviderSpecificInput - The provider specific input.
3895	ProviderSpecificInput *[]BasicRecoveryPlanProviderSpecificInput `json:"providerSpecificInput,omitempty"`
3896}
3897
3898// UnmarshalJSON is the custom unmarshaler for CreateRecoveryPlanInputProperties struct.
3899func (crpip *CreateRecoveryPlanInputProperties) UnmarshalJSON(body []byte) error {
3900	var m map[string]*json.RawMessage
3901	err := json.Unmarshal(body, &m)
3902	if err != nil {
3903		return err
3904	}
3905	for k, v := range m {
3906		switch k {
3907		case "primaryFabricId":
3908			if v != nil {
3909				var primaryFabricID string
3910				err = json.Unmarshal(*v, &primaryFabricID)
3911				if err != nil {
3912					return err
3913				}
3914				crpip.PrimaryFabricID = &primaryFabricID
3915			}
3916		case "recoveryFabricId":
3917			if v != nil {
3918				var recoveryFabricID string
3919				err = json.Unmarshal(*v, &recoveryFabricID)
3920				if err != nil {
3921					return err
3922				}
3923				crpip.RecoveryFabricID = &recoveryFabricID
3924			}
3925		case "failoverDeploymentModel":
3926			if v != nil {
3927				var failoverDeploymentModel FailoverDeploymentModel
3928				err = json.Unmarshal(*v, &failoverDeploymentModel)
3929				if err != nil {
3930					return err
3931				}
3932				crpip.FailoverDeploymentModel = failoverDeploymentModel
3933			}
3934		case "groups":
3935			if v != nil {
3936				var groups []RecoveryPlanGroup
3937				err = json.Unmarshal(*v, &groups)
3938				if err != nil {
3939					return err
3940				}
3941				crpip.Groups = &groups
3942			}
3943		case "providerSpecificInput":
3944			if v != nil {
3945				providerSpecificInput, err := unmarshalBasicRecoveryPlanProviderSpecificInputArray(*v)
3946				if err != nil {
3947					return err
3948				}
3949				crpip.ProviderSpecificInput = &providerSpecificInput
3950			}
3951		}
3952	}
3953
3954	return nil
3955}
3956
3957// CurrentJobDetails current job details of the migration item.
3958type CurrentJobDetails struct {
3959	// JobName - The job name.
3960	JobName *string `json:"jobName,omitempty"`
3961	// JobID - The ARM Id of the job being executed.
3962	JobID *string `json:"jobId,omitempty"`
3963	// StartTime - The start time of the job.
3964	StartTime *date.Time `json:"startTime,omitempty"`
3965}
3966
3967// CurrentScenarioDetails current scenario details of the protected entity.
3968type CurrentScenarioDetails struct {
3969	// ScenarioName - Scenario name.
3970	ScenarioName *string `json:"scenarioName,omitempty"`
3971	// JobID - ARM Id of the job being executed.
3972	JobID *string `json:"jobId,omitempty"`
3973	// StartTime - Start time of the workflow.
3974	StartTime *date.Time `json:"startTime,omitempty"`
3975}
3976
3977// DataStore the data store details of the MT.
3978type DataStore struct {
3979	// SymbolicName - The symbolic name of data store.
3980	SymbolicName *string `json:"symbolicName,omitempty"`
3981	// UUID - The uuid of data store.
3982	UUID *string `json:"uuid,omitempty"`
3983	// Capacity - The capacity of data store in GBs.
3984	Capacity *string `json:"capacity,omitempty"`
3985	// FreeSpace - The free space of data store in GBs.
3986	FreeSpace *string `json:"freeSpace,omitempty"`
3987	// Type - The type of data store.
3988	Type *string `json:"type,omitempty"`
3989}
3990
3991// DisableProtectionInput disable protection input.
3992type DisableProtectionInput struct {
3993	// Properties - Disable protection input properties.
3994	Properties *DisableProtectionInputProperties `json:"properties,omitempty"`
3995}
3996
3997// DisableProtectionInputProperties disable protection input properties.
3998type DisableProtectionInputProperties struct {
3999	// DisableProtectionReason - Disable protection reason. It can have values NotSpecified/MigrationComplete. Possible values include: 'NotSpecified', 'MigrationComplete'
4000	DisableProtectionReason DisableProtectionReason `json:"disableProtectionReason,omitempty"`
4001	// ReplicationProviderInput - Replication provider specific input.
4002	ReplicationProviderInput BasicDisableProtectionProviderSpecificInput `json:"replicationProviderInput,omitempty"`
4003}
4004
4005// UnmarshalJSON is the custom unmarshaler for DisableProtectionInputProperties struct.
4006func (dpip *DisableProtectionInputProperties) UnmarshalJSON(body []byte) error {
4007	var m map[string]*json.RawMessage
4008	err := json.Unmarshal(body, &m)
4009	if err != nil {
4010		return err
4011	}
4012	for k, v := range m {
4013		switch k {
4014		case "disableProtectionReason":
4015			if v != nil {
4016				var disableProtectionReason DisableProtectionReason
4017				err = json.Unmarshal(*v, &disableProtectionReason)
4018				if err != nil {
4019					return err
4020				}
4021				dpip.DisableProtectionReason = disableProtectionReason
4022			}
4023		case "replicationProviderInput":
4024			if v != nil {
4025				replicationProviderInput, err := unmarshalBasicDisableProtectionProviderSpecificInput(*v)
4026				if err != nil {
4027					return err
4028				}
4029				dpip.ReplicationProviderInput = replicationProviderInput
4030			}
4031		}
4032	}
4033
4034	return nil
4035}
4036
4037// BasicDisableProtectionProviderSpecificInput disable protection provider specific input.
4038type BasicDisableProtectionProviderSpecificInput interface {
4039	AsInMageDisableProtectionProviderSpecificInput() (*InMageDisableProtectionProviderSpecificInput, bool)
4040	AsDisableProtectionProviderSpecificInput() (*DisableProtectionProviderSpecificInput, bool)
4041}
4042
4043// DisableProtectionProviderSpecificInput disable protection provider specific input.
4044type DisableProtectionProviderSpecificInput struct {
4045	// InstanceType - Possible values include: 'InstanceTypeDisableProtectionProviderSpecificInput', 'InstanceTypeInMage'
4046	InstanceType InstanceTypeBasicDisableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
4047}
4048
4049func unmarshalBasicDisableProtectionProviderSpecificInput(body []byte) (BasicDisableProtectionProviderSpecificInput, error) {
4050	var m map[string]interface{}
4051	err := json.Unmarshal(body, &m)
4052	if err != nil {
4053		return nil, err
4054	}
4055
4056	switch m["instanceType"] {
4057	case string(InstanceTypeInMage):
4058		var imdppsi InMageDisableProtectionProviderSpecificInput
4059		err := json.Unmarshal(body, &imdppsi)
4060		return imdppsi, err
4061	default:
4062		var dppsi DisableProtectionProviderSpecificInput
4063		err := json.Unmarshal(body, &dppsi)
4064		return dppsi, err
4065	}
4066}
4067func unmarshalBasicDisableProtectionProviderSpecificInputArray(body []byte) ([]BasicDisableProtectionProviderSpecificInput, error) {
4068	var rawMessages []*json.RawMessage
4069	err := json.Unmarshal(body, &rawMessages)
4070	if err != nil {
4071		return nil, err
4072	}
4073
4074	dppsiArray := make([]BasicDisableProtectionProviderSpecificInput, len(rawMessages))
4075
4076	for index, rawMessage := range rawMessages {
4077		dppsi, err := unmarshalBasicDisableProtectionProviderSpecificInput(*rawMessage)
4078		if err != nil {
4079			return nil, err
4080		}
4081		dppsiArray[index] = dppsi
4082	}
4083	return dppsiArray, nil
4084}
4085
4086// MarshalJSON is the custom marshaler for DisableProtectionProviderSpecificInput.
4087func (dppsi DisableProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
4088	dppsi.InstanceType = InstanceTypeDisableProtectionProviderSpecificInput
4089	objectMap := make(map[string]interface{})
4090	if dppsi.InstanceType != "" {
4091		objectMap["instanceType"] = dppsi.InstanceType
4092	}
4093	return json.Marshal(objectMap)
4094}
4095
4096// AsInMageDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for DisableProtectionProviderSpecificInput.
4097func (dppsi DisableProtectionProviderSpecificInput) AsInMageDisableProtectionProviderSpecificInput() (*InMageDisableProtectionProviderSpecificInput, bool) {
4098	return nil, false
4099}
4100
4101// AsDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for DisableProtectionProviderSpecificInput.
4102func (dppsi DisableProtectionProviderSpecificInput) AsDisableProtectionProviderSpecificInput() (*DisableProtectionProviderSpecificInput, bool) {
4103	return &dppsi, true
4104}
4105
4106// AsBasicDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for DisableProtectionProviderSpecificInput.
4107func (dppsi DisableProtectionProviderSpecificInput) AsBasicDisableProtectionProviderSpecificInput() (BasicDisableProtectionProviderSpecificInput, bool) {
4108	return &dppsi, true
4109}
4110
4111// DiscoverProtectableItemRequest request to add a physical machine as a protectable item in a container.
4112type DiscoverProtectableItemRequest struct {
4113	// Properties - The properties of a discover protectable item request.
4114	Properties *DiscoverProtectableItemRequestProperties `json:"properties,omitempty"`
4115}
4116
4117// DiscoverProtectableItemRequestProperties discover protectable item properties.
4118type DiscoverProtectableItemRequestProperties struct {
4119	// FriendlyName - The friendly name of the physical machine.
4120	FriendlyName *string `json:"friendlyName,omitempty"`
4121	// IPAddress - The IP address of the physical machine to be discovered.
4122	IPAddress *string `json:"ipAddress,omitempty"`
4123	// OsType - The OS type on the physical machine.
4124	OsType *string `json:"osType,omitempty"`
4125}
4126
4127// DiskDetails on-prem disk details data.
4128type DiskDetails struct {
4129	// MaxSizeMB - The hard disk max size in MB.
4130	MaxSizeMB *int64 `json:"maxSizeMB,omitempty"`
4131	// VhdType - The type of the volume.
4132	VhdType *string `json:"vhdType,omitempty"`
4133	// VhdID - The VHD Id.
4134	VhdID *string `json:"vhdId,omitempty"`
4135	// VhdName - The VHD name.
4136	VhdName *string `json:"vhdName,omitempty"`
4137}
4138
4139// DiskEncryptionInfo recovery disk encryption info (BEK and KEK).
4140type DiskEncryptionInfo struct {
4141	// DiskEncryptionKeyInfo - The recovery KeyVault reference for secret.
4142	DiskEncryptionKeyInfo *DiskEncryptionKeyInfo `json:"diskEncryptionKeyInfo,omitempty"`
4143	// KeyEncryptionKeyInfo - The recovery KeyVault reference for key.
4144	KeyEncryptionKeyInfo *KeyEncryptionKeyInfo `json:"keyEncryptionKeyInfo,omitempty"`
4145}
4146
4147// DiskEncryptionKeyInfo disk Encryption Key Information (BitLocker Encryption Key (BEK) on Windows).
4148type DiskEncryptionKeyInfo struct {
4149	// SecretIdentifier - The secret URL / identifier.
4150	SecretIdentifier *string `json:"secretIdentifier,omitempty"`
4151	// KeyVaultResourceArmID - The KeyVault resource ARM Id for secret.
4152	KeyVaultResourceArmID *string `json:"keyVaultResourceArmId,omitempty"`
4153}
4154
4155// DiskVolumeDetails volume details.
4156type DiskVolumeDetails struct {
4157	// Label - The volume label.
4158	Label *string `json:"label,omitempty"`
4159	// Name - The volume name.
4160	Name *string `json:"name,omitempty"`
4161}
4162
4163// Display contains the localized display information for this particular operation / action. These value
4164// will be used by several clients for (1) custom role definitions for RBAC; (2) complex query filters for
4165// the event service; and (3) audit history / records for management operations.
4166type Display struct {
4167	// Provider - The provider. The localized friendly form of the resource provider name – it is expected to also include the publisher/company responsible. It should use Title Casing and begin with "Microsoft" for 1st party services. e.g. "Microsoft Monitoring Insights" or "Microsoft Compute."
4168	Provider *string `json:"provider,omitempty"`
4169	// Resource - The resource. The localized friendly form of the resource related to this action/operation – it should match the public documentation for the resource provider. It should use Title Casing. This value should be unique for a particular URL type (e.g. nested types should *not* reuse their parent’s display.resource field). e.g. "Virtual Machines" or "Scheduler Job Collections", or "Virtual Machine VM Sizes" or "Scheduler Jobs"
4170	Resource *string `json:"resource,omitempty"`
4171	// Operation - The operation. The localized friendly name for the operation, as it should be shown to the user. It should be concise (to fit in drop downs) but clear (i.e. self-documenting). It should use Title Casing. Prescriptive guidance: Read Create or Update Delete 'ActionName'
4172	Operation *string `json:"operation,omitempty"`
4173	// Description - The description. The localized friendly description for the operation, as it should be shown to the user. It should be thorough, yet concise – it will be used in tool tips and detailed views. Prescriptive guidance for namespaces: Read any 'display.provider' resource Create or Update any 'display.provider' resource Delete any 'display.provider' resource Perform any other action on any 'display.provider' resource Prescriptive guidance for namespaces: Read any 'display.resource' Create or Update any 'display.resource' Delete any 'display.resource' 'ActionName' any 'display.resources'
4174	Description *string `json:"description,omitempty"`
4175}
4176
4177// DraDetails DRA details.
4178type DraDetails struct {
4179	// ID - READ-ONLY; The DRA Id.
4180	ID *string `json:"id,omitempty"`
4181	// Name - READ-ONLY; The DRA name.
4182	Name *string `json:"name,omitempty"`
4183	// Version - READ-ONLY; The DRA version.
4184	Version *string `json:"version,omitempty"`
4185	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the DRA.
4186	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
4187	// Health - READ-ONLY; The health of the DRA. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
4188	Health ProtectionHealth `json:"health,omitempty"`
4189	// HealthErrors - READ-ONLY; The health errors.
4190	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
4191}
4192
4193// MarshalJSON is the custom marshaler for DraDetails.
4194func (dd DraDetails) MarshalJSON() ([]byte, error) {
4195	objectMap := make(map[string]interface{})
4196	return json.Marshal(objectMap)
4197}
4198
4199// EnableMigrationInput enable migration input.
4200type EnableMigrationInput struct {
4201	// Properties - Enable migration input properties.
4202	Properties *EnableMigrationInputProperties `json:"properties,omitempty"`
4203}
4204
4205// EnableMigrationInputProperties enable migration input properties.
4206type EnableMigrationInputProperties struct {
4207	// PolicyID - The policy Id.
4208	PolicyID *string `json:"policyId,omitempty"`
4209	// ProviderSpecificDetails - The provider specific details.
4210	ProviderSpecificDetails BasicEnableMigrationProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
4211}
4212
4213// UnmarshalJSON is the custom unmarshaler for EnableMigrationInputProperties struct.
4214func (emip *EnableMigrationInputProperties) UnmarshalJSON(body []byte) error {
4215	var m map[string]*json.RawMessage
4216	err := json.Unmarshal(body, &m)
4217	if err != nil {
4218		return err
4219	}
4220	for k, v := range m {
4221		switch k {
4222		case "policyId":
4223			if v != nil {
4224				var policyID string
4225				err = json.Unmarshal(*v, &policyID)
4226				if err != nil {
4227					return err
4228				}
4229				emip.PolicyID = &policyID
4230			}
4231		case "providerSpecificDetails":
4232			if v != nil {
4233				providerSpecificDetails, err := unmarshalBasicEnableMigrationProviderSpecificInput(*v)
4234				if err != nil {
4235					return err
4236				}
4237				emip.ProviderSpecificDetails = providerSpecificDetails
4238			}
4239		}
4240	}
4241
4242	return nil
4243}
4244
4245// BasicEnableMigrationProviderSpecificInput enable migration provider specific input.
4246type BasicEnableMigrationProviderSpecificInput interface {
4247	AsVMwareCbtEnableMigrationInput() (*VMwareCbtEnableMigrationInput, bool)
4248	AsEnableMigrationProviderSpecificInput() (*EnableMigrationProviderSpecificInput, bool)
4249}
4250
4251// EnableMigrationProviderSpecificInput enable migration provider specific input.
4252type EnableMigrationProviderSpecificInput struct {
4253	// InstanceType - Possible values include: 'InstanceTypeEnableMigrationProviderSpecificInput', 'InstanceTypeVMwareCbt'
4254	InstanceType InstanceTypeBasicEnableMigrationProviderSpecificInput `json:"instanceType,omitempty"`
4255}
4256
4257func unmarshalBasicEnableMigrationProviderSpecificInput(body []byte) (BasicEnableMigrationProviderSpecificInput, error) {
4258	var m map[string]interface{}
4259	err := json.Unmarshal(body, &m)
4260	if err != nil {
4261		return nil, err
4262	}
4263
4264	switch m["instanceType"] {
4265	case string(InstanceTypeVMwareCbt):
4266		var vmcemi VMwareCbtEnableMigrationInput
4267		err := json.Unmarshal(body, &vmcemi)
4268		return vmcemi, err
4269	default:
4270		var empsi EnableMigrationProviderSpecificInput
4271		err := json.Unmarshal(body, &empsi)
4272		return empsi, err
4273	}
4274}
4275func unmarshalBasicEnableMigrationProviderSpecificInputArray(body []byte) ([]BasicEnableMigrationProviderSpecificInput, error) {
4276	var rawMessages []*json.RawMessage
4277	err := json.Unmarshal(body, &rawMessages)
4278	if err != nil {
4279		return nil, err
4280	}
4281
4282	empsiArray := make([]BasicEnableMigrationProviderSpecificInput, len(rawMessages))
4283
4284	for index, rawMessage := range rawMessages {
4285		empsi, err := unmarshalBasicEnableMigrationProviderSpecificInput(*rawMessage)
4286		if err != nil {
4287			return nil, err
4288		}
4289		empsiArray[index] = empsi
4290	}
4291	return empsiArray, nil
4292}
4293
4294// MarshalJSON is the custom marshaler for EnableMigrationProviderSpecificInput.
4295func (empsi EnableMigrationProviderSpecificInput) MarshalJSON() ([]byte, error) {
4296	empsi.InstanceType = InstanceTypeEnableMigrationProviderSpecificInput
4297	objectMap := make(map[string]interface{})
4298	if empsi.InstanceType != "" {
4299		objectMap["instanceType"] = empsi.InstanceType
4300	}
4301	return json.Marshal(objectMap)
4302}
4303
4304// AsVMwareCbtEnableMigrationInput is the BasicEnableMigrationProviderSpecificInput implementation for EnableMigrationProviderSpecificInput.
4305func (empsi EnableMigrationProviderSpecificInput) AsVMwareCbtEnableMigrationInput() (*VMwareCbtEnableMigrationInput, bool) {
4306	return nil, false
4307}
4308
4309// AsEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for EnableMigrationProviderSpecificInput.
4310func (empsi EnableMigrationProviderSpecificInput) AsEnableMigrationProviderSpecificInput() (*EnableMigrationProviderSpecificInput, bool) {
4311	return &empsi, true
4312}
4313
4314// AsBasicEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for EnableMigrationProviderSpecificInput.
4315func (empsi EnableMigrationProviderSpecificInput) AsBasicEnableMigrationProviderSpecificInput() (BasicEnableMigrationProviderSpecificInput, bool) {
4316	return &empsi, true
4317}
4318
4319// EnableProtectionInput enable protection input.
4320type EnableProtectionInput struct {
4321	// Properties - Enable protection input properties.
4322	Properties *EnableProtectionInputProperties `json:"properties,omitempty"`
4323}
4324
4325// EnableProtectionInputProperties enable protection input properties.
4326type EnableProtectionInputProperties struct {
4327	// PolicyID - The Policy Id.
4328	PolicyID *string `json:"policyId,omitempty"`
4329	// ProtectableItemID - The protectable item Id.
4330	ProtectableItemID *string `json:"protectableItemId,omitempty"`
4331	// ProviderSpecificDetails - The ReplicationProviderInput. For HyperVReplicaAzure provider, it will be AzureEnableProtectionInput object. For San provider, it will be SanEnableProtectionInput object. For HyperVReplicaAzure provider, it can be null.
4332	ProviderSpecificDetails BasicEnableProtectionProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
4333}
4334
4335// UnmarshalJSON is the custom unmarshaler for EnableProtectionInputProperties struct.
4336func (epip *EnableProtectionInputProperties) UnmarshalJSON(body []byte) error {
4337	var m map[string]*json.RawMessage
4338	err := json.Unmarshal(body, &m)
4339	if err != nil {
4340		return err
4341	}
4342	for k, v := range m {
4343		switch k {
4344		case "policyId":
4345			if v != nil {
4346				var policyID string
4347				err = json.Unmarshal(*v, &policyID)
4348				if err != nil {
4349					return err
4350				}
4351				epip.PolicyID = &policyID
4352			}
4353		case "protectableItemId":
4354			if v != nil {
4355				var protectableItemID string
4356				err = json.Unmarshal(*v, &protectableItemID)
4357				if err != nil {
4358					return err
4359				}
4360				epip.ProtectableItemID = &protectableItemID
4361			}
4362		case "providerSpecificDetails":
4363			if v != nil {
4364				providerSpecificDetails, err := unmarshalBasicEnableProtectionProviderSpecificInput(*v)
4365				if err != nil {
4366					return err
4367				}
4368				epip.ProviderSpecificDetails = providerSpecificDetails
4369			}
4370		}
4371	}
4372
4373	return nil
4374}
4375
4376// BasicEnableProtectionProviderSpecificInput enable protection provider specific input.
4377type BasicEnableProtectionProviderSpecificInput interface {
4378	AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool)
4379	AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool)
4380	AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool)
4381	AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool)
4382	AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool)
4383	AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool)
4384	AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool)
4385}
4386
4387// EnableProtectionProviderSpecificInput enable protection provider specific input.
4388type EnableProtectionProviderSpecificInput struct {
4389	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
4390	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
4391}
4392
4393func unmarshalBasicEnableProtectionProviderSpecificInput(body []byte) (BasicEnableProtectionProviderSpecificInput, error) {
4394	var m map[string]interface{}
4395	err := json.Unmarshal(body, &m)
4396	if err != nil {
4397		return nil, err
4398	}
4399
4400	switch m["instanceType"] {
4401	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A):
4402		var aepi A2AEnableProtectionInput
4403		err := json.Unmarshal(body, &aepi)
4404		return aepi, err
4405	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure):
4406		var hvraepi HyperVReplicaAzureEnableProtectionInput
4407		err := json.Unmarshal(body, &hvraepi)
4408		return hvraepi, err
4409	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2):
4410		var imavepi InMageAzureV2EnableProtectionInput
4411		err := json.Unmarshal(body, &imavepi)
4412		return imavepi, err
4413	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage):
4414		var imepi InMageEnableProtectionInput
4415		err := json.Unmarshal(body, &imepi)
4416		return imepi, err
4417	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm):
4418		var imrepi InMageRcmEnableProtectionInput
4419		err := json.Unmarshal(body, &imrepi)
4420		return imrepi, err
4421	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan):
4422		var sepi SanEnableProtectionInput
4423		err := json.Unmarshal(body, &sepi)
4424		return sepi, err
4425	default:
4426		var eppsi EnableProtectionProviderSpecificInput
4427		err := json.Unmarshal(body, &eppsi)
4428		return eppsi, err
4429	}
4430}
4431func unmarshalBasicEnableProtectionProviderSpecificInputArray(body []byte) ([]BasicEnableProtectionProviderSpecificInput, error) {
4432	var rawMessages []*json.RawMessage
4433	err := json.Unmarshal(body, &rawMessages)
4434	if err != nil {
4435		return nil, err
4436	}
4437
4438	eppsiArray := make([]BasicEnableProtectionProviderSpecificInput, len(rawMessages))
4439
4440	for index, rawMessage := range rawMessages {
4441		eppsi, err := unmarshalBasicEnableProtectionProviderSpecificInput(*rawMessage)
4442		if err != nil {
4443			return nil, err
4444		}
4445		eppsiArray[index] = eppsi
4446	}
4447	return eppsiArray, nil
4448}
4449
4450// MarshalJSON is the custom marshaler for EnableProtectionProviderSpecificInput.
4451func (eppsi EnableProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
4452	eppsi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput
4453	objectMap := make(map[string]interface{})
4454	if eppsi.InstanceType != "" {
4455		objectMap["instanceType"] = eppsi.InstanceType
4456	}
4457	return json.Marshal(objectMap)
4458}
4459
4460// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4461func (eppsi EnableProtectionProviderSpecificInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
4462	return nil, false
4463}
4464
4465// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4466func (eppsi EnableProtectionProviderSpecificInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
4467	return nil, false
4468}
4469
4470// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4471func (eppsi EnableProtectionProviderSpecificInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
4472	return nil, false
4473}
4474
4475// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4476func (eppsi EnableProtectionProviderSpecificInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
4477	return nil, false
4478}
4479
4480// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4481func (eppsi EnableProtectionProviderSpecificInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
4482	return nil, false
4483}
4484
4485// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4486func (eppsi EnableProtectionProviderSpecificInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
4487	return nil, false
4488}
4489
4490// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4491func (eppsi EnableProtectionProviderSpecificInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
4492	return &eppsi, true
4493}
4494
4495// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4496func (eppsi EnableProtectionProviderSpecificInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
4497	return &eppsi, true
4498}
4499
4500// EncryptionDetails encryption details for the fabric.
4501type EncryptionDetails struct {
4502	// KekState - The key encryption key state for the Vmm.
4503	KekState *string `json:"kekState,omitempty"`
4504	// KekCertThumbprint - The key encryption key certificate thumbprint.
4505	KekCertThumbprint *string `json:"kekCertThumbprint,omitempty"`
4506	// KekCertExpiryDate - The key encryption key certificate expiry date.
4507	KekCertExpiryDate *date.Time `json:"kekCertExpiryDate,omitempty"`
4508}
4509
4510// Event implements the Event class.
4511type Event struct {
4512	autorest.Response `json:"-"`
4513	// Properties - Event related data.
4514	Properties *EventProperties `json:"properties,omitempty"`
4515	// ID - READ-ONLY; Resource Id
4516	ID *string `json:"id,omitempty"`
4517	// Name - READ-ONLY; Resource Name
4518	Name *string `json:"name,omitempty"`
4519	// Type - READ-ONLY; Resource Type
4520	Type *string `json:"type,omitempty"`
4521	// Location - Resource Location
4522	Location *string `json:"location,omitempty"`
4523}
4524
4525// MarshalJSON is the custom marshaler for Event.
4526func (e Event) MarshalJSON() ([]byte, error) {
4527	objectMap := make(map[string]interface{})
4528	if e.Properties != nil {
4529		objectMap["properties"] = e.Properties
4530	}
4531	if e.Location != nil {
4532		objectMap["location"] = e.Location
4533	}
4534	return json.Marshal(objectMap)
4535}
4536
4537// EventCollection collection of fabric details.
4538type EventCollection struct {
4539	autorest.Response `json:"-"`
4540	// Value - The list of events.
4541	Value *[]Event `json:"value,omitempty"`
4542	// NextLink - The value of next link.
4543	NextLink *string `json:"nextLink,omitempty"`
4544}
4545
4546// EventCollectionIterator provides access to a complete listing of Event values.
4547type EventCollectionIterator struct {
4548	i    int
4549	page EventCollectionPage
4550}
4551
4552// NextWithContext advances to the next value.  If there was an error making
4553// the request the iterator does not advance and the error is returned.
4554func (iter *EventCollectionIterator) NextWithContext(ctx context.Context) (err error) {
4555	if tracing.IsEnabled() {
4556		ctx = tracing.StartSpan(ctx, fqdn+"/EventCollectionIterator.NextWithContext")
4557		defer func() {
4558			sc := -1
4559			if iter.Response().Response.Response != nil {
4560				sc = iter.Response().Response.Response.StatusCode
4561			}
4562			tracing.EndSpan(ctx, sc, err)
4563		}()
4564	}
4565	iter.i++
4566	if iter.i < len(iter.page.Values()) {
4567		return nil
4568	}
4569	err = iter.page.NextWithContext(ctx)
4570	if err != nil {
4571		iter.i--
4572		return err
4573	}
4574	iter.i = 0
4575	return nil
4576}
4577
4578// Next advances to the next value.  If there was an error making
4579// the request the iterator does not advance and the error is returned.
4580// Deprecated: Use NextWithContext() instead.
4581func (iter *EventCollectionIterator) Next() error {
4582	return iter.NextWithContext(context.Background())
4583}
4584
4585// NotDone returns true if the enumeration should be started or is not yet complete.
4586func (iter EventCollectionIterator) NotDone() bool {
4587	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4588}
4589
4590// Response returns the raw server response from the last page request.
4591func (iter EventCollectionIterator) Response() EventCollection {
4592	return iter.page.Response()
4593}
4594
4595// Value returns the current value or a zero-initialized value if the
4596// iterator has advanced beyond the end of the collection.
4597func (iter EventCollectionIterator) Value() Event {
4598	if !iter.page.NotDone() {
4599		return Event{}
4600	}
4601	return iter.page.Values()[iter.i]
4602}
4603
4604// Creates a new instance of the EventCollectionIterator type.
4605func NewEventCollectionIterator(page EventCollectionPage) EventCollectionIterator {
4606	return EventCollectionIterator{page: page}
4607}
4608
4609// IsEmpty returns true if the ListResult contains no values.
4610func (ec EventCollection) IsEmpty() bool {
4611	return ec.Value == nil || len(*ec.Value) == 0
4612}
4613
4614// hasNextLink returns true if the NextLink is not empty.
4615func (ec EventCollection) hasNextLink() bool {
4616	return ec.NextLink != nil && len(*ec.NextLink) != 0
4617}
4618
4619// eventCollectionPreparer prepares a request to retrieve the next set of results.
4620// It returns nil if no more results exist.
4621func (ec EventCollection) eventCollectionPreparer(ctx context.Context) (*http.Request, error) {
4622	if !ec.hasNextLink() {
4623		return nil, nil
4624	}
4625	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4626		autorest.AsJSON(),
4627		autorest.AsGet(),
4628		autorest.WithBaseURL(to.String(ec.NextLink)))
4629}
4630
4631// EventCollectionPage contains a page of Event values.
4632type EventCollectionPage struct {
4633	fn func(context.Context, EventCollection) (EventCollection, error)
4634	ec EventCollection
4635}
4636
4637// NextWithContext advances to the next page of values.  If there was an error making
4638// the request the page does not advance and the error is returned.
4639func (page *EventCollectionPage) NextWithContext(ctx context.Context) (err error) {
4640	if tracing.IsEnabled() {
4641		ctx = tracing.StartSpan(ctx, fqdn+"/EventCollectionPage.NextWithContext")
4642		defer func() {
4643			sc := -1
4644			if page.Response().Response.Response != nil {
4645				sc = page.Response().Response.Response.StatusCode
4646			}
4647			tracing.EndSpan(ctx, sc, err)
4648		}()
4649	}
4650	for {
4651		next, err := page.fn(ctx, page.ec)
4652		if err != nil {
4653			return err
4654		}
4655		page.ec = next
4656		if !next.hasNextLink() || !next.IsEmpty() {
4657			break
4658		}
4659	}
4660	return nil
4661}
4662
4663// Next advances to the next page of values.  If there was an error making
4664// the request the page does not advance and the error is returned.
4665// Deprecated: Use NextWithContext() instead.
4666func (page *EventCollectionPage) Next() error {
4667	return page.NextWithContext(context.Background())
4668}
4669
4670// NotDone returns true if the page enumeration should be started or is not yet complete.
4671func (page EventCollectionPage) NotDone() bool {
4672	return !page.ec.IsEmpty()
4673}
4674
4675// Response returns the raw server response from the last page request.
4676func (page EventCollectionPage) Response() EventCollection {
4677	return page.ec
4678}
4679
4680// Values returns the slice of values for the current page or nil if there are no values.
4681func (page EventCollectionPage) Values() []Event {
4682	if page.ec.IsEmpty() {
4683		return nil
4684	}
4685	return *page.ec.Value
4686}
4687
4688// Creates a new instance of the EventCollectionPage type.
4689func NewEventCollectionPage(cur EventCollection, getNextPage func(context.Context, EventCollection) (EventCollection, error)) EventCollectionPage {
4690	return EventCollectionPage{
4691		fn: getNextPage,
4692		ec: cur,
4693	}
4694}
4695
4696// EventProperties the properties of a monitoring event.
4697type EventProperties struct {
4698	// EventCode - The Id of the monitoring event.
4699	EventCode *string `json:"eventCode,omitempty"`
4700	// Description - The event name.
4701	Description *string `json:"description,omitempty"`
4702	// EventType - The type of the event. for example: VM Health, Server Health, Job Failure etc.
4703	EventType *string `json:"eventType,omitempty"`
4704	// AffectedObjectFriendlyName - The friendly name of the source of the event on which it is raised (for example, VM, VMM etc).
4705	AffectedObjectFriendlyName *string `json:"affectedObjectFriendlyName,omitempty"`
4706	// Severity - The severity of the event.
4707	Severity *string `json:"severity,omitempty"`
4708	// TimeOfOccurrence - The time of occurrence of the event.
4709	TimeOfOccurrence *date.Time `json:"timeOfOccurrence,omitempty"`
4710	// FabricID - The ARM ID of the fabric.
4711	FabricID *string `json:"fabricId,omitempty"`
4712	// ProviderSpecificDetails - The provider specific settings.
4713	ProviderSpecificDetails BasicEventProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
4714	// EventSpecificDetails - The event specific settings.
4715	EventSpecificDetails BasicEventSpecificDetails `json:"eventSpecificDetails,omitempty"`
4716	// HealthErrors - The list of errors / warnings capturing details associated with the issue(s).
4717	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
4718}
4719
4720// UnmarshalJSON is the custom unmarshaler for EventProperties struct.
4721func (ep *EventProperties) UnmarshalJSON(body []byte) error {
4722	var m map[string]*json.RawMessage
4723	err := json.Unmarshal(body, &m)
4724	if err != nil {
4725		return err
4726	}
4727	for k, v := range m {
4728		switch k {
4729		case "eventCode":
4730			if v != nil {
4731				var eventCode string
4732				err = json.Unmarshal(*v, &eventCode)
4733				if err != nil {
4734					return err
4735				}
4736				ep.EventCode = &eventCode
4737			}
4738		case "description":
4739			if v != nil {
4740				var description string
4741				err = json.Unmarshal(*v, &description)
4742				if err != nil {
4743					return err
4744				}
4745				ep.Description = &description
4746			}
4747		case "eventType":
4748			if v != nil {
4749				var eventType string
4750				err = json.Unmarshal(*v, &eventType)
4751				if err != nil {
4752					return err
4753				}
4754				ep.EventType = &eventType
4755			}
4756		case "affectedObjectFriendlyName":
4757			if v != nil {
4758				var affectedObjectFriendlyName string
4759				err = json.Unmarshal(*v, &affectedObjectFriendlyName)
4760				if err != nil {
4761					return err
4762				}
4763				ep.AffectedObjectFriendlyName = &affectedObjectFriendlyName
4764			}
4765		case "severity":
4766			if v != nil {
4767				var severity string
4768				err = json.Unmarshal(*v, &severity)
4769				if err != nil {
4770					return err
4771				}
4772				ep.Severity = &severity
4773			}
4774		case "timeOfOccurrence":
4775			if v != nil {
4776				var timeOfOccurrence date.Time
4777				err = json.Unmarshal(*v, &timeOfOccurrence)
4778				if err != nil {
4779					return err
4780				}
4781				ep.TimeOfOccurrence = &timeOfOccurrence
4782			}
4783		case "fabricId":
4784			if v != nil {
4785				var fabricID string
4786				err = json.Unmarshal(*v, &fabricID)
4787				if err != nil {
4788					return err
4789				}
4790				ep.FabricID = &fabricID
4791			}
4792		case "providerSpecificDetails":
4793			if v != nil {
4794				providerSpecificDetails, err := unmarshalBasicEventProviderSpecificDetails(*v)
4795				if err != nil {
4796					return err
4797				}
4798				ep.ProviderSpecificDetails = providerSpecificDetails
4799			}
4800		case "eventSpecificDetails":
4801			if v != nil {
4802				eventSpecificDetails, err := unmarshalBasicEventSpecificDetails(*v)
4803				if err != nil {
4804					return err
4805				}
4806				ep.EventSpecificDetails = eventSpecificDetails
4807			}
4808		case "healthErrors":
4809			if v != nil {
4810				var healthErrors []HealthError
4811				err = json.Unmarshal(*v, &healthErrors)
4812				if err != nil {
4813					return err
4814				}
4815				ep.HealthErrors = &healthErrors
4816			}
4817		}
4818	}
4819
4820	return nil
4821}
4822
4823// BasicEventProviderSpecificDetails model class for provider specific details for an event.
4824type BasicEventProviderSpecificDetails interface {
4825	AsA2AEventDetails() (*A2AEventDetails, bool)
4826	AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool)
4827	AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool)
4828	AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool)
4829	AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool)
4830	AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool)
4831	AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool)
4832	AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool)
4833}
4834
4835// EventProviderSpecificDetails model class for provider specific details for an event.
4836type EventProviderSpecificDetails struct {
4837	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
4838	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
4839}
4840
4841func unmarshalBasicEventProviderSpecificDetails(body []byte) (BasicEventProviderSpecificDetails, error) {
4842	var m map[string]interface{}
4843	err := json.Unmarshal(body, &m)
4844	if err != nil {
4845		return nil, err
4846	}
4847
4848	switch m["instanceType"] {
4849	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A):
4850		var aed A2AEventDetails
4851		err := json.Unmarshal(body, &aed)
4852		return aed, err
4853	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012):
4854		var hvr2ed HyperVReplica2012EventDetails
4855		err := json.Unmarshal(body, &hvr2ed)
4856		return hvr2ed, err
4857	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2):
4858		var hvr2ed HyperVReplica2012R2EventDetails
4859		err := json.Unmarshal(body, &hvr2ed)
4860		return hvr2ed, err
4861	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure):
4862		var hvraed HyperVReplicaAzureEventDetails
4863		err := json.Unmarshal(body, &hvraed)
4864		return hvraed, err
4865	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails):
4866		var hvrbed HyperVReplicaBaseEventDetails
4867		err := json.Unmarshal(body, &hvrbed)
4868		return hvrbed, err
4869	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2):
4870		var imaved InMageAzureV2EventDetails
4871		err := json.Unmarshal(body, &imaved)
4872		return imaved, err
4873	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm):
4874		var imred InMageRcmEventDetails
4875		err := json.Unmarshal(body, &imred)
4876		return imred, err
4877	default:
4878		var epsd EventProviderSpecificDetails
4879		err := json.Unmarshal(body, &epsd)
4880		return epsd, err
4881	}
4882}
4883func unmarshalBasicEventProviderSpecificDetailsArray(body []byte) ([]BasicEventProviderSpecificDetails, error) {
4884	var rawMessages []*json.RawMessage
4885	err := json.Unmarshal(body, &rawMessages)
4886	if err != nil {
4887		return nil, err
4888	}
4889
4890	epsdArray := make([]BasicEventProviderSpecificDetails, len(rawMessages))
4891
4892	for index, rawMessage := range rawMessages {
4893		epsd, err := unmarshalBasicEventProviderSpecificDetails(*rawMessage)
4894		if err != nil {
4895			return nil, err
4896		}
4897		epsdArray[index] = epsd
4898	}
4899	return epsdArray, nil
4900}
4901
4902// MarshalJSON is the custom marshaler for EventProviderSpecificDetails.
4903func (epsd EventProviderSpecificDetails) MarshalJSON() ([]byte, error) {
4904	epsd.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails
4905	objectMap := make(map[string]interface{})
4906	if epsd.InstanceType != "" {
4907		objectMap["instanceType"] = epsd.InstanceType
4908	}
4909	return json.Marshal(objectMap)
4910}
4911
4912// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4913func (epsd EventProviderSpecificDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
4914	return nil, false
4915}
4916
4917// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4918func (epsd EventProviderSpecificDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
4919	return nil, false
4920}
4921
4922// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4923func (epsd EventProviderSpecificDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
4924	return nil, false
4925}
4926
4927// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4928func (epsd EventProviderSpecificDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
4929	return nil, false
4930}
4931
4932// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4933func (epsd EventProviderSpecificDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
4934	return nil, false
4935}
4936
4937// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4938func (epsd EventProviderSpecificDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
4939	return nil, false
4940}
4941
4942// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4943func (epsd EventProviderSpecificDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
4944	return nil, false
4945}
4946
4947// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4948func (epsd EventProviderSpecificDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
4949	return &epsd, true
4950}
4951
4952// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4953func (epsd EventProviderSpecificDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
4954	return &epsd, true
4955}
4956
4957// EventQueryParameter implements the event query parameter.
4958type EventQueryParameter struct {
4959	// EventCode - The source id of the events to be queried.
4960	EventCode *string `json:"eventCode,omitempty"`
4961	// Severity - The severity of the events to be queried.
4962	Severity *string `json:"severity,omitempty"`
4963	// EventType - The type of the events to be queried.
4964	EventType *string `json:"eventType,omitempty"`
4965	// FabricName - The affected object server id of the events to be queried.
4966	FabricName *string `json:"fabricName,omitempty"`
4967	// AffectedObjectFriendlyName - The affected object name of the events to be queried.
4968	AffectedObjectFriendlyName *string `json:"affectedObjectFriendlyName,omitempty"`
4969	// StartTime - The start time of the time range within which the events are to be queried.
4970	StartTime *date.Time `json:"startTime,omitempty"`
4971	// EndTime - The end time of the time range within which the events are to be queried.
4972	EndTime *date.Time `json:"endTime,omitempty"`
4973}
4974
4975// BasicEventSpecificDetails model class for event specific details for an event.
4976type BasicEventSpecificDetails interface {
4977	AsJobStatusEventDetails() (*JobStatusEventDetails, bool)
4978	AsEventSpecificDetails() (*EventSpecificDetails, bool)
4979}
4980
4981// EventSpecificDetails model class for event specific details for an event.
4982type EventSpecificDetails struct {
4983	// InstanceType - Possible values include: 'InstanceTypeEventSpecificDetails', 'InstanceTypeJobStatus'
4984	InstanceType InstanceTypeBasicEventSpecificDetails `json:"instanceType,omitempty"`
4985}
4986
4987func unmarshalBasicEventSpecificDetails(body []byte) (BasicEventSpecificDetails, error) {
4988	var m map[string]interface{}
4989	err := json.Unmarshal(body, &m)
4990	if err != nil {
4991		return nil, err
4992	}
4993
4994	switch m["instanceType"] {
4995	case string(InstanceTypeJobStatus):
4996		var jsed JobStatusEventDetails
4997		err := json.Unmarshal(body, &jsed)
4998		return jsed, err
4999	default:
5000		var esd EventSpecificDetails
5001		err := json.Unmarshal(body, &esd)
5002		return esd, err
5003	}
5004}
5005func unmarshalBasicEventSpecificDetailsArray(body []byte) ([]BasicEventSpecificDetails, error) {
5006	var rawMessages []*json.RawMessage
5007	err := json.Unmarshal(body, &rawMessages)
5008	if err != nil {
5009		return nil, err
5010	}
5011
5012	esdArray := make([]BasicEventSpecificDetails, len(rawMessages))
5013
5014	for index, rawMessage := range rawMessages {
5015		esd, err := unmarshalBasicEventSpecificDetails(*rawMessage)
5016		if err != nil {
5017			return nil, err
5018		}
5019		esdArray[index] = esd
5020	}
5021	return esdArray, nil
5022}
5023
5024// MarshalJSON is the custom marshaler for EventSpecificDetails.
5025func (esd EventSpecificDetails) MarshalJSON() ([]byte, error) {
5026	esd.InstanceType = InstanceTypeEventSpecificDetails
5027	objectMap := make(map[string]interface{})
5028	if esd.InstanceType != "" {
5029		objectMap["instanceType"] = esd.InstanceType
5030	}
5031	return json.Marshal(objectMap)
5032}
5033
5034// AsJobStatusEventDetails is the BasicEventSpecificDetails implementation for EventSpecificDetails.
5035func (esd EventSpecificDetails) AsJobStatusEventDetails() (*JobStatusEventDetails, bool) {
5036	return nil, false
5037}
5038
5039// AsEventSpecificDetails is the BasicEventSpecificDetails implementation for EventSpecificDetails.
5040func (esd EventSpecificDetails) AsEventSpecificDetails() (*EventSpecificDetails, bool) {
5041	return &esd, true
5042}
5043
5044// AsBasicEventSpecificDetails is the BasicEventSpecificDetails implementation for EventSpecificDetails.
5045func (esd EventSpecificDetails) AsBasicEventSpecificDetails() (BasicEventSpecificDetails, bool) {
5046	return &esd, true
5047}
5048
5049// ExistingProtectionProfile existing storage account input.
5050type ExistingProtectionProfile struct {
5051	// ProtectionProfileID - The protection profile Arm Id. Throw error, if resource does not exists.
5052	ProtectionProfileID *string `json:"protectionProfileId,omitempty"`
5053	// ResourceType - Possible values include: 'ResourceTypeProtectionProfileCustomDetails', 'ResourceTypeExisting', 'ResourceTypeNew'
5054	ResourceType ResourceType `json:"resourceType,omitempty"`
5055}
5056
5057// MarshalJSON is the custom marshaler for ExistingProtectionProfile.
5058func (epp ExistingProtectionProfile) MarshalJSON() ([]byte, error) {
5059	epp.ResourceType = ResourceTypeExisting
5060	objectMap := make(map[string]interface{})
5061	if epp.ProtectionProfileID != nil {
5062		objectMap["protectionProfileId"] = epp.ProtectionProfileID
5063	}
5064	if epp.ResourceType != "" {
5065		objectMap["resourceType"] = epp.ResourceType
5066	}
5067	return json.Marshal(objectMap)
5068}
5069
5070// AsExistingProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5071func (epp ExistingProtectionProfile) AsExistingProtectionProfile() (*ExistingProtectionProfile, bool) {
5072	return &epp, true
5073}
5074
5075// AsNewProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5076func (epp ExistingProtectionProfile) AsNewProtectionProfile() (*NewProtectionProfile, bool) {
5077	return nil, false
5078}
5079
5080// AsProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5081func (epp ExistingProtectionProfile) AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool) {
5082	return nil, false
5083}
5084
5085// AsBasicProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5086func (epp ExistingProtectionProfile) AsBasicProtectionProfileCustomDetails() (BasicProtectionProfileCustomDetails, bool) {
5087	return &epp, true
5088}
5089
5090// ExistingRecoveryAvailabilitySet existing recovery availability set input.
5091type ExistingRecoveryAvailabilitySet struct {
5092	// RecoveryAvailabilitySetID - The recovery availability set Id. Will throw error, if resource does not exist.
5093	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
5094	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeRecoveryAvailabilitySetCustomDetails', 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting'
5095	ResourceType ResourceTypeBasicRecoveryAvailabilitySetCustomDetails `json:"resourceType,omitempty"`
5096}
5097
5098// MarshalJSON is the custom marshaler for ExistingRecoveryAvailabilitySet.
5099func (eras ExistingRecoveryAvailabilitySet) MarshalJSON() ([]byte, error) {
5100	eras.ResourceType = ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting
5101	objectMap := make(map[string]interface{})
5102	if eras.RecoveryAvailabilitySetID != nil {
5103		objectMap["recoveryAvailabilitySetId"] = eras.RecoveryAvailabilitySetID
5104	}
5105	if eras.ResourceType != "" {
5106		objectMap["resourceType"] = eras.ResourceType
5107	}
5108	return json.Marshal(objectMap)
5109}
5110
5111// AsExistingRecoveryAvailabilitySet is the BasicRecoveryAvailabilitySetCustomDetails implementation for ExistingRecoveryAvailabilitySet.
5112func (eras ExistingRecoveryAvailabilitySet) AsExistingRecoveryAvailabilitySet() (*ExistingRecoveryAvailabilitySet, bool) {
5113	return &eras, true
5114}
5115
5116// AsRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for ExistingRecoveryAvailabilitySet.
5117func (eras ExistingRecoveryAvailabilitySet) AsRecoveryAvailabilitySetCustomDetails() (*RecoveryAvailabilitySetCustomDetails, bool) {
5118	return nil, false
5119}
5120
5121// AsBasicRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for ExistingRecoveryAvailabilitySet.
5122func (eras ExistingRecoveryAvailabilitySet) AsBasicRecoveryAvailabilitySetCustomDetails() (BasicRecoveryAvailabilitySetCustomDetails, bool) {
5123	return &eras, true
5124}
5125
5126// ExistingRecoveryProximityPlacementGroup existing recovery proximity placement group input.
5127type ExistingRecoveryProximityPlacementGroup struct {
5128	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id. Will throw error, if resource does not exist.
5129	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
5130	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeRecoveryProximityPlacementGroupCustomDetails', 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting'
5131	ResourceType ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetails `json:"resourceType,omitempty"`
5132}
5133
5134// MarshalJSON is the custom marshaler for ExistingRecoveryProximityPlacementGroup.
5135func (erppg ExistingRecoveryProximityPlacementGroup) MarshalJSON() ([]byte, error) {
5136	erppg.ResourceType = ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting
5137	objectMap := make(map[string]interface{})
5138	if erppg.RecoveryProximityPlacementGroupID != nil {
5139		objectMap["recoveryProximityPlacementGroupId"] = erppg.RecoveryProximityPlacementGroupID
5140	}
5141	if erppg.ResourceType != "" {
5142		objectMap["resourceType"] = erppg.ResourceType
5143	}
5144	return json.Marshal(objectMap)
5145}
5146
5147// AsExistingRecoveryProximityPlacementGroup is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for ExistingRecoveryProximityPlacementGroup.
5148func (erppg ExistingRecoveryProximityPlacementGroup) AsExistingRecoveryProximityPlacementGroup() (*ExistingRecoveryProximityPlacementGroup, bool) {
5149	return &erppg, true
5150}
5151
5152// AsRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for ExistingRecoveryProximityPlacementGroup.
5153func (erppg ExistingRecoveryProximityPlacementGroup) AsRecoveryProximityPlacementGroupCustomDetails() (*RecoveryProximityPlacementGroupCustomDetails, bool) {
5154	return nil, false
5155}
5156
5157// AsBasicRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for ExistingRecoveryProximityPlacementGroup.
5158func (erppg ExistingRecoveryProximityPlacementGroup) AsBasicRecoveryProximityPlacementGroupCustomDetails() (BasicRecoveryProximityPlacementGroupCustomDetails, bool) {
5159	return &erppg, true
5160}
5161
5162// ExistingRecoveryRecoveryResourceGroup existing recovery resource group input.
5163type ExistingRecoveryRecoveryResourceGroup struct {
5164	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
5165	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
5166	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeRecoveryResourceGroupCustomDetails', 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting'
5167	ResourceType ResourceTypeBasicRecoveryResourceGroupCustomDetails `json:"resourceType,omitempty"`
5168}
5169
5170// MarshalJSON is the custom marshaler for ExistingRecoveryRecoveryResourceGroup.
5171func (errrg ExistingRecoveryRecoveryResourceGroup) MarshalJSON() ([]byte, error) {
5172	errrg.ResourceType = ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting
5173	objectMap := make(map[string]interface{})
5174	if errrg.RecoveryResourceGroupID != nil {
5175		objectMap["recoveryResourceGroupId"] = errrg.RecoveryResourceGroupID
5176	}
5177	if errrg.ResourceType != "" {
5178		objectMap["resourceType"] = errrg.ResourceType
5179	}
5180	return json.Marshal(objectMap)
5181}
5182
5183// AsExistingRecoveryRecoveryResourceGroup is the BasicRecoveryResourceGroupCustomDetails implementation for ExistingRecoveryRecoveryResourceGroup.
5184func (errrg ExistingRecoveryRecoveryResourceGroup) AsExistingRecoveryRecoveryResourceGroup() (*ExistingRecoveryRecoveryResourceGroup, bool) {
5185	return &errrg, true
5186}
5187
5188// AsRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for ExistingRecoveryRecoveryResourceGroup.
5189func (errrg ExistingRecoveryRecoveryResourceGroup) AsRecoveryResourceGroupCustomDetails() (*RecoveryResourceGroupCustomDetails, bool) {
5190	return nil, false
5191}
5192
5193// AsBasicRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for ExistingRecoveryRecoveryResourceGroup.
5194func (errrg ExistingRecoveryRecoveryResourceGroup) AsBasicRecoveryResourceGroupCustomDetails() (BasicRecoveryResourceGroupCustomDetails, bool) {
5195	return &errrg, true
5196}
5197
5198// ExistingRecoveryVirtualNetwork existing recovery virtual network input.
5199type ExistingRecoveryVirtualNetwork struct {
5200	// RecoveryVirtualNetworkID - The recovery virtual network Id. Will throw error, if resource does not exist.
5201	RecoveryVirtualNetworkID *string `json:"recoveryVirtualNetworkId,omitempty"`
5202	// RecoverySubnetName - The recovery subnet name.
5203	RecoverySubnetName *string `json:"recoverySubnetName,omitempty"`
5204	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeRecoveryVirtualNetworkCustomDetails', 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting'
5205	ResourceType ResourceTypeBasicRecoveryVirtualNetworkCustomDetails `json:"resourceType,omitempty"`
5206}
5207
5208// MarshalJSON is the custom marshaler for ExistingRecoveryVirtualNetwork.
5209func (ervn ExistingRecoveryVirtualNetwork) MarshalJSON() ([]byte, error) {
5210	ervn.ResourceType = ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting
5211	objectMap := make(map[string]interface{})
5212	if ervn.RecoveryVirtualNetworkID != nil {
5213		objectMap["recoveryVirtualNetworkId"] = ervn.RecoveryVirtualNetworkID
5214	}
5215	if ervn.RecoverySubnetName != nil {
5216		objectMap["recoverySubnetName"] = ervn.RecoverySubnetName
5217	}
5218	if ervn.ResourceType != "" {
5219		objectMap["resourceType"] = ervn.ResourceType
5220	}
5221	return json.Marshal(objectMap)
5222}
5223
5224// AsExistingRecoveryVirtualNetwork is the BasicRecoveryVirtualNetworkCustomDetails implementation for ExistingRecoveryVirtualNetwork.
5225func (ervn ExistingRecoveryVirtualNetwork) AsExistingRecoveryVirtualNetwork() (*ExistingRecoveryVirtualNetwork, bool) {
5226	return &ervn, true
5227}
5228
5229// AsRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for ExistingRecoveryVirtualNetwork.
5230func (ervn ExistingRecoveryVirtualNetwork) AsRecoveryVirtualNetworkCustomDetails() (*RecoveryVirtualNetworkCustomDetails, bool) {
5231	return nil, false
5232}
5233
5234// AsBasicRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for ExistingRecoveryVirtualNetwork.
5235func (ervn ExistingRecoveryVirtualNetwork) AsBasicRecoveryVirtualNetworkCustomDetails() (BasicRecoveryVirtualNetworkCustomDetails, bool) {
5236	return &ervn, true
5237}
5238
5239// ExistingStorageAccount existing storage account input.
5240type ExistingStorageAccount struct {
5241	// AzureStorageAccountID - The storage account Arm Id. Throw error, if resource does not exists.
5242	AzureStorageAccountID *string `json:"azureStorageAccountId,omitempty"`
5243	// ResourceType - Possible values include: 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeStorageAccountCustomDetails', 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting'
5244	ResourceType ResourceTypeBasicStorageAccountCustomDetails `json:"resourceType,omitempty"`
5245}
5246
5247// MarshalJSON is the custom marshaler for ExistingStorageAccount.
5248func (esa ExistingStorageAccount) MarshalJSON() ([]byte, error) {
5249	esa.ResourceType = ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting
5250	objectMap := make(map[string]interface{})
5251	if esa.AzureStorageAccountID != nil {
5252		objectMap["azureStorageAccountId"] = esa.AzureStorageAccountID
5253	}
5254	if esa.ResourceType != "" {
5255		objectMap["resourceType"] = esa.ResourceType
5256	}
5257	return json.Marshal(objectMap)
5258}
5259
5260// AsExistingStorageAccount is the BasicStorageAccountCustomDetails implementation for ExistingStorageAccount.
5261func (esa ExistingStorageAccount) AsExistingStorageAccount() (*ExistingStorageAccount, bool) {
5262	return &esa, true
5263}
5264
5265// AsStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for ExistingStorageAccount.
5266func (esa ExistingStorageAccount) AsStorageAccountCustomDetails() (*StorageAccountCustomDetails, bool) {
5267	return nil, false
5268}
5269
5270// AsBasicStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for ExistingStorageAccount.
5271func (esa ExistingStorageAccount) AsBasicStorageAccountCustomDetails() (BasicStorageAccountCustomDetails, bool) {
5272	return &esa, true
5273}
5274
5275// ExportJobDetails this class represents details for export jobs workflow.
5276type ExportJobDetails struct {
5277	// BlobURI - BlobUri of the exported jobs.
5278	BlobURI *string `json:"blobUri,omitempty"`
5279	// SasToken - The sas token to access blob.
5280	SasToken *string `json:"sasToken,omitempty"`
5281	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
5282	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
5283	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
5284	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
5285}
5286
5287// MarshalJSON is the custom marshaler for ExportJobDetails.
5288func (ejd ExportJobDetails) MarshalJSON() ([]byte, error) {
5289	ejd.InstanceType = InstanceTypeExportJobDetails
5290	objectMap := make(map[string]interface{})
5291	if ejd.BlobURI != nil {
5292		objectMap["blobUri"] = ejd.BlobURI
5293	}
5294	if ejd.SasToken != nil {
5295		objectMap["sasToken"] = ejd.SasToken
5296	}
5297	if ejd.AffectedObjectDetails != nil {
5298		objectMap["affectedObjectDetails"] = ejd.AffectedObjectDetails
5299	}
5300	if ejd.InstanceType != "" {
5301		objectMap["instanceType"] = ejd.InstanceType
5302	}
5303	return json.Marshal(objectMap)
5304}
5305
5306// AsAsrJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5307func (ejd ExportJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
5308	return nil, false
5309}
5310
5311// AsExportJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5312func (ejd ExportJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
5313	return &ejd, true
5314}
5315
5316// AsFailoverJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5317func (ejd ExportJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
5318	return nil, false
5319}
5320
5321// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5322func (ejd ExportJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
5323	return nil, false
5324}
5325
5326// AsTestFailoverJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5327func (ejd ExportJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
5328	return nil, false
5329}
5330
5331// AsJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5332func (ejd ExportJobDetails) AsJobDetails() (*JobDetails, bool) {
5333	return nil, false
5334}
5335
5336// AsBasicJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5337func (ejd ExportJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
5338	return &ejd, true
5339}
5340
5341// Fabric fabric definition.
5342type Fabric struct {
5343	autorest.Response `json:"-"`
5344	// Properties - Fabric related data.
5345	Properties *FabricProperties `json:"properties,omitempty"`
5346	// ID - READ-ONLY; Resource Id
5347	ID *string `json:"id,omitempty"`
5348	// Name - READ-ONLY; Resource Name
5349	Name *string `json:"name,omitempty"`
5350	// Type - READ-ONLY; Resource Type
5351	Type *string `json:"type,omitempty"`
5352	// Location - Resource Location
5353	Location *string `json:"location,omitempty"`
5354}
5355
5356// MarshalJSON is the custom marshaler for Fabric.
5357func (f Fabric) MarshalJSON() ([]byte, error) {
5358	objectMap := make(map[string]interface{})
5359	if f.Properties != nil {
5360		objectMap["properties"] = f.Properties
5361	}
5362	if f.Location != nil {
5363		objectMap["location"] = f.Location
5364	}
5365	return json.Marshal(objectMap)
5366}
5367
5368// FabricCollection collection of fabric details.
5369type FabricCollection struct {
5370	autorest.Response `json:"-"`
5371	// Value - The fabric details.
5372	Value *[]Fabric `json:"value,omitempty"`
5373	// NextLink - The value of next link.
5374	NextLink *string `json:"nextLink,omitempty"`
5375}
5376
5377// FabricCollectionIterator provides access to a complete listing of Fabric values.
5378type FabricCollectionIterator struct {
5379	i    int
5380	page FabricCollectionPage
5381}
5382
5383// NextWithContext advances to the next value.  If there was an error making
5384// the request the iterator does not advance and the error is returned.
5385func (iter *FabricCollectionIterator) NextWithContext(ctx context.Context) (err error) {
5386	if tracing.IsEnabled() {
5387		ctx = tracing.StartSpan(ctx, fqdn+"/FabricCollectionIterator.NextWithContext")
5388		defer func() {
5389			sc := -1
5390			if iter.Response().Response.Response != nil {
5391				sc = iter.Response().Response.Response.StatusCode
5392			}
5393			tracing.EndSpan(ctx, sc, err)
5394		}()
5395	}
5396	iter.i++
5397	if iter.i < len(iter.page.Values()) {
5398		return nil
5399	}
5400	err = iter.page.NextWithContext(ctx)
5401	if err != nil {
5402		iter.i--
5403		return err
5404	}
5405	iter.i = 0
5406	return nil
5407}
5408
5409// Next advances to the next value.  If there was an error making
5410// the request the iterator does not advance and the error is returned.
5411// Deprecated: Use NextWithContext() instead.
5412func (iter *FabricCollectionIterator) Next() error {
5413	return iter.NextWithContext(context.Background())
5414}
5415
5416// NotDone returns true if the enumeration should be started or is not yet complete.
5417func (iter FabricCollectionIterator) NotDone() bool {
5418	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5419}
5420
5421// Response returns the raw server response from the last page request.
5422func (iter FabricCollectionIterator) Response() FabricCollection {
5423	return iter.page.Response()
5424}
5425
5426// Value returns the current value or a zero-initialized value if the
5427// iterator has advanced beyond the end of the collection.
5428func (iter FabricCollectionIterator) Value() Fabric {
5429	if !iter.page.NotDone() {
5430		return Fabric{}
5431	}
5432	return iter.page.Values()[iter.i]
5433}
5434
5435// Creates a new instance of the FabricCollectionIterator type.
5436func NewFabricCollectionIterator(page FabricCollectionPage) FabricCollectionIterator {
5437	return FabricCollectionIterator{page: page}
5438}
5439
5440// IsEmpty returns true if the ListResult contains no values.
5441func (fc FabricCollection) IsEmpty() bool {
5442	return fc.Value == nil || len(*fc.Value) == 0
5443}
5444
5445// hasNextLink returns true if the NextLink is not empty.
5446func (fc FabricCollection) hasNextLink() bool {
5447	return fc.NextLink != nil && len(*fc.NextLink) != 0
5448}
5449
5450// fabricCollectionPreparer prepares a request to retrieve the next set of results.
5451// It returns nil if no more results exist.
5452func (fc FabricCollection) fabricCollectionPreparer(ctx context.Context) (*http.Request, error) {
5453	if !fc.hasNextLink() {
5454		return nil, nil
5455	}
5456	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5457		autorest.AsJSON(),
5458		autorest.AsGet(),
5459		autorest.WithBaseURL(to.String(fc.NextLink)))
5460}
5461
5462// FabricCollectionPage contains a page of Fabric values.
5463type FabricCollectionPage struct {
5464	fn func(context.Context, FabricCollection) (FabricCollection, error)
5465	fc FabricCollection
5466}
5467
5468// NextWithContext advances to the next page of values.  If there was an error making
5469// the request the page does not advance and the error is returned.
5470func (page *FabricCollectionPage) NextWithContext(ctx context.Context) (err error) {
5471	if tracing.IsEnabled() {
5472		ctx = tracing.StartSpan(ctx, fqdn+"/FabricCollectionPage.NextWithContext")
5473		defer func() {
5474			sc := -1
5475			if page.Response().Response.Response != nil {
5476				sc = page.Response().Response.Response.StatusCode
5477			}
5478			tracing.EndSpan(ctx, sc, err)
5479		}()
5480	}
5481	for {
5482		next, err := page.fn(ctx, page.fc)
5483		if err != nil {
5484			return err
5485		}
5486		page.fc = next
5487		if !next.hasNextLink() || !next.IsEmpty() {
5488			break
5489		}
5490	}
5491	return nil
5492}
5493
5494// Next advances to the next page of values.  If there was an error making
5495// the request the page does not advance and the error is returned.
5496// Deprecated: Use NextWithContext() instead.
5497func (page *FabricCollectionPage) Next() error {
5498	return page.NextWithContext(context.Background())
5499}
5500
5501// NotDone returns true if the page enumeration should be started or is not yet complete.
5502func (page FabricCollectionPage) NotDone() bool {
5503	return !page.fc.IsEmpty()
5504}
5505
5506// Response returns the raw server response from the last page request.
5507func (page FabricCollectionPage) Response() FabricCollection {
5508	return page.fc
5509}
5510
5511// Values returns the slice of values for the current page or nil if there are no values.
5512func (page FabricCollectionPage) Values() []Fabric {
5513	if page.fc.IsEmpty() {
5514		return nil
5515	}
5516	return *page.fc.Value
5517}
5518
5519// Creates a new instance of the FabricCollectionPage type.
5520func NewFabricCollectionPage(cur FabricCollection, getNextPage func(context.Context, FabricCollection) (FabricCollection, error)) FabricCollectionPage {
5521	return FabricCollectionPage{
5522		fn: getNextPage,
5523		fc: cur,
5524	}
5525}
5526
5527// FabricCreationInput site details provided during the time of site creation
5528type FabricCreationInput struct {
5529	// Properties - Fabric creation input.
5530	Properties *FabricCreationInputProperties `json:"properties,omitempty"`
5531}
5532
5533// FabricCreationInputProperties properties of site details provided during the time of site creation
5534type FabricCreationInputProperties struct {
5535	// CustomDetails - Fabric provider specific creation input.
5536	CustomDetails BasicFabricSpecificCreationInput `json:"customDetails,omitempty"`
5537}
5538
5539// UnmarshalJSON is the custom unmarshaler for FabricCreationInputProperties struct.
5540func (fcip *FabricCreationInputProperties) UnmarshalJSON(body []byte) error {
5541	var m map[string]*json.RawMessage
5542	err := json.Unmarshal(body, &m)
5543	if err != nil {
5544		return err
5545	}
5546	for k, v := range m {
5547		switch k {
5548		case "customDetails":
5549			if v != nil {
5550				customDetails, err := unmarshalBasicFabricSpecificCreationInput(*v)
5551				if err != nil {
5552					return err
5553				}
5554				fcip.CustomDetails = customDetails
5555			}
5556		}
5557	}
5558
5559	return nil
5560}
5561
5562// FabricProperties fabric properties.
5563type FabricProperties struct {
5564	// FriendlyName - Friendly name of the fabric.
5565	FriendlyName *string `json:"friendlyName,omitempty"`
5566	// EncryptionDetails - Encryption details for the fabric.
5567	EncryptionDetails *EncryptionDetails `json:"encryptionDetails,omitempty"`
5568	// RolloverEncryptionDetails - Rollover encryption details for the fabric.
5569	RolloverEncryptionDetails *EncryptionDetails `json:"rolloverEncryptionDetails,omitempty"`
5570	// InternalIdentifier - Dra Registration Id.
5571	InternalIdentifier *string `json:"internalIdentifier,omitempty"`
5572	// BcdrState - BCDR state of the fabric.
5573	BcdrState *string `json:"bcdrState,omitempty"`
5574	// CustomDetails - Fabric specific settings.
5575	CustomDetails BasicFabricSpecificDetails `json:"customDetails,omitempty"`
5576	// HealthErrorDetails - Fabric health error details.
5577	HealthErrorDetails *[]HealthError `json:"healthErrorDetails,omitempty"`
5578	// Health - Health of fabric.
5579	Health *string `json:"health,omitempty"`
5580}
5581
5582// UnmarshalJSON is the custom unmarshaler for FabricProperties struct.
5583func (fp *FabricProperties) UnmarshalJSON(body []byte) error {
5584	var m map[string]*json.RawMessage
5585	err := json.Unmarshal(body, &m)
5586	if err != nil {
5587		return err
5588	}
5589	for k, v := range m {
5590		switch k {
5591		case "friendlyName":
5592			if v != nil {
5593				var friendlyName string
5594				err = json.Unmarshal(*v, &friendlyName)
5595				if err != nil {
5596					return err
5597				}
5598				fp.FriendlyName = &friendlyName
5599			}
5600		case "encryptionDetails":
5601			if v != nil {
5602				var encryptionDetails EncryptionDetails
5603				err = json.Unmarshal(*v, &encryptionDetails)
5604				if err != nil {
5605					return err
5606				}
5607				fp.EncryptionDetails = &encryptionDetails
5608			}
5609		case "rolloverEncryptionDetails":
5610			if v != nil {
5611				var rolloverEncryptionDetails EncryptionDetails
5612				err = json.Unmarshal(*v, &rolloverEncryptionDetails)
5613				if err != nil {
5614					return err
5615				}
5616				fp.RolloverEncryptionDetails = &rolloverEncryptionDetails
5617			}
5618		case "internalIdentifier":
5619			if v != nil {
5620				var internalIdentifier string
5621				err = json.Unmarshal(*v, &internalIdentifier)
5622				if err != nil {
5623					return err
5624				}
5625				fp.InternalIdentifier = &internalIdentifier
5626			}
5627		case "bcdrState":
5628			if v != nil {
5629				var bcdrState string
5630				err = json.Unmarshal(*v, &bcdrState)
5631				if err != nil {
5632					return err
5633				}
5634				fp.BcdrState = &bcdrState
5635			}
5636		case "customDetails":
5637			if v != nil {
5638				customDetails, err := unmarshalBasicFabricSpecificDetails(*v)
5639				if err != nil {
5640					return err
5641				}
5642				fp.CustomDetails = customDetails
5643			}
5644		case "healthErrorDetails":
5645			if v != nil {
5646				var healthErrorDetails []HealthError
5647				err = json.Unmarshal(*v, &healthErrorDetails)
5648				if err != nil {
5649					return err
5650				}
5651				fp.HealthErrorDetails = &healthErrorDetails
5652			}
5653		case "health":
5654			if v != nil {
5655				var health string
5656				err = json.Unmarshal(*v, &health)
5657				if err != nil {
5658					return err
5659				}
5660				fp.Health = &health
5661			}
5662		}
5663	}
5664
5665	return nil
5666}
5667
5668// FabricReplicationGroupTaskDetails this class represents the fabric replication group task details.
5669type FabricReplicationGroupTaskDetails struct {
5670	// SkippedReason - The skipped reason.
5671	SkippedReason *string `json:"skippedReason,omitempty"`
5672	// SkippedReasonString - The skipped reason string.
5673	SkippedReasonString *string `json:"skippedReasonString,omitempty"`
5674	// JobTask - The job entity.
5675	JobTask *JobEntity `json:"jobTask,omitempty"`
5676	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
5677	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
5678}
5679
5680// MarshalJSON is the custom marshaler for FabricReplicationGroupTaskDetails.
5681func (frgtd FabricReplicationGroupTaskDetails) MarshalJSON() ([]byte, error) {
5682	frgtd.InstanceType = InstanceTypeFabricReplicationGroupTaskDetails
5683	objectMap := make(map[string]interface{})
5684	if frgtd.SkippedReason != nil {
5685		objectMap["skippedReason"] = frgtd.SkippedReason
5686	}
5687	if frgtd.SkippedReasonString != nil {
5688		objectMap["skippedReasonString"] = frgtd.SkippedReasonString
5689	}
5690	if frgtd.JobTask != nil {
5691		objectMap["jobTask"] = frgtd.JobTask
5692	}
5693	if frgtd.InstanceType != "" {
5694		objectMap["instanceType"] = frgtd.InstanceType
5695	}
5696	return json.Marshal(objectMap)
5697}
5698
5699// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5700func (frgtd FabricReplicationGroupTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
5701	return nil, false
5702}
5703
5704// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5705func (frgtd FabricReplicationGroupTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
5706	return nil, false
5707}
5708
5709// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5710func (frgtd FabricReplicationGroupTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
5711	return &frgtd, true
5712}
5713
5714// AsJobTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5715func (frgtd FabricReplicationGroupTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
5716	return nil, false
5717}
5718
5719// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5720func (frgtd FabricReplicationGroupTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
5721	return nil, false
5722}
5723
5724// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5725func (frgtd FabricReplicationGroupTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
5726	return nil, false
5727}
5728
5729// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5730func (frgtd FabricReplicationGroupTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
5731	return nil, false
5732}
5733
5734// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5735func (frgtd FabricReplicationGroupTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
5736	return nil, false
5737}
5738
5739// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5740func (frgtd FabricReplicationGroupTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
5741	return nil, false
5742}
5743
5744// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5745func (frgtd FabricReplicationGroupTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
5746	return &frgtd, true
5747}
5748
5749// BasicFabricSpecificCreateNetworkMappingInput input details specific to fabrics during Network Mapping.
5750type BasicFabricSpecificCreateNetworkMappingInput interface {
5751	AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool)
5752	AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool)
5753	AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool)
5754	AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool)
5755}
5756
5757// FabricSpecificCreateNetworkMappingInput input details specific to fabrics during Network Mapping.
5758type FabricSpecificCreateNetworkMappingInput struct {
5759	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
5760	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
5761}
5762
5763func unmarshalBasicFabricSpecificCreateNetworkMappingInput(body []byte) (BasicFabricSpecificCreateNetworkMappingInput, error) {
5764	var m map[string]interface{}
5765	err := json.Unmarshal(body, &m)
5766	if err != nil {
5767		return nil, err
5768	}
5769
5770	switch m["instanceType"] {
5771	case string(InstanceTypeAzureToAzure):
5772		var atacnmi AzureToAzureCreateNetworkMappingInput
5773		err := json.Unmarshal(body, &atacnmi)
5774		return atacnmi, err
5775	case string(InstanceTypeVmmToAzure):
5776		var vtacnmi VmmToAzureCreateNetworkMappingInput
5777		err := json.Unmarshal(body, &vtacnmi)
5778		return vtacnmi, err
5779	case string(InstanceTypeVmmToVmm):
5780		var vtvcnmi VmmToVmmCreateNetworkMappingInput
5781		err := json.Unmarshal(body, &vtvcnmi)
5782		return vtvcnmi, err
5783	default:
5784		var fscnmi FabricSpecificCreateNetworkMappingInput
5785		err := json.Unmarshal(body, &fscnmi)
5786		return fscnmi, err
5787	}
5788}
5789func unmarshalBasicFabricSpecificCreateNetworkMappingInputArray(body []byte) ([]BasicFabricSpecificCreateNetworkMappingInput, error) {
5790	var rawMessages []*json.RawMessage
5791	err := json.Unmarshal(body, &rawMessages)
5792	if err != nil {
5793		return nil, err
5794	}
5795
5796	fscnmiArray := make([]BasicFabricSpecificCreateNetworkMappingInput, len(rawMessages))
5797
5798	for index, rawMessage := range rawMessages {
5799		fscnmi, err := unmarshalBasicFabricSpecificCreateNetworkMappingInput(*rawMessage)
5800		if err != nil {
5801			return nil, err
5802		}
5803		fscnmiArray[index] = fscnmi
5804	}
5805	return fscnmiArray, nil
5806}
5807
5808// MarshalJSON is the custom marshaler for FabricSpecificCreateNetworkMappingInput.
5809func (fscnmi FabricSpecificCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
5810	fscnmi.InstanceType = InstanceTypeFabricSpecificCreateNetworkMappingInput
5811	objectMap := make(map[string]interface{})
5812	if fscnmi.InstanceType != "" {
5813		objectMap["instanceType"] = fscnmi.InstanceType
5814	}
5815	return json.Marshal(objectMap)
5816}
5817
5818// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5819func (fscnmi FabricSpecificCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
5820	return nil, false
5821}
5822
5823// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5824func (fscnmi FabricSpecificCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
5825	return nil, false
5826}
5827
5828// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5829func (fscnmi FabricSpecificCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
5830	return nil, false
5831}
5832
5833// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5834func (fscnmi FabricSpecificCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
5835	return &fscnmi, true
5836}
5837
5838// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5839func (fscnmi FabricSpecificCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
5840	return &fscnmi, true
5841}
5842
5843// BasicFabricSpecificCreationInput fabric provider specific settings.
5844type BasicFabricSpecificCreationInput interface {
5845	AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool)
5846	AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool)
5847	AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool)
5848	AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool)
5849}
5850
5851// FabricSpecificCreationInput fabric provider specific settings.
5852type FabricSpecificCreationInput struct {
5853	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
5854	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
5855}
5856
5857func unmarshalBasicFabricSpecificCreationInput(body []byte) (BasicFabricSpecificCreationInput, error) {
5858	var m map[string]interface{}
5859	err := json.Unmarshal(body, &m)
5860	if err != nil {
5861		return nil, err
5862	}
5863
5864	switch m["instanceType"] {
5865	case string(InstanceTypeAzure):
5866		var afci AzureFabricCreationInput
5867		err := json.Unmarshal(body, &afci)
5868		return afci, err
5869	case string(InstanceTypeInMageRcm):
5870		var imrfci InMageRcmFabricCreationInput
5871		err := json.Unmarshal(body, &imrfci)
5872		return imrfci, err
5873	case string(InstanceTypeVMwareV2):
5874		var vmvfci VMwareV2FabricCreationInput
5875		err := json.Unmarshal(body, &vmvfci)
5876		return vmvfci, err
5877	default:
5878		var fsci FabricSpecificCreationInput
5879		err := json.Unmarshal(body, &fsci)
5880		return fsci, err
5881	}
5882}
5883func unmarshalBasicFabricSpecificCreationInputArray(body []byte) ([]BasicFabricSpecificCreationInput, error) {
5884	var rawMessages []*json.RawMessage
5885	err := json.Unmarshal(body, &rawMessages)
5886	if err != nil {
5887		return nil, err
5888	}
5889
5890	fsciArray := make([]BasicFabricSpecificCreationInput, len(rawMessages))
5891
5892	for index, rawMessage := range rawMessages {
5893		fsci, err := unmarshalBasicFabricSpecificCreationInput(*rawMessage)
5894		if err != nil {
5895			return nil, err
5896		}
5897		fsciArray[index] = fsci
5898	}
5899	return fsciArray, nil
5900}
5901
5902// MarshalJSON is the custom marshaler for FabricSpecificCreationInput.
5903func (fsci FabricSpecificCreationInput) MarshalJSON() ([]byte, error) {
5904	fsci.InstanceType = InstanceTypeFabricSpecificCreationInput
5905	objectMap := make(map[string]interface{})
5906	if fsci.InstanceType != "" {
5907		objectMap["instanceType"] = fsci.InstanceType
5908	}
5909	return json.Marshal(objectMap)
5910}
5911
5912// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5913func (fsci FabricSpecificCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
5914	return nil, false
5915}
5916
5917// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5918func (fsci FabricSpecificCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
5919	return nil, false
5920}
5921
5922// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5923func (fsci FabricSpecificCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
5924	return nil, false
5925}
5926
5927// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5928func (fsci FabricSpecificCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
5929	return &fsci, true
5930}
5931
5932// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5933func (fsci FabricSpecificCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
5934	return &fsci, true
5935}
5936
5937// BasicFabricSpecificDetails fabric specific details.
5938type BasicFabricSpecificDetails interface {
5939	AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool)
5940	AsHyperVSiteDetails() (*HyperVSiteDetails, bool)
5941	AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool)
5942	AsVmmDetails() (*VmmDetails, bool)
5943	AsVMwareDetails() (*VMwareDetails, bool)
5944	AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool)
5945	AsFabricSpecificDetails() (*FabricSpecificDetails, bool)
5946}
5947
5948// FabricSpecificDetails fabric specific details.
5949type FabricSpecificDetails struct {
5950	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
5951	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
5952}
5953
5954func unmarshalBasicFabricSpecificDetails(body []byte) (BasicFabricSpecificDetails, error) {
5955	var m map[string]interface{}
5956	err := json.Unmarshal(body, &m)
5957	if err != nil {
5958		return nil, err
5959	}
5960
5961	switch m["instanceType"] {
5962	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure):
5963		var afsd AzureFabricSpecificDetails
5964		err := json.Unmarshal(body, &afsd)
5965		return afsd, err
5966	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite):
5967		var hvsd HyperVSiteDetails
5968		err := json.Unmarshal(body, &hvsd)
5969		return hvsd, err
5970	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm):
5971		var imrfsd InMageRcmFabricSpecificDetails
5972		err := json.Unmarshal(body, &imrfsd)
5973		return imrfsd, err
5974	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM):
5975		var vd VmmDetails
5976		err := json.Unmarshal(body, &vd)
5977		return vd, err
5978	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware):
5979		var vmd VMwareDetails
5980		err := json.Unmarshal(body, &vmd)
5981		return vmd, err
5982	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2):
5983		var vmvfsd VMwareV2FabricSpecificDetails
5984		err := json.Unmarshal(body, &vmvfsd)
5985		return vmvfsd, err
5986	default:
5987		var fsd FabricSpecificDetails
5988		err := json.Unmarshal(body, &fsd)
5989		return fsd, err
5990	}
5991}
5992func unmarshalBasicFabricSpecificDetailsArray(body []byte) ([]BasicFabricSpecificDetails, error) {
5993	var rawMessages []*json.RawMessage
5994	err := json.Unmarshal(body, &rawMessages)
5995	if err != nil {
5996		return nil, err
5997	}
5998
5999	fsdArray := make([]BasicFabricSpecificDetails, len(rawMessages))
6000
6001	for index, rawMessage := range rawMessages {
6002		fsd, err := unmarshalBasicFabricSpecificDetails(*rawMessage)
6003		if err != nil {
6004			return nil, err
6005		}
6006		fsdArray[index] = fsd
6007	}
6008	return fsdArray, nil
6009}
6010
6011// MarshalJSON is the custom marshaler for FabricSpecificDetails.
6012func (fsd FabricSpecificDetails) MarshalJSON() ([]byte, error) {
6013	fsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails
6014	objectMap := make(map[string]interface{})
6015	if fsd.InstanceType != "" {
6016		objectMap["instanceType"] = fsd.InstanceType
6017	}
6018	return json.Marshal(objectMap)
6019}
6020
6021// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6022func (fsd FabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
6023	return nil, false
6024}
6025
6026// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6027func (fsd FabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
6028	return nil, false
6029}
6030
6031// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6032func (fsd FabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
6033	return nil, false
6034}
6035
6036// AsVmmDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6037func (fsd FabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
6038	return nil, false
6039}
6040
6041// AsVMwareDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6042func (fsd FabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
6043	return nil, false
6044}
6045
6046// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6047func (fsd FabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
6048	return nil, false
6049}
6050
6051// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6052func (fsd FabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
6053	return &fsd, true
6054}
6055
6056// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6057func (fsd FabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
6058	return &fsd, true
6059}
6060
6061// BasicFabricSpecificUpdateNetworkMappingInput input details specific to fabrics during Network Mapping.
6062type BasicFabricSpecificUpdateNetworkMappingInput interface {
6063	AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool)
6064	AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool)
6065	AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool)
6066	AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool)
6067}
6068
6069// FabricSpecificUpdateNetworkMappingInput input details specific to fabrics during Network Mapping.
6070type FabricSpecificUpdateNetworkMappingInput struct {
6071	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
6072	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
6073}
6074
6075func unmarshalBasicFabricSpecificUpdateNetworkMappingInput(body []byte) (BasicFabricSpecificUpdateNetworkMappingInput, error) {
6076	var m map[string]interface{}
6077	err := json.Unmarshal(body, &m)
6078	if err != nil {
6079		return nil, err
6080	}
6081
6082	switch m["instanceType"] {
6083	case string(InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure):
6084		var ataunmi AzureToAzureUpdateNetworkMappingInput
6085		err := json.Unmarshal(body, &ataunmi)
6086		return ataunmi, err
6087	case string(InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure):
6088		var vtaunmi VmmToAzureUpdateNetworkMappingInput
6089		err := json.Unmarshal(body, &vtaunmi)
6090		return vtaunmi, err
6091	case string(InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm):
6092		var vtvunmi VmmToVmmUpdateNetworkMappingInput
6093		err := json.Unmarshal(body, &vtvunmi)
6094		return vtvunmi, err
6095	default:
6096		var fsunmi FabricSpecificUpdateNetworkMappingInput
6097		err := json.Unmarshal(body, &fsunmi)
6098		return fsunmi, err
6099	}
6100}
6101func unmarshalBasicFabricSpecificUpdateNetworkMappingInputArray(body []byte) ([]BasicFabricSpecificUpdateNetworkMappingInput, error) {
6102	var rawMessages []*json.RawMessage
6103	err := json.Unmarshal(body, &rawMessages)
6104	if err != nil {
6105		return nil, err
6106	}
6107
6108	fsunmiArray := make([]BasicFabricSpecificUpdateNetworkMappingInput, len(rawMessages))
6109
6110	for index, rawMessage := range rawMessages {
6111		fsunmi, err := unmarshalBasicFabricSpecificUpdateNetworkMappingInput(*rawMessage)
6112		if err != nil {
6113			return nil, err
6114		}
6115		fsunmiArray[index] = fsunmi
6116	}
6117	return fsunmiArray, nil
6118}
6119
6120// MarshalJSON is the custom marshaler for FabricSpecificUpdateNetworkMappingInput.
6121func (fsunmi FabricSpecificUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
6122	fsunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput
6123	objectMap := make(map[string]interface{})
6124	if fsunmi.InstanceType != "" {
6125		objectMap["instanceType"] = fsunmi.InstanceType
6126	}
6127	return json.Marshal(objectMap)
6128}
6129
6130// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6131func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
6132	return nil, false
6133}
6134
6135// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6136func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
6137	return nil, false
6138}
6139
6140// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6141func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
6142	return nil, false
6143}
6144
6145// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6146func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
6147	return &fsunmi, true
6148}
6149
6150// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6151func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
6152	return &fsunmi, true
6153}
6154
6155// FailoverJobDetails this class represents the details for a failover job.
6156type FailoverJobDetails struct {
6157	// ProtectedItemDetails - The test VM details.
6158	ProtectedItemDetails *[]FailoverReplicationProtectedItemDetails `json:"protectedItemDetails,omitempty"`
6159	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
6160	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
6161	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
6162	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
6163}
6164
6165// MarshalJSON is the custom marshaler for FailoverJobDetails.
6166func (fjd FailoverJobDetails) MarshalJSON() ([]byte, error) {
6167	fjd.InstanceType = InstanceTypeFailoverJobDetails
6168	objectMap := make(map[string]interface{})
6169	if fjd.ProtectedItemDetails != nil {
6170		objectMap["protectedItemDetails"] = fjd.ProtectedItemDetails
6171	}
6172	if fjd.AffectedObjectDetails != nil {
6173		objectMap["affectedObjectDetails"] = fjd.AffectedObjectDetails
6174	}
6175	if fjd.InstanceType != "" {
6176		objectMap["instanceType"] = fjd.InstanceType
6177	}
6178	return json.Marshal(objectMap)
6179}
6180
6181// AsAsrJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6182func (fjd FailoverJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
6183	return nil, false
6184}
6185
6186// AsExportJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6187func (fjd FailoverJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
6188	return nil, false
6189}
6190
6191// AsFailoverJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6192func (fjd FailoverJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
6193	return &fjd, true
6194}
6195
6196// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6197func (fjd FailoverJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
6198	return nil, false
6199}
6200
6201// AsTestFailoverJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6202func (fjd FailoverJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
6203	return nil, false
6204}
6205
6206// AsJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6207func (fjd FailoverJobDetails) AsJobDetails() (*JobDetails, bool) {
6208	return nil, false
6209}
6210
6211// AsBasicJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6212func (fjd FailoverJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
6213	return &fjd, true
6214}
6215
6216// FailoverProcessServerRequest request to failover a process server.
6217type FailoverProcessServerRequest struct {
6218	// Properties - The properties of the PS Failover request.
6219	Properties *FailoverProcessServerRequestProperties `json:"properties,omitempty"`
6220}
6221
6222// FailoverProcessServerRequestProperties the properties of the Failover Process Server request.
6223type FailoverProcessServerRequestProperties struct {
6224	// ContainerName - The container identifier.
6225	ContainerName *string `json:"containerName,omitempty"`
6226	// SourceProcessServerID - The source process server.
6227	SourceProcessServerID *string `json:"sourceProcessServerId,omitempty"`
6228	// TargetProcessServerID - The new process server.
6229	TargetProcessServerID *string `json:"targetProcessServerId,omitempty"`
6230	// VmsToMigrate - The VMS to migrate.
6231	VmsToMigrate *[]string `json:"vmsToMigrate,omitempty"`
6232	// UpdateType - A value for failover type. It can be systemlevel/serverlevel
6233	UpdateType *string `json:"updateType,omitempty"`
6234}
6235
6236// FailoverReplicationProtectedItemDetails failover details for a replication protected item.
6237type FailoverReplicationProtectedItemDetails struct {
6238	// Name - The name.
6239	Name *string `json:"name,omitempty"`
6240	// FriendlyName - The friendly name.
6241	FriendlyName *string `json:"friendlyName,omitempty"`
6242	// TestVMName - The test Vm name.
6243	TestVMName *string `json:"testVmName,omitempty"`
6244	// TestVMFriendlyName - The test Vm friendly name.
6245	TestVMFriendlyName *string `json:"testVmFriendlyName,omitempty"`
6246	// NetworkConnectionStatus - The network connection status.
6247	NetworkConnectionStatus *string `json:"networkConnectionStatus,omitempty"`
6248	// NetworkFriendlyName - The network friendly name.
6249	NetworkFriendlyName *string `json:"networkFriendlyName,omitempty"`
6250	// Subnet - The network subnet.
6251	Subnet *string `json:"subnet,omitempty"`
6252	// RecoveryPointID - The recovery point Id.
6253	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
6254	// RecoveryPointTime - The recovery point time.
6255	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
6256}
6257
6258// BasicGroupTaskDetails this class represents the group task details when parent child relationship exists in the
6259// drill down.
6260type BasicGroupTaskDetails interface {
6261	AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool)
6262	AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool)
6263	AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool)
6264	AsGroupTaskDetails() (*GroupTaskDetails, bool)
6265}
6266
6267// GroupTaskDetails this class represents the group task details when parent child relationship exists in the
6268// drill down.
6269type GroupTaskDetails struct {
6270	// ChildTasks - The child tasks.
6271	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
6272	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
6273	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
6274}
6275
6276func unmarshalBasicGroupTaskDetails(body []byte) (BasicGroupTaskDetails, error) {
6277	var m map[string]interface{}
6278	err := json.Unmarshal(body, &m)
6279	if err != nil {
6280		return nil, err
6281	}
6282
6283	switch m["instanceType"] {
6284	case string(InstanceTypeInlineWorkflowTaskDetails):
6285		var iwtd InlineWorkflowTaskDetails
6286		err := json.Unmarshal(body, &iwtd)
6287		return iwtd, err
6288	case string(InstanceTypeRecoveryPlanGroupTaskDetails):
6289		var rpgtd RecoveryPlanGroupTaskDetails
6290		err := json.Unmarshal(body, &rpgtd)
6291		return rpgtd, err
6292	case string(InstanceTypeRecoveryPlanShutdownGroupTaskDetails):
6293		var rpsgtd RecoveryPlanShutdownGroupTaskDetails
6294		err := json.Unmarshal(body, &rpsgtd)
6295		return rpsgtd, err
6296	default:
6297		var gtd GroupTaskDetails
6298		err := json.Unmarshal(body, &gtd)
6299		return gtd, err
6300	}
6301}
6302func unmarshalBasicGroupTaskDetailsArray(body []byte) ([]BasicGroupTaskDetails, error) {
6303	var rawMessages []*json.RawMessage
6304	err := json.Unmarshal(body, &rawMessages)
6305	if err != nil {
6306		return nil, err
6307	}
6308
6309	gtdArray := make([]BasicGroupTaskDetails, len(rawMessages))
6310
6311	for index, rawMessage := range rawMessages {
6312		gtd, err := unmarshalBasicGroupTaskDetails(*rawMessage)
6313		if err != nil {
6314			return nil, err
6315		}
6316		gtdArray[index] = gtd
6317	}
6318	return gtdArray, nil
6319}
6320
6321// MarshalJSON is the custom marshaler for GroupTaskDetails.
6322func (gtd GroupTaskDetails) MarshalJSON() ([]byte, error) {
6323	gtd.InstanceType = InstanceTypeGroupTaskDetails
6324	objectMap := make(map[string]interface{})
6325	if gtd.ChildTasks != nil {
6326		objectMap["childTasks"] = gtd.ChildTasks
6327	}
6328	if gtd.InstanceType != "" {
6329		objectMap["instanceType"] = gtd.InstanceType
6330	}
6331	return json.Marshal(objectMap)
6332}
6333
6334// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6335func (gtd GroupTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
6336	return nil, false
6337}
6338
6339// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6340func (gtd GroupTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
6341	return nil, false
6342}
6343
6344// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6345func (gtd GroupTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
6346	return nil, false
6347}
6348
6349// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6350func (gtd GroupTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
6351	return &gtd, true
6352}
6353
6354// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6355func (gtd GroupTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
6356	return &gtd, true
6357}
6358
6359// HealthError health Error
6360type HealthError struct {
6361	// InnerHealthErrors - The inner health errors. HealthError having a list of HealthError as child errors is problematic. InnerHealthError is used because this will prevent an infinite loop of structures when Hydra tries to auto-generate the contract. We are exposing the related health errors as inner health errors and all API consumers can utilize this in the same fashion as Exception -&gt; InnerException.
6362	InnerHealthErrors *[]InnerHealthError `json:"innerHealthErrors,omitempty"`
6363	// ErrorSource - Source of error.
6364	ErrorSource *string `json:"errorSource,omitempty"`
6365	// ErrorType - Type of error.
6366	ErrorType *string `json:"errorType,omitempty"`
6367	// ErrorLevel - Level of error.
6368	ErrorLevel *string `json:"errorLevel,omitempty"`
6369	// ErrorCategory - Category of error.
6370	ErrorCategory *string `json:"errorCategory,omitempty"`
6371	// ErrorCode - Error code.
6372	ErrorCode *string `json:"errorCode,omitempty"`
6373	// SummaryMessage - Summary message of the entity.
6374	SummaryMessage *string `json:"summaryMessage,omitempty"`
6375	// ErrorMessage - Error message.
6376	ErrorMessage *string `json:"errorMessage,omitempty"`
6377	// PossibleCauses - Possible causes of error.
6378	PossibleCauses *string `json:"possibleCauses,omitempty"`
6379	// RecommendedAction - Recommended action to resolve error.
6380	RecommendedAction *string `json:"recommendedAction,omitempty"`
6381	// CreationTimeUtc - Error creation time (UTC)
6382	CreationTimeUtc *date.Time `json:"creationTimeUtc,omitempty"`
6383	// RecoveryProviderErrorMessage - DRA error message.
6384	RecoveryProviderErrorMessage *string `json:"recoveryProviderErrorMessage,omitempty"`
6385	// EntityID - ID of the entity.
6386	EntityID *string `json:"entityId,omitempty"`
6387	// ErrorID - The health error unique id.
6388	ErrorID *string `json:"errorId,omitempty"`
6389	// CustomerResolvability - Value indicating whether the health error is customer resolvable. Possible values include: 'Allowed', 'NotAllowed'
6390	CustomerResolvability HealthErrorCustomerResolvability `json:"customerResolvability,omitempty"`
6391}
6392
6393// HealthErrorSummary class to define the summary of the health error details.
6394type HealthErrorSummary struct {
6395	// SummaryCode - The code of the health error.
6396	SummaryCode *string `json:"summaryCode,omitempty"`
6397	// Category - The category of the health error. Possible values include: 'None', 'Replication', 'TestFailover', 'Configuration', 'FabricInfrastructure', 'VersionExpiry', 'AgentAutoUpdate'
6398	Category HealthErrorCategory `json:"category,omitempty"`
6399	// Severity - Severity of error. Possible values include: 'NONE', 'Warning', 'Error', 'Info'
6400	Severity Severity `json:"severity,omitempty"`
6401	// SummaryMessage - The summary message of the health error.
6402	SummaryMessage *string `json:"summaryMessage,omitempty"`
6403	// AffectedResourceType - The type of affected ARM resource.
6404	AffectedResourceType *string `json:"affectedResourceType,omitempty"`
6405	// AffectedResourceSubtype - The sub type of any subcomponent within the ARM resource that this might be applicable. Value remains null if not applicable.
6406	AffectedResourceSubtype *string `json:"affectedResourceSubtype,omitempty"`
6407	// AffectedResourceCorrelationIds - The list of affected resource correlation Ids. This can be used to uniquely identify the count of items affected by a specific category and severity as well as count of item affected by an specific issue.
6408	AffectedResourceCorrelationIds *[]string `json:"affectedResourceCorrelationIds,omitempty"`
6409}
6410
6411// HyperVReplica2012EventDetails model class for event details of a HyperVReplica E2E event.
6412type HyperVReplica2012EventDetails struct {
6413	// ContainerName - The container friendly name.
6414	ContainerName *string `json:"containerName,omitempty"`
6415	// FabricName - The fabric friendly name.
6416	FabricName *string `json:"fabricName,omitempty"`
6417	// RemoteContainerName - The remote container name.
6418	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
6419	// RemoteFabricName - The remote fabric name.
6420	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
6421	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
6422	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
6423}
6424
6425// MarshalJSON is the custom marshaler for HyperVReplica2012EventDetails.
6426func (hvr2ed HyperVReplica2012EventDetails) MarshalJSON() ([]byte, error) {
6427	hvr2ed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012
6428	objectMap := make(map[string]interface{})
6429	if hvr2ed.ContainerName != nil {
6430		objectMap["containerName"] = hvr2ed.ContainerName
6431	}
6432	if hvr2ed.FabricName != nil {
6433		objectMap["fabricName"] = hvr2ed.FabricName
6434	}
6435	if hvr2ed.RemoteContainerName != nil {
6436		objectMap["remoteContainerName"] = hvr2ed.RemoteContainerName
6437	}
6438	if hvr2ed.RemoteFabricName != nil {
6439		objectMap["remoteFabricName"] = hvr2ed.RemoteFabricName
6440	}
6441	if hvr2ed.InstanceType != "" {
6442		objectMap["instanceType"] = hvr2ed.InstanceType
6443	}
6444	return json.Marshal(objectMap)
6445}
6446
6447// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6448func (hvr2ed HyperVReplica2012EventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
6449	return nil, false
6450}
6451
6452// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6453func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
6454	return &hvr2ed, true
6455}
6456
6457// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6458func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
6459	return nil, false
6460}
6461
6462// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6463func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
6464	return nil, false
6465}
6466
6467// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6468func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
6469	return nil, false
6470}
6471
6472// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6473func (hvr2ed HyperVReplica2012EventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
6474	return nil, false
6475}
6476
6477// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6478func (hvr2ed HyperVReplica2012EventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
6479	return nil, false
6480}
6481
6482// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6483func (hvr2ed HyperVReplica2012EventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
6484	return nil, false
6485}
6486
6487// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6488func (hvr2ed HyperVReplica2012EventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
6489	return &hvr2ed, true
6490}
6491
6492// HyperVReplica2012R2EventDetails model class for event details of a HyperVReplica blue E2E event.
6493type HyperVReplica2012R2EventDetails struct {
6494	// ContainerName - The container friendly name.
6495	ContainerName *string `json:"containerName,omitempty"`
6496	// FabricName - The fabric friendly name.
6497	FabricName *string `json:"fabricName,omitempty"`
6498	// RemoteContainerName - The remote container name.
6499	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
6500	// RemoteFabricName - The remote fabric name.
6501	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
6502	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
6503	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
6504}
6505
6506// MarshalJSON is the custom marshaler for HyperVReplica2012R2EventDetails.
6507func (hvr2ed HyperVReplica2012R2EventDetails) MarshalJSON() ([]byte, error) {
6508	hvr2ed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2
6509	objectMap := make(map[string]interface{})
6510	if hvr2ed.ContainerName != nil {
6511		objectMap["containerName"] = hvr2ed.ContainerName
6512	}
6513	if hvr2ed.FabricName != nil {
6514		objectMap["fabricName"] = hvr2ed.FabricName
6515	}
6516	if hvr2ed.RemoteContainerName != nil {
6517		objectMap["remoteContainerName"] = hvr2ed.RemoteContainerName
6518	}
6519	if hvr2ed.RemoteFabricName != nil {
6520		objectMap["remoteFabricName"] = hvr2ed.RemoteFabricName
6521	}
6522	if hvr2ed.InstanceType != "" {
6523		objectMap["instanceType"] = hvr2ed.InstanceType
6524	}
6525	return json.Marshal(objectMap)
6526}
6527
6528// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6529func (hvr2ed HyperVReplica2012R2EventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
6530	return nil, false
6531}
6532
6533// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6534func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
6535	return nil, false
6536}
6537
6538// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6539func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
6540	return &hvr2ed, true
6541}
6542
6543// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6544func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
6545	return nil, false
6546}
6547
6548// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6549func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
6550	return nil, false
6551}
6552
6553// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6554func (hvr2ed HyperVReplica2012R2EventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
6555	return nil, false
6556}
6557
6558// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6559func (hvr2ed HyperVReplica2012R2EventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
6560	return nil, false
6561}
6562
6563// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6564func (hvr2ed HyperVReplica2012R2EventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
6565	return nil, false
6566}
6567
6568// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6569func (hvr2ed HyperVReplica2012R2EventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
6570	return &hvr2ed, true
6571}
6572
6573// HyperVReplicaAzureApplyRecoveryPointInput applyRecoveryPoint input specific to HyperVReplicaAzure
6574// provider.
6575type HyperVReplicaAzureApplyRecoveryPointInput struct {
6576	// VaultLocation - The vault location where the recovery Vm resides.
6577	VaultLocation *string `json:"vaultLocation,omitempty"`
6578	// PrimaryKekCertificatePfx - The primary kek certificate pfx.
6579	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
6580	// SecondaryKekCertificatePfx - The secondary kek certificate pfx.
6581	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
6582	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
6583	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
6584}
6585
6586// MarshalJSON is the custom marshaler for HyperVReplicaAzureApplyRecoveryPointInput.
6587func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
6588	hvraarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure
6589	objectMap := make(map[string]interface{})
6590	if hvraarpi.VaultLocation != nil {
6591		objectMap["vaultLocation"] = hvraarpi.VaultLocation
6592	}
6593	if hvraarpi.PrimaryKekCertificatePfx != nil {
6594		objectMap["primaryKekCertificatePfx"] = hvraarpi.PrimaryKekCertificatePfx
6595	}
6596	if hvraarpi.SecondaryKekCertificatePfx != nil {
6597		objectMap["secondaryKekCertificatePfx"] = hvraarpi.SecondaryKekCertificatePfx
6598	}
6599	if hvraarpi.InstanceType != "" {
6600		objectMap["instanceType"] = hvraarpi.InstanceType
6601	}
6602	return json.Marshal(objectMap)
6603}
6604
6605// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6606func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
6607	return nil, false
6608}
6609
6610// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6611func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
6612	return &hvraarpi, true
6613}
6614
6615// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6616func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
6617	return nil, false
6618}
6619
6620// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6621func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
6622	return nil, false
6623}
6624
6625// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6626func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
6627	return nil, false
6628}
6629
6630// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6631func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
6632	return &hvraarpi, true
6633}
6634
6635// HyperVReplicaAzureEnableProtectionInput azure specific enable protection input.
6636type HyperVReplicaAzureEnableProtectionInput struct {
6637	// HvHostVMID - The Hyper-V host Vm Id.
6638	HvHostVMID *string `json:"hvHostVmId,omitempty"`
6639	// VMName - The Vm Name.
6640	VMName *string `json:"vmName,omitempty"`
6641	// OsType - The OS type associated with vm.
6642	OsType *string `json:"osType,omitempty"`
6643	// VhdID - The OS disk VHD id associated with vm.
6644	VhdID *string `json:"vhdId,omitempty"`
6645	// TargetStorageAccountID - The storage account name.
6646	TargetStorageAccountID *string `json:"targetStorageAccountId,omitempty"`
6647	// TargetAzureNetworkID - The selected target Azure network Id.
6648	TargetAzureNetworkID *string `json:"targetAzureNetworkId,omitempty"`
6649	// TargetAzureSubnetID - The selected target Azure subnet Id.
6650	TargetAzureSubnetID *string `json:"targetAzureSubnetId,omitempty"`
6651	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
6652	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
6653	// TargetAzureVMName - The target azure Vm Name.
6654	TargetAzureVMName *string `json:"targetAzureVmName,omitempty"`
6655	// LogStorageAccountID - The storage account to be used for logging during replication.
6656	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
6657	// DisksToInclude - The list of VHD IDs of disks to be protected.
6658	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
6659	// TargetAzureV1ResourceGroupID - The Id of the target resource group (for classic deployment) in which the failover VM is to be created.
6660	TargetAzureV1ResourceGroupID *string `json:"targetAzureV1ResourceGroupId,omitempty"`
6661	// TargetAzureV2ResourceGroupID - The Id of the target resource group (for resource manager deployment) in which the failover VM is to be created.
6662	TargetAzureV2ResourceGroupID *string `json:"targetAzureV2ResourceGroupId,omitempty"`
6663	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
6664	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
6665	// TargetAvailabilityZone - The target availability zone.
6666	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
6667	// TargetProximityPlacementGroupID - The proximity placement group ARM Id.
6668	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
6669	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
6670	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
6671}
6672
6673// MarshalJSON is the custom marshaler for HyperVReplicaAzureEnableProtectionInput.
6674func (hvraepi HyperVReplicaAzureEnableProtectionInput) MarshalJSON() ([]byte, error) {
6675	hvraepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure
6676	objectMap := make(map[string]interface{})
6677	if hvraepi.HvHostVMID != nil {
6678		objectMap["hvHostVmId"] = hvraepi.HvHostVMID
6679	}
6680	if hvraepi.VMName != nil {
6681		objectMap["vmName"] = hvraepi.VMName
6682	}
6683	if hvraepi.OsType != nil {
6684		objectMap["osType"] = hvraepi.OsType
6685	}
6686	if hvraepi.VhdID != nil {
6687		objectMap["vhdId"] = hvraepi.VhdID
6688	}
6689	if hvraepi.TargetStorageAccountID != nil {
6690		objectMap["targetStorageAccountId"] = hvraepi.TargetStorageAccountID
6691	}
6692	if hvraepi.TargetAzureNetworkID != nil {
6693		objectMap["targetAzureNetworkId"] = hvraepi.TargetAzureNetworkID
6694	}
6695	if hvraepi.TargetAzureSubnetID != nil {
6696		objectMap["targetAzureSubnetId"] = hvraepi.TargetAzureSubnetID
6697	}
6698	if hvraepi.EnableRdpOnTargetOption != nil {
6699		objectMap["enableRdpOnTargetOption"] = hvraepi.EnableRdpOnTargetOption
6700	}
6701	if hvraepi.TargetAzureVMName != nil {
6702		objectMap["targetAzureVmName"] = hvraepi.TargetAzureVMName
6703	}
6704	if hvraepi.LogStorageAccountID != nil {
6705		objectMap["logStorageAccountId"] = hvraepi.LogStorageAccountID
6706	}
6707	if hvraepi.DisksToInclude != nil {
6708		objectMap["disksToInclude"] = hvraepi.DisksToInclude
6709	}
6710	if hvraepi.TargetAzureV1ResourceGroupID != nil {
6711		objectMap["targetAzureV1ResourceGroupId"] = hvraepi.TargetAzureV1ResourceGroupID
6712	}
6713	if hvraepi.TargetAzureV2ResourceGroupID != nil {
6714		objectMap["targetAzureV2ResourceGroupId"] = hvraepi.TargetAzureV2ResourceGroupID
6715	}
6716	if hvraepi.UseManagedDisks != nil {
6717		objectMap["useManagedDisks"] = hvraepi.UseManagedDisks
6718	}
6719	if hvraepi.TargetAvailabilityZone != nil {
6720		objectMap["targetAvailabilityZone"] = hvraepi.TargetAvailabilityZone
6721	}
6722	if hvraepi.TargetProximityPlacementGroupID != nil {
6723		objectMap["targetProximityPlacementGroupId"] = hvraepi.TargetProximityPlacementGroupID
6724	}
6725	if hvraepi.InstanceType != "" {
6726		objectMap["instanceType"] = hvraepi.InstanceType
6727	}
6728	return json.Marshal(objectMap)
6729}
6730
6731// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6732func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
6733	return nil, false
6734}
6735
6736// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6737func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
6738	return &hvraepi, true
6739}
6740
6741// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6742func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
6743	return nil, false
6744}
6745
6746// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6747func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
6748	return nil, false
6749}
6750
6751// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6752func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
6753	return nil, false
6754}
6755
6756// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6757func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
6758	return nil, false
6759}
6760
6761// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6762func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
6763	return nil, false
6764}
6765
6766// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6767func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
6768	return &hvraepi, true
6769}
6770
6771// HyperVReplicaAzureEventDetails model class for event details of a HyperVReplica E2A event.
6772type HyperVReplicaAzureEventDetails struct {
6773	// ContainerName - The container friendly name.
6774	ContainerName *string `json:"containerName,omitempty"`
6775	// FabricName - The fabric friendly name.
6776	FabricName *string `json:"fabricName,omitempty"`
6777	// RemoteContainerName - The remote container name.
6778	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
6779	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
6780	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
6781}
6782
6783// MarshalJSON is the custom marshaler for HyperVReplicaAzureEventDetails.
6784func (hvraed HyperVReplicaAzureEventDetails) MarshalJSON() ([]byte, error) {
6785	hvraed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure
6786	objectMap := make(map[string]interface{})
6787	if hvraed.ContainerName != nil {
6788		objectMap["containerName"] = hvraed.ContainerName
6789	}
6790	if hvraed.FabricName != nil {
6791		objectMap["fabricName"] = hvraed.FabricName
6792	}
6793	if hvraed.RemoteContainerName != nil {
6794		objectMap["remoteContainerName"] = hvraed.RemoteContainerName
6795	}
6796	if hvraed.InstanceType != "" {
6797		objectMap["instanceType"] = hvraed.InstanceType
6798	}
6799	return json.Marshal(objectMap)
6800}
6801
6802// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6803func (hvraed HyperVReplicaAzureEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
6804	return nil, false
6805}
6806
6807// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6808func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
6809	return nil, false
6810}
6811
6812// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6813func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
6814	return nil, false
6815}
6816
6817// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6818func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
6819	return &hvraed, true
6820}
6821
6822// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6823func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
6824	return nil, false
6825}
6826
6827// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6828func (hvraed HyperVReplicaAzureEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
6829	return nil, false
6830}
6831
6832// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6833func (hvraed HyperVReplicaAzureEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
6834	return nil, false
6835}
6836
6837// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6838func (hvraed HyperVReplicaAzureEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
6839	return nil, false
6840}
6841
6842// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6843func (hvraed HyperVReplicaAzureEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
6844	return &hvraed, true
6845}
6846
6847// HyperVReplicaAzureFailbackProviderInput hvrA provider specific input for failback.
6848type HyperVReplicaAzureFailbackProviderInput struct {
6849	// DataSyncOption - Data sync option.
6850	DataSyncOption *string `json:"dataSyncOption,omitempty"`
6851	// RecoveryVMCreationOption - ALR options to create alternate recovery.
6852	RecoveryVMCreationOption *string `json:"recoveryVmCreationOption,omitempty"`
6853	// ProviderIDForAlternateRecovery - Provider ID for alternate location
6854	ProviderIDForAlternateRecovery *string `json:"providerIdForAlternateRecovery,omitempty"`
6855	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
6856	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
6857}
6858
6859// MarshalJSON is the custom marshaler for HyperVReplicaAzureFailbackProviderInput.
6860func (hvrafpi HyperVReplicaAzureFailbackProviderInput) MarshalJSON() ([]byte, error) {
6861	hvrafpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback
6862	objectMap := make(map[string]interface{})
6863	if hvrafpi.DataSyncOption != nil {
6864		objectMap["dataSyncOption"] = hvrafpi.DataSyncOption
6865	}
6866	if hvrafpi.RecoveryVMCreationOption != nil {
6867		objectMap["recoveryVmCreationOption"] = hvrafpi.RecoveryVMCreationOption
6868	}
6869	if hvrafpi.ProviderIDForAlternateRecovery != nil {
6870		objectMap["providerIdForAlternateRecovery"] = hvrafpi.ProviderIDForAlternateRecovery
6871	}
6872	if hvrafpi.InstanceType != "" {
6873		objectMap["instanceType"] = hvrafpi.InstanceType
6874	}
6875	return json.Marshal(objectMap)
6876}
6877
6878// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6879func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
6880	return nil, false
6881}
6882
6883// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6884func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
6885	return &hvrafpi, true
6886}
6887
6888// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6889func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
6890	return nil, false
6891}
6892
6893// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6894func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
6895	return nil, false
6896}
6897
6898// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6899func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
6900	return nil, false
6901}
6902
6903// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6904func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
6905	return nil, false
6906}
6907
6908// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6909func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
6910	return &hvrafpi, true
6911}
6912
6913// HyperVReplicaAzureFailoverProviderInput hvrA provider specific input for failover.
6914type HyperVReplicaAzureFailoverProviderInput struct {
6915	// VaultLocation - Location of the vault.
6916	VaultLocation *string `json:"vaultLocation,omitempty"`
6917	// PrimaryKekCertificatePfx - Primary kek certificate pfx.
6918	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
6919	// SecondaryKekCertificatePfx - Secondary kek certificate pfx.
6920	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
6921	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
6922	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
6923	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
6924	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
6925}
6926
6927// MarshalJSON is the custom marshaler for HyperVReplicaAzureFailoverProviderInput.
6928func (hvrafpi HyperVReplicaAzureFailoverProviderInput) MarshalJSON() ([]byte, error) {
6929	hvrafpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure
6930	objectMap := make(map[string]interface{})
6931	if hvrafpi.VaultLocation != nil {
6932		objectMap["vaultLocation"] = hvrafpi.VaultLocation
6933	}
6934	if hvrafpi.PrimaryKekCertificatePfx != nil {
6935		objectMap["primaryKekCertificatePfx"] = hvrafpi.PrimaryKekCertificatePfx
6936	}
6937	if hvrafpi.SecondaryKekCertificatePfx != nil {
6938		objectMap["secondaryKekCertificatePfx"] = hvrafpi.SecondaryKekCertificatePfx
6939	}
6940	if hvrafpi.RecoveryPointID != nil {
6941		objectMap["recoveryPointId"] = hvrafpi.RecoveryPointID
6942	}
6943	if hvrafpi.InstanceType != "" {
6944		objectMap["instanceType"] = hvrafpi.InstanceType
6945	}
6946	return json.Marshal(objectMap)
6947}
6948
6949// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6950func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
6951	return nil, false
6952}
6953
6954// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6955func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
6956	return nil, false
6957}
6958
6959// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6960func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
6961	return &hvrafpi, true
6962}
6963
6964// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6965func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
6966	return nil, false
6967}
6968
6969// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6970func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
6971	return nil, false
6972}
6973
6974// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6975func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
6976	return nil, false
6977}
6978
6979// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6980func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
6981	return &hvrafpi, true
6982}
6983
6984// HyperVReplicaAzurePolicyDetails hyper-V Replica Azure specific protection profile details.
6985type HyperVReplicaAzurePolicyDetails struct {
6986	// RecoveryPointHistoryDurationInHours - The duration (in hours) to which point the recovery history needs to be maintained.
6987	RecoveryPointHistoryDurationInHours *int32 `json:"recoveryPointHistoryDurationInHours,omitempty"`
6988	// ApplicationConsistentSnapshotFrequencyInHours - The interval (in hours) at which Hyper-V Replica should create an application consistent snapshot within the VM.
6989	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
6990	// ReplicationInterval - The replication interval.
6991	ReplicationInterval *int32 `json:"replicationInterval,omitempty"`
6992	// OnlineReplicationStartTime - The scheduled start time for the initial replication. If this parameter is Null, the initial replication starts immediately.
6993	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
6994	// Encryption - A value indicating whether encryption is enabled for virtual machines in this cloud.
6995	Encryption *string `json:"encryption,omitempty"`
6996	// ActiveStorageAccountID - The active storage account Id.
6997	ActiveStorageAccountID *string `json:"activeStorageAccountId,omitempty"`
6998	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
6999	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
7000}
7001
7002// MarshalJSON is the custom marshaler for HyperVReplicaAzurePolicyDetails.
7003func (hvrapd HyperVReplicaAzurePolicyDetails) MarshalJSON() ([]byte, error) {
7004	hvrapd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure
7005	objectMap := make(map[string]interface{})
7006	if hvrapd.RecoveryPointHistoryDurationInHours != nil {
7007		objectMap["recoveryPointHistoryDurationInHours"] = hvrapd.RecoveryPointHistoryDurationInHours
7008	}
7009	if hvrapd.ApplicationConsistentSnapshotFrequencyInHours != nil {
7010		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrapd.ApplicationConsistentSnapshotFrequencyInHours
7011	}
7012	if hvrapd.ReplicationInterval != nil {
7013		objectMap["replicationInterval"] = hvrapd.ReplicationInterval
7014	}
7015	if hvrapd.OnlineReplicationStartTime != nil {
7016		objectMap["onlineReplicationStartTime"] = hvrapd.OnlineReplicationStartTime
7017	}
7018	if hvrapd.Encryption != nil {
7019		objectMap["encryption"] = hvrapd.Encryption
7020	}
7021	if hvrapd.ActiveStorageAccountID != nil {
7022		objectMap["activeStorageAccountId"] = hvrapd.ActiveStorageAccountID
7023	}
7024	if hvrapd.InstanceType != "" {
7025		objectMap["instanceType"] = hvrapd.InstanceType
7026	}
7027	return json.Marshal(objectMap)
7028}
7029
7030// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7031func (hvrapd HyperVReplicaAzurePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
7032	return nil, false
7033}
7034
7035// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7036func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
7037	return &hvrapd, true
7038}
7039
7040// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7041func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
7042	return nil, false
7043}
7044
7045// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7046func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
7047	return nil, false
7048}
7049
7050// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7051func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
7052	return nil, false
7053}
7054
7055// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7056func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
7057	return nil, false
7058}
7059
7060// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7061func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
7062	return nil, false
7063}
7064
7065// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7066func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
7067	return nil, false
7068}
7069
7070// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7071func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
7072	return nil, false
7073}
7074
7075// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7076func (hvrapd HyperVReplicaAzurePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
7077	return nil, false
7078}
7079
7080// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7081func (hvrapd HyperVReplicaAzurePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
7082	return nil, false
7083}
7084
7085// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7086func (hvrapd HyperVReplicaAzurePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
7087	return nil, false
7088}
7089
7090// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7091func (hvrapd HyperVReplicaAzurePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
7092	return &hvrapd, true
7093}
7094
7095// HyperVReplicaAzurePolicyInput hyper-V Replica Azure specific input for creating a protection profile.
7096type HyperVReplicaAzurePolicyInput struct {
7097	// RecoveryPointHistoryDuration - The duration (in hours) to which point the recovery history needs to be maintained.
7098	RecoveryPointHistoryDuration *int32 `json:"recoveryPointHistoryDuration,omitempty"`
7099	// ApplicationConsistentSnapshotFrequencyInHours - The interval (in hours) at which Hyper-V Replica should create an application consistent snapshot within the VM.
7100	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
7101	// ReplicationInterval - The replication interval.
7102	ReplicationInterval *int32 `json:"replicationInterval,omitempty"`
7103	// OnlineReplicationStartTime - The scheduled start time for the initial replication. If this parameter is Null, the initial replication starts immediately.
7104	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
7105	// StorageAccounts - The list of storage accounts to which the VMs in the primary cloud can replicate to.
7106	StorageAccounts *[]string `json:"storageAccounts,omitempty"`
7107	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
7108	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
7109}
7110
7111// MarshalJSON is the custom marshaler for HyperVReplicaAzurePolicyInput.
7112func (hvrapi HyperVReplicaAzurePolicyInput) MarshalJSON() ([]byte, error) {
7113	hvrapi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure
7114	objectMap := make(map[string]interface{})
7115	if hvrapi.RecoveryPointHistoryDuration != nil {
7116		objectMap["recoveryPointHistoryDuration"] = hvrapi.RecoveryPointHistoryDuration
7117	}
7118	if hvrapi.ApplicationConsistentSnapshotFrequencyInHours != nil {
7119		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrapi.ApplicationConsistentSnapshotFrequencyInHours
7120	}
7121	if hvrapi.ReplicationInterval != nil {
7122		objectMap["replicationInterval"] = hvrapi.ReplicationInterval
7123	}
7124	if hvrapi.OnlineReplicationStartTime != nil {
7125		objectMap["onlineReplicationStartTime"] = hvrapi.OnlineReplicationStartTime
7126	}
7127	if hvrapi.StorageAccounts != nil {
7128		objectMap["storageAccounts"] = hvrapi.StorageAccounts
7129	}
7130	if hvrapi.InstanceType != "" {
7131		objectMap["instanceType"] = hvrapi.InstanceType
7132	}
7133	return json.Marshal(objectMap)
7134}
7135
7136// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7137func (hvrapi HyperVReplicaAzurePolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
7138	return nil, false
7139}
7140
7141// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7142func (hvrapi HyperVReplicaAzurePolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
7143	return &hvrapi, true
7144}
7145
7146// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7147func (hvrapi HyperVReplicaAzurePolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
7148	return nil, false
7149}
7150
7151// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7152func (hvrapi HyperVReplicaAzurePolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
7153	return nil, false
7154}
7155
7156// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7157func (hvrapi HyperVReplicaAzurePolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
7158	return nil, false
7159}
7160
7161// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7162func (hvrapi HyperVReplicaAzurePolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
7163	return nil, false
7164}
7165
7166// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7167func (hvrapi HyperVReplicaAzurePolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
7168	return nil, false
7169}
7170
7171// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7172func (hvrapi HyperVReplicaAzurePolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
7173	return nil, false
7174}
7175
7176// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7177func (hvrapi HyperVReplicaAzurePolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
7178	return nil, false
7179}
7180
7181// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7182func (hvrapi HyperVReplicaAzurePolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
7183	return &hvrapi, true
7184}
7185
7186// HyperVReplicaAzureReplicationDetails hyper V Replica Azure provider specific settings.
7187type HyperVReplicaAzureReplicationDetails struct {
7188	// AzureVMDiskDetails - Azure VM Disk details.
7189	AzureVMDiskDetails *[]AzureVMDiskDetails `json:"azureVmDiskDetails,omitempty"`
7190	// RecoveryAzureVMName - Recovery Azure given name.
7191	RecoveryAzureVMName *string `json:"recoveryAzureVmName,omitempty"`
7192	// RecoveryAzureVMSize - The Recovery Azure VM size.
7193	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
7194	// RecoveryAzureStorageAccount - The recovery Azure storage account.
7195	RecoveryAzureStorageAccount *string `json:"recoveryAzureStorageAccount,omitempty"`
7196	// RecoveryAzureLogStorageAccountID - The ARM id of the log storage account used for replication. This will be set to null if no log storage account was provided during enable protection.
7197	RecoveryAzureLogStorageAccountID *string `json:"recoveryAzureLogStorageAccountId,omitempty"`
7198	// LastReplicatedTime - The Last replication time.
7199	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
7200	// RpoInSeconds - Last RPO value.
7201	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
7202	// LastRpoCalculatedTime - The last RPO calculated time.
7203	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
7204	// VMID - The virtual machine Id.
7205	VMID *string `json:"vmId,omitempty"`
7206	// VMProtectionState - The protection state for the vm.
7207	VMProtectionState *string `json:"vmProtectionState,omitempty"`
7208	// VMProtectionStateDescription - The protection state description for the vm.
7209	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
7210	// InitialReplicationDetails - Initial replication details.
7211	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
7212	// VMNics - The PE Network details.
7213	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
7214	// SelectedRecoveryAzureNetworkID - The selected recovery azure network Id.
7215	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
7216	// SelectedSourceNicID - The selected source nic Id which will be used as the primary nic during failover.
7217	SelectedSourceNicID *string `json:"selectedSourceNicId,omitempty"`
7218	// Encryption - The encryption info.
7219	Encryption *string `json:"encryption,omitempty"`
7220	// OSDetails - The operating system info.
7221	OSDetails *OSDetails `json:"oSDetails,omitempty"`
7222	// SourceVMRAMSizeInMB - The RAM size of the VM on the primary side.
7223	SourceVMRAMSizeInMB *int32 `json:"sourceVmRamSizeInMB,omitempty"`
7224	// SourceVMCPUCount - The CPU count of the VM on the primary side.
7225	SourceVMCPUCount *int32 `json:"sourceVmCpuCount,omitempty"`
7226	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
7227	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
7228	// RecoveryAzureResourceGroupID - The target resource group Id.
7229	RecoveryAzureResourceGroupID *string `json:"recoveryAzureResourceGroupId,omitempty"`
7230	// RecoveryAvailabilitySetID - The recovery availability set Id.
7231	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
7232	// TargetAvailabilityZone - The target availability zone.
7233	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
7234	// TargetProximityPlacementGroupID - The target proximity placement group Id.
7235	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
7236	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
7237	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
7238	// LicenseType - License Type of the VM to be used.
7239	LicenseType *string `json:"licenseType,omitempty"`
7240	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
7241	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
7242}
7243
7244// MarshalJSON is the custom marshaler for HyperVReplicaAzureReplicationDetails.
7245func (hvrard HyperVReplicaAzureReplicationDetails) MarshalJSON() ([]byte, error) {
7246	hvrard.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure
7247	objectMap := make(map[string]interface{})
7248	if hvrard.AzureVMDiskDetails != nil {
7249		objectMap["azureVmDiskDetails"] = hvrard.AzureVMDiskDetails
7250	}
7251	if hvrard.RecoveryAzureVMName != nil {
7252		objectMap["recoveryAzureVmName"] = hvrard.RecoveryAzureVMName
7253	}
7254	if hvrard.RecoveryAzureVMSize != nil {
7255		objectMap["recoveryAzureVMSize"] = hvrard.RecoveryAzureVMSize
7256	}
7257	if hvrard.RecoveryAzureStorageAccount != nil {
7258		objectMap["recoveryAzureStorageAccount"] = hvrard.RecoveryAzureStorageAccount
7259	}
7260	if hvrard.RecoveryAzureLogStorageAccountID != nil {
7261		objectMap["recoveryAzureLogStorageAccountId"] = hvrard.RecoveryAzureLogStorageAccountID
7262	}
7263	if hvrard.LastReplicatedTime != nil {
7264		objectMap["lastReplicatedTime"] = hvrard.LastReplicatedTime
7265	}
7266	if hvrard.RpoInSeconds != nil {
7267		objectMap["rpoInSeconds"] = hvrard.RpoInSeconds
7268	}
7269	if hvrard.LastRpoCalculatedTime != nil {
7270		objectMap["lastRpoCalculatedTime"] = hvrard.LastRpoCalculatedTime
7271	}
7272	if hvrard.VMID != nil {
7273		objectMap["vmId"] = hvrard.VMID
7274	}
7275	if hvrard.VMProtectionState != nil {
7276		objectMap["vmProtectionState"] = hvrard.VMProtectionState
7277	}
7278	if hvrard.VMProtectionStateDescription != nil {
7279		objectMap["vmProtectionStateDescription"] = hvrard.VMProtectionStateDescription
7280	}
7281	if hvrard.InitialReplicationDetails != nil {
7282		objectMap["initialReplicationDetails"] = hvrard.InitialReplicationDetails
7283	}
7284	if hvrard.VMNics != nil {
7285		objectMap["vmNics"] = hvrard.VMNics
7286	}
7287	if hvrard.SelectedRecoveryAzureNetworkID != nil {
7288		objectMap["selectedRecoveryAzureNetworkId"] = hvrard.SelectedRecoveryAzureNetworkID
7289	}
7290	if hvrard.SelectedSourceNicID != nil {
7291		objectMap["selectedSourceNicId"] = hvrard.SelectedSourceNicID
7292	}
7293	if hvrard.Encryption != nil {
7294		objectMap["encryption"] = hvrard.Encryption
7295	}
7296	if hvrard.OSDetails != nil {
7297		objectMap["oSDetails"] = hvrard.OSDetails
7298	}
7299	if hvrard.SourceVMRAMSizeInMB != nil {
7300		objectMap["sourceVmRamSizeInMB"] = hvrard.SourceVMRAMSizeInMB
7301	}
7302	if hvrard.SourceVMCPUCount != nil {
7303		objectMap["sourceVmCpuCount"] = hvrard.SourceVMCPUCount
7304	}
7305	if hvrard.EnableRdpOnTargetOption != nil {
7306		objectMap["enableRdpOnTargetOption"] = hvrard.EnableRdpOnTargetOption
7307	}
7308	if hvrard.RecoveryAzureResourceGroupID != nil {
7309		objectMap["recoveryAzureResourceGroupId"] = hvrard.RecoveryAzureResourceGroupID
7310	}
7311	if hvrard.RecoveryAvailabilitySetID != nil {
7312		objectMap["recoveryAvailabilitySetId"] = hvrard.RecoveryAvailabilitySetID
7313	}
7314	if hvrard.TargetAvailabilityZone != nil {
7315		objectMap["targetAvailabilityZone"] = hvrard.TargetAvailabilityZone
7316	}
7317	if hvrard.TargetProximityPlacementGroupID != nil {
7318		objectMap["targetProximityPlacementGroupId"] = hvrard.TargetProximityPlacementGroupID
7319	}
7320	if hvrard.UseManagedDisks != nil {
7321		objectMap["useManagedDisks"] = hvrard.UseManagedDisks
7322	}
7323	if hvrard.LicenseType != nil {
7324		objectMap["licenseType"] = hvrard.LicenseType
7325	}
7326	if hvrard.InstanceType != "" {
7327		objectMap["instanceType"] = hvrard.InstanceType
7328	}
7329	return json.Marshal(objectMap)
7330}
7331
7332// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7333func (hvrard HyperVReplicaAzureReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
7334	return nil, false
7335}
7336
7337// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7338func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
7339	return &hvrard, true
7340}
7341
7342// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7343func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
7344	return nil, false
7345}
7346
7347// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7348func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
7349	return nil, false
7350}
7351
7352// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7353func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
7354	return nil, false
7355}
7356
7357// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7358func (hvrard HyperVReplicaAzureReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
7359	return nil, false
7360}
7361
7362// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7363func (hvrard HyperVReplicaAzureReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
7364	return nil, false
7365}
7366
7367// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7368func (hvrard HyperVReplicaAzureReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
7369	return nil, false
7370}
7371
7372// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7373func (hvrard HyperVReplicaAzureReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
7374	return nil, false
7375}
7376
7377// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7378func (hvrard HyperVReplicaAzureReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
7379	return &hvrard, true
7380}
7381
7382// HyperVReplicaAzureReprotectInput azure specific reprotect input.
7383type HyperVReplicaAzureReprotectInput struct {
7384	// HvHostVMID - The Hyper-V host Vm Id.
7385	HvHostVMID *string `json:"hvHostVmId,omitempty"`
7386	// VMName - The Vm Name.
7387	VMName *string `json:"vmName,omitempty"`
7388	// OsType - The OS type associated with vm.
7389	OsType *string `json:"osType,omitempty"`
7390	// VHDID - The OS disk VHD id associated with vm.
7391	VHDID *string `json:"vHDId,omitempty"`
7392	// StorageAccountID - The storage account name.
7393	StorageAccountID *string `json:"storageAccountId,omitempty"`
7394	// LogStorageAccountID - The storage account to be used for logging during replication.
7395	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
7396	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
7397	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
7398}
7399
7400// MarshalJSON is the custom marshaler for HyperVReplicaAzureReprotectInput.
7401func (hvrari HyperVReplicaAzureReprotectInput) MarshalJSON() ([]byte, error) {
7402	hvrari.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure
7403	objectMap := make(map[string]interface{})
7404	if hvrari.HvHostVMID != nil {
7405		objectMap["hvHostVmId"] = hvrari.HvHostVMID
7406	}
7407	if hvrari.VMName != nil {
7408		objectMap["vmName"] = hvrari.VMName
7409	}
7410	if hvrari.OsType != nil {
7411		objectMap["osType"] = hvrari.OsType
7412	}
7413	if hvrari.VHDID != nil {
7414		objectMap["vHDId"] = hvrari.VHDID
7415	}
7416	if hvrari.StorageAccountID != nil {
7417		objectMap["storageAccountId"] = hvrari.StorageAccountID
7418	}
7419	if hvrari.LogStorageAccountID != nil {
7420		objectMap["logStorageAccountId"] = hvrari.LogStorageAccountID
7421	}
7422	if hvrari.InstanceType != "" {
7423		objectMap["instanceType"] = hvrari.InstanceType
7424	}
7425	return json.Marshal(objectMap)
7426}
7427
7428// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7429func (hvrari HyperVReplicaAzureReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
7430	return nil, false
7431}
7432
7433// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7434func (hvrari HyperVReplicaAzureReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
7435	return &hvrari, true
7436}
7437
7438// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7439func (hvrari HyperVReplicaAzureReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
7440	return nil, false
7441}
7442
7443// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7444func (hvrari HyperVReplicaAzureReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
7445	return nil, false
7446}
7447
7448// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7449func (hvrari HyperVReplicaAzureReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
7450	return nil, false
7451}
7452
7453// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7454func (hvrari HyperVReplicaAzureReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
7455	return &hvrari, true
7456}
7457
7458// HyperVReplicaAzureTestFailoverInput hvrA provider specific input for test failover.
7459type HyperVReplicaAzureTestFailoverInput struct {
7460	// VaultLocation - Location of the vault.
7461	VaultLocation *string `json:"vaultLocation,omitempty"`
7462	// PrimaryKekCertificatePfx - Primary kek certificate pfx.
7463	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
7464	// SecondaryKekCertificatePfx - Secondary kek certificate pfx.
7465	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
7466	// RecoveryPointID - The recovery point id to be passed to test failover to a particular recovery point. In case of latest recovery point, null should be passed.
7467	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
7468	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
7469	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
7470}
7471
7472// MarshalJSON is the custom marshaler for HyperVReplicaAzureTestFailoverInput.
7473func (hvratfi HyperVReplicaAzureTestFailoverInput) MarshalJSON() ([]byte, error) {
7474	hvratfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure
7475	objectMap := make(map[string]interface{})
7476	if hvratfi.VaultLocation != nil {
7477		objectMap["vaultLocation"] = hvratfi.VaultLocation
7478	}
7479	if hvratfi.PrimaryKekCertificatePfx != nil {
7480		objectMap["primaryKekCertificatePfx"] = hvratfi.PrimaryKekCertificatePfx
7481	}
7482	if hvratfi.SecondaryKekCertificatePfx != nil {
7483		objectMap["secondaryKekCertificatePfx"] = hvratfi.SecondaryKekCertificatePfx
7484	}
7485	if hvratfi.RecoveryPointID != nil {
7486		objectMap["recoveryPointId"] = hvratfi.RecoveryPointID
7487	}
7488	if hvratfi.InstanceType != "" {
7489		objectMap["instanceType"] = hvratfi.InstanceType
7490	}
7491	return json.Marshal(objectMap)
7492}
7493
7494// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7495func (hvratfi HyperVReplicaAzureTestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
7496	return nil, false
7497}
7498
7499// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7500func (hvratfi HyperVReplicaAzureTestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
7501	return &hvratfi, true
7502}
7503
7504// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7505func (hvratfi HyperVReplicaAzureTestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
7506	return nil, false
7507}
7508
7509// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7510func (hvratfi HyperVReplicaAzureTestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
7511	return nil, false
7512}
7513
7514// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7515func (hvratfi HyperVReplicaAzureTestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
7516	return nil, false
7517}
7518
7519// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7520func (hvratfi HyperVReplicaAzureTestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
7521	return nil, false
7522}
7523
7524// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7525func (hvratfi HyperVReplicaAzureTestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
7526	return &hvratfi, true
7527}
7528
7529// HyperVReplicaAzureUnplannedFailoverInput hvrA provider specific input for unplanned failover.
7530type HyperVReplicaAzureUnplannedFailoverInput struct {
7531	// VaultLocation - Location of the vault.
7532	VaultLocation *string `json:"vaultLocation,omitempty"`
7533	// PrimaryKekCertificatePfx - Primary kek certificate pfx.
7534	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
7535	// SecondaryKekCertificatePfx - Secondary kek certificate pfx.
7536	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
7537	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
7538	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
7539	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
7540	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
7541}
7542
7543// MarshalJSON is the custom marshaler for HyperVReplicaAzureUnplannedFailoverInput.
7544func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
7545	hvraufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure
7546	objectMap := make(map[string]interface{})
7547	if hvraufi.VaultLocation != nil {
7548		objectMap["vaultLocation"] = hvraufi.VaultLocation
7549	}
7550	if hvraufi.PrimaryKekCertificatePfx != nil {
7551		objectMap["primaryKekCertificatePfx"] = hvraufi.PrimaryKekCertificatePfx
7552	}
7553	if hvraufi.SecondaryKekCertificatePfx != nil {
7554		objectMap["secondaryKekCertificatePfx"] = hvraufi.SecondaryKekCertificatePfx
7555	}
7556	if hvraufi.RecoveryPointID != nil {
7557		objectMap["recoveryPointId"] = hvraufi.RecoveryPointID
7558	}
7559	if hvraufi.InstanceType != "" {
7560		objectMap["instanceType"] = hvraufi.InstanceType
7561	}
7562	return json.Marshal(objectMap)
7563}
7564
7565// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7566func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
7567	return nil, false
7568}
7569
7570// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7571func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
7572	return &hvraufi, true
7573}
7574
7575// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7576func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
7577	return nil, false
7578}
7579
7580// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7581func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
7582	return nil, false
7583}
7584
7585// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7586func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
7587	return nil, false
7588}
7589
7590// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7591func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
7592	return nil, false
7593}
7594
7595// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7596func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
7597	return &hvraufi, true
7598}
7599
7600// HyperVReplicaAzureUpdateReplicationProtectedItemInput hyperV replica Azure input to update replication
7601// protected item.
7602type HyperVReplicaAzureUpdateReplicationProtectedItemInput struct {
7603	// RecoveryAzureV1ResourceGroupID - The recovery Azure resource group Id for classic deployment.
7604	RecoveryAzureV1ResourceGroupID *string `json:"recoveryAzureV1ResourceGroupId,omitempty"`
7605	// RecoveryAzureV2ResourceGroupID - The recovery Azure resource group Id for resource manager deployment.
7606	RecoveryAzureV2ResourceGroupID *string `json:"recoveryAzureV2ResourceGroupId,omitempty"`
7607	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
7608	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
7609	// DiskIDToDiskEncryptionMap - The dictionary of disk resource Id to disk encryption set ARM Id.
7610	DiskIDToDiskEncryptionMap map[string]*string `json:"diskIdToDiskEncryptionMap"`
7611	// TargetProximityPlacementGroupID - The target proximity placement group Id.
7612	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
7613	// TargetAvailabilityZone - The target availability zone.
7614	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
7615	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
7616	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
7617}
7618
7619// MarshalJSON is the custom marshaler for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7620func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
7621	hvraurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure
7622	objectMap := make(map[string]interface{})
7623	if hvraurpii.RecoveryAzureV1ResourceGroupID != nil {
7624		objectMap["recoveryAzureV1ResourceGroupId"] = hvraurpii.RecoveryAzureV1ResourceGroupID
7625	}
7626	if hvraurpii.RecoveryAzureV2ResourceGroupID != nil {
7627		objectMap["recoveryAzureV2ResourceGroupId"] = hvraurpii.RecoveryAzureV2ResourceGroupID
7628	}
7629	if hvraurpii.UseManagedDisks != nil {
7630		objectMap["useManagedDisks"] = hvraurpii.UseManagedDisks
7631	}
7632	if hvraurpii.DiskIDToDiskEncryptionMap != nil {
7633		objectMap["diskIdToDiskEncryptionMap"] = hvraurpii.DiskIDToDiskEncryptionMap
7634	}
7635	if hvraurpii.TargetProximityPlacementGroupID != nil {
7636		objectMap["targetProximityPlacementGroupId"] = hvraurpii.TargetProximityPlacementGroupID
7637	}
7638	if hvraurpii.TargetAvailabilityZone != nil {
7639		objectMap["targetAvailabilityZone"] = hvraurpii.TargetAvailabilityZone
7640	}
7641	if hvraurpii.InstanceType != "" {
7642		objectMap["instanceType"] = hvraurpii.InstanceType
7643	}
7644	return json.Marshal(objectMap)
7645}
7646
7647// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7648func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
7649	return nil, false
7650}
7651
7652// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7653func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
7654	return &hvraurpii, true
7655}
7656
7657// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7658func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
7659	return nil, false
7660}
7661
7662// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7663func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
7664	return nil, false
7665}
7666
7667// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7668func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
7669	return nil, false
7670}
7671
7672// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7673func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
7674	return &hvraurpii, true
7675}
7676
7677// HyperVReplicaBaseEventDetails abstract model class for event details of a HyperVReplica E2E event.
7678type HyperVReplicaBaseEventDetails struct {
7679	// ContainerName - The container friendly name.
7680	ContainerName *string `json:"containerName,omitempty"`
7681	// FabricName - The fabric friendly name.
7682	FabricName *string `json:"fabricName,omitempty"`
7683	// RemoteContainerName - The remote container name.
7684	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
7685	// RemoteFabricName - The remote fabric name.
7686	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
7687	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
7688	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
7689}
7690
7691// MarshalJSON is the custom marshaler for HyperVReplicaBaseEventDetails.
7692func (hvrbed HyperVReplicaBaseEventDetails) MarshalJSON() ([]byte, error) {
7693	hvrbed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails
7694	objectMap := make(map[string]interface{})
7695	if hvrbed.ContainerName != nil {
7696		objectMap["containerName"] = hvrbed.ContainerName
7697	}
7698	if hvrbed.FabricName != nil {
7699		objectMap["fabricName"] = hvrbed.FabricName
7700	}
7701	if hvrbed.RemoteContainerName != nil {
7702		objectMap["remoteContainerName"] = hvrbed.RemoteContainerName
7703	}
7704	if hvrbed.RemoteFabricName != nil {
7705		objectMap["remoteFabricName"] = hvrbed.RemoteFabricName
7706	}
7707	if hvrbed.InstanceType != "" {
7708		objectMap["instanceType"] = hvrbed.InstanceType
7709	}
7710	return json.Marshal(objectMap)
7711}
7712
7713// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7714func (hvrbed HyperVReplicaBaseEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
7715	return nil, false
7716}
7717
7718// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7719func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
7720	return nil, false
7721}
7722
7723// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7724func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
7725	return nil, false
7726}
7727
7728// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7729func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
7730	return nil, false
7731}
7732
7733// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7734func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
7735	return &hvrbed, true
7736}
7737
7738// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7739func (hvrbed HyperVReplicaBaseEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
7740	return nil, false
7741}
7742
7743// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7744func (hvrbed HyperVReplicaBaseEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
7745	return nil, false
7746}
7747
7748// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7749func (hvrbed HyperVReplicaBaseEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
7750	return nil, false
7751}
7752
7753// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7754func (hvrbed HyperVReplicaBaseEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
7755	return &hvrbed, true
7756}
7757
7758// HyperVReplicaBasePolicyDetails base class for HyperVReplica policy details.
7759type HyperVReplicaBasePolicyDetails struct {
7760	// RecoveryPoints - A value indicating the number of recovery points.
7761	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
7762	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
7763	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
7764	// Compression - A value indicating whether compression has to be enabled.
7765	Compression *string `json:"compression,omitempty"`
7766	// InitialReplicationMethod - A value indicating whether IR is online.
7767	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
7768	// OnlineReplicationStartTime - A value indicating the online IR start time.
7769	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
7770	// OfflineReplicationImportPath - A value indicating the offline IR import path.
7771	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
7772	// OfflineReplicationExportPath - A value indicating the offline IR export path.
7773	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
7774	// ReplicationPort - A value indicating the recovery HTTPS port.
7775	ReplicationPort *int32 `json:"replicationPort,omitempty"`
7776	// AllowedAuthenticationType - A value indicating the authentication type.
7777	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
7778	// ReplicaDeletionOption - A value indicating whether the VM has to be auto deleted. Supported Values: String.Empty, None, OnRecoveryCloud
7779	ReplicaDeletionOption *string `json:"replicaDeletionOption,omitempty"`
7780	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
7781	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
7782}
7783
7784// MarshalJSON is the custom marshaler for HyperVReplicaBasePolicyDetails.
7785func (hvrbpd HyperVReplicaBasePolicyDetails) MarshalJSON() ([]byte, error) {
7786	hvrbpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails
7787	objectMap := make(map[string]interface{})
7788	if hvrbpd.RecoveryPoints != nil {
7789		objectMap["recoveryPoints"] = hvrbpd.RecoveryPoints
7790	}
7791	if hvrbpd.ApplicationConsistentSnapshotFrequencyInHours != nil {
7792		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrbpd.ApplicationConsistentSnapshotFrequencyInHours
7793	}
7794	if hvrbpd.Compression != nil {
7795		objectMap["compression"] = hvrbpd.Compression
7796	}
7797	if hvrbpd.InitialReplicationMethod != nil {
7798		objectMap["initialReplicationMethod"] = hvrbpd.InitialReplicationMethod
7799	}
7800	if hvrbpd.OnlineReplicationStartTime != nil {
7801		objectMap["onlineReplicationStartTime"] = hvrbpd.OnlineReplicationStartTime
7802	}
7803	if hvrbpd.OfflineReplicationImportPath != nil {
7804		objectMap["offlineReplicationImportPath"] = hvrbpd.OfflineReplicationImportPath
7805	}
7806	if hvrbpd.OfflineReplicationExportPath != nil {
7807		objectMap["offlineReplicationExportPath"] = hvrbpd.OfflineReplicationExportPath
7808	}
7809	if hvrbpd.ReplicationPort != nil {
7810		objectMap["replicationPort"] = hvrbpd.ReplicationPort
7811	}
7812	if hvrbpd.AllowedAuthenticationType != nil {
7813		objectMap["allowedAuthenticationType"] = hvrbpd.AllowedAuthenticationType
7814	}
7815	if hvrbpd.ReplicaDeletionOption != nil {
7816		objectMap["replicaDeletionOption"] = hvrbpd.ReplicaDeletionOption
7817	}
7818	if hvrbpd.InstanceType != "" {
7819		objectMap["instanceType"] = hvrbpd.InstanceType
7820	}
7821	return json.Marshal(objectMap)
7822}
7823
7824// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7825func (hvrbpd HyperVReplicaBasePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
7826	return nil, false
7827}
7828
7829// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7830func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
7831	return nil, false
7832}
7833
7834// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7835func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
7836	return &hvrbpd, true
7837}
7838
7839// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7840func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
7841	return nil, false
7842}
7843
7844// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7845func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
7846	return nil, false
7847}
7848
7849// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7850func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
7851	return nil, false
7852}
7853
7854// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7855func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
7856	return nil, false
7857}
7858
7859// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7860func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
7861	return nil, false
7862}
7863
7864// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7865func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
7866	return nil, false
7867}
7868
7869// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7870func (hvrbpd HyperVReplicaBasePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
7871	return nil, false
7872}
7873
7874// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7875func (hvrbpd HyperVReplicaBasePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
7876	return nil, false
7877}
7878
7879// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7880func (hvrbpd HyperVReplicaBasePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
7881	return nil, false
7882}
7883
7884// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7885func (hvrbpd HyperVReplicaBasePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
7886	return &hvrbpd, true
7887}
7888
7889// HyperVReplicaBaseReplicationDetails hyper V replica provider specific settings base class.
7890type HyperVReplicaBaseReplicationDetails struct {
7891	// LastReplicatedTime - The Last replication time.
7892	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
7893	// VMNics - The PE Network details.
7894	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
7895	// VMID - The virtual machine Id.
7896	VMID *string `json:"vmId,omitempty"`
7897	// VMProtectionState - The protection state for the vm.
7898	VMProtectionState *string `json:"vmProtectionState,omitempty"`
7899	// VMProtectionStateDescription - The protection state description for the vm.
7900	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
7901	// InitialReplicationDetails - Initial replication details.
7902	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
7903	// VMDiskDetails - VM disk details.
7904	VMDiskDetails *[]DiskDetails `json:"vMDiskDetails,omitempty"`
7905	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
7906	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
7907}
7908
7909// MarshalJSON is the custom marshaler for HyperVReplicaBaseReplicationDetails.
7910func (hvrbrd HyperVReplicaBaseReplicationDetails) MarshalJSON() ([]byte, error) {
7911	hvrbrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails
7912	objectMap := make(map[string]interface{})
7913	if hvrbrd.LastReplicatedTime != nil {
7914		objectMap["lastReplicatedTime"] = hvrbrd.LastReplicatedTime
7915	}
7916	if hvrbrd.VMNics != nil {
7917		objectMap["vmNics"] = hvrbrd.VMNics
7918	}
7919	if hvrbrd.VMID != nil {
7920		objectMap["vmId"] = hvrbrd.VMID
7921	}
7922	if hvrbrd.VMProtectionState != nil {
7923		objectMap["vmProtectionState"] = hvrbrd.VMProtectionState
7924	}
7925	if hvrbrd.VMProtectionStateDescription != nil {
7926		objectMap["vmProtectionStateDescription"] = hvrbrd.VMProtectionStateDescription
7927	}
7928	if hvrbrd.InitialReplicationDetails != nil {
7929		objectMap["initialReplicationDetails"] = hvrbrd.InitialReplicationDetails
7930	}
7931	if hvrbrd.VMDiskDetails != nil {
7932		objectMap["vMDiskDetails"] = hvrbrd.VMDiskDetails
7933	}
7934	if hvrbrd.InstanceType != "" {
7935		objectMap["instanceType"] = hvrbrd.InstanceType
7936	}
7937	return json.Marshal(objectMap)
7938}
7939
7940// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7941func (hvrbrd HyperVReplicaBaseReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
7942	return nil, false
7943}
7944
7945// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7946func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
7947	return nil, false
7948}
7949
7950// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7951func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
7952	return &hvrbrd, true
7953}
7954
7955// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7956func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
7957	return nil, false
7958}
7959
7960// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7961func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
7962	return nil, false
7963}
7964
7965// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7966func (hvrbrd HyperVReplicaBaseReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
7967	return nil, false
7968}
7969
7970// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7971func (hvrbrd HyperVReplicaBaseReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
7972	return nil, false
7973}
7974
7975// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7976func (hvrbrd HyperVReplicaBaseReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
7977	return nil, false
7978}
7979
7980// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7981func (hvrbrd HyperVReplicaBaseReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
7982	return nil, false
7983}
7984
7985// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7986func (hvrbrd HyperVReplicaBaseReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
7987	return &hvrbrd, true
7988}
7989
7990// HyperVReplicaBluePolicyDetails hyper-V Replica Blue specific protection profile details.
7991type HyperVReplicaBluePolicyDetails struct {
7992	// ReplicationFrequencyInSeconds - A value indicating the replication interval.
7993	ReplicationFrequencyInSeconds *int32 `json:"replicationFrequencyInSeconds,omitempty"`
7994	// RecoveryPoints - A value indicating the number of recovery points.
7995	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
7996	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
7997	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
7998	// Compression - A value indicating whether compression has to be enabled.
7999	Compression *string `json:"compression,omitempty"`
8000	// InitialReplicationMethod - A value indicating whether IR is online.
8001	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
8002	// OnlineReplicationStartTime - A value indicating the online IR start time.
8003	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
8004	// OfflineReplicationImportPath - A value indicating the offline IR import path.
8005	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
8006	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8007	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8008	// ReplicationPort - A value indicating the recovery HTTPS port.
8009	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8010	// AllowedAuthenticationType - A value indicating the authentication type.
8011	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8012	// ReplicaDeletionOption - A value indicating whether the VM has to be auto deleted. Supported Values: String.Empty, None, OnRecoveryCloud
8013	ReplicaDeletionOption *string `json:"replicaDeletionOption,omitempty"`
8014	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
8015	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
8016}
8017
8018// MarshalJSON is the custom marshaler for HyperVReplicaBluePolicyDetails.
8019func (hvrbpd HyperVReplicaBluePolicyDetails) MarshalJSON() ([]byte, error) {
8020	hvrbpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2
8021	objectMap := make(map[string]interface{})
8022	if hvrbpd.ReplicationFrequencyInSeconds != nil {
8023		objectMap["replicationFrequencyInSeconds"] = hvrbpd.ReplicationFrequencyInSeconds
8024	}
8025	if hvrbpd.RecoveryPoints != nil {
8026		objectMap["recoveryPoints"] = hvrbpd.RecoveryPoints
8027	}
8028	if hvrbpd.ApplicationConsistentSnapshotFrequencyInHours != nil {
8029		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrbpd.ApplicationConsistentSnapshotFrequencyInHours
8030	}
8031	if hvrbpd.Compression != nil {
8032		objectMap["compression"] = hvrbpd.Compression
8033	}
8034	if hvrbpd.InitialReplicationMethod != nil {
8035		objectMap["initialReplicationMethod"] = hvrbpd.InitialReplicationMethod
8036	}
8037	if hvrbpd.OnlineReplicationStartTime != nil {
8038		objectMap["onlineReplicationStartTime"] = hvrbpd.OnlineReplicationStartTime
8039	}
8040	if hvrbpd.OfflineReplicationImportPath != nil {
8041		objectMap["offlineReplicationImportPath"] = hvrbpd.OfflineReplicationImportPath
8042	}
8043	if hvrbpd.OfflineReplicationExportPath != nil {
8044		objectMap["offlineReplicationExportPath"] = hvrbpd.OfflineReplicationExportPath
8045	}
8046	if hvrbpd.ReplicationPort != nil {
8047		objectMap["replicationPort"] = hvrbpd.ReplicationPort
8048	}
8049	if hvrbpd.AllowedAuthenticationType != nil {
8050		objectMap["allowedAuthenticationType"] = hvrbpd.AllowedAuthenticationType
8051	}
8052	if hvrbpd.ReplicaDeletionOption != nil {
8053		objectMap["replicaDeletionOption"] = hvrbpd.ReplicaDeletionOption
8054	}
8055	if hvrbpd.InstanceType != "" {
8056		objectMap["instanceType"] = hvrbpd.InstanceType
8057	}
8058	return json.Marshal(objectMap)
8059}
8060
8061// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8062func (hvrbpd HyperVReplicaBluePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
8063	return nil, false
8064}
8065
8066// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8067func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
8068	return nil, false
8069}
8070
8071// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8072func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
8073	return nil, false
8074}
8075
8076// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8077func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
8078	return &hvrbpd, true
8079}
8080
8081// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8082func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
8083	return nil, false
8084}
8085
8086// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8087func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
8088	return nil, false
8089}
8090
8091// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8092func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
8093	return nil, false
8094}
8095
8096// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8097func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
8098	return nil, false
8099}
8100
8101// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8102func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
8103	return nil, false
8104}
8105
8106// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8107func (hvrbpd HyperVReplicaBluePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
8108	return nil, false
8109}
8110
8111// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8112func (hvrbpd HyperVReplicaBluePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
8113	return nil, false
8114}
8115
8116// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8117func (hvrbpd HyperVReplicaBluePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
8118	return nil, false
8119}
8120
8121// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8122func (hvrbpd HyperVReplicaBluePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
8123	return &hvrbpd, true
8124}
8125
8126// HyperVReplicaBluePolicyInput hyperV Replica Blue policy input.
8127type HyperVReplicaBluePolicyInput struct {
8128	// ReplicationFrequencyInSeconds - A value indicating the replication interval.
8129	ReplicationFrequencyInSeconds *int32 `json:"replicationFrequencyInSeconds,omitempty"`
8130	// RecoveryPoints - A value indicating the number of recovery points.
8131	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
8132	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
8133	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
8134	// Compression - A value indicating whether compression has to be enabled.
8135	Compression *string `json:"compression,omitempty"`
8136	// InitialReplicationMethod - A value indicating whether IR is online.
8137	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
8138	// OnlineReplicationStartTime - A value indicating the online IR start time.
8139	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
8140	// OfflineReplicationImportPath - A value indicating the offline IR import path.
8141	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
8142	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8143	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8144	// ReplicationPort - A value indicating the recovery HTTPS port.
8145	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8146	// AllowedAuthenticationType - A value indicating the authentication type.
8147	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8148	// ReplicaDeletion - A value indicating whether the VM has to be auto deleted.
8149	ReplicaDeletion *string `json:"replicaDeletion,omitempty"`
8150	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
8151	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
8152}
8153
8154// MarshalJSON is the custom marshaler for HyperVReplicaBluePolicyInput.
8155func (hvrbpi HyperVReplicaBluePolicyInput) MarshalJSON() ([]byte, error) {
8156	hvrbpi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2
8157	objectMap := make(map[string]interface{})
8158	if hvrbpi.ReplicationFrequencyInSeconds != nil {
8159		objectMap["replicationFrequencyInSeconds"] = hvrbpi.ReplicationFrequencyInSeconds
8160	}
8161	if hvrbpi.RecoveryPoints != nil {
8162		objectMap["recoveryPoints"] = hvrbpi.RecoveryPoints
8163	}
8164	if hvrbpi.ApplicationConsistentSnapshotFrequencyInHours != nil {
8165		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrbpi.ApplicationConsistentSnapshotFrequencyInHours
8166	}
8167	if hvrbpi.Compression != nil {
8168		objectMap["compression"] = hvrbpi.Compression
8169	}
8170	if hvrbpi.InitialReplicationMethod != nil {
8171		objectMap["initialReplicationMethod"] = hvrbpi.InitialReplicationMethod
8172	}
8173	if hvrbpi.OnlineReplicationStartTime != nil {
8174		objectMap["onlineReplicationStartTime"] = hvrbpi.OnlineReplicationStartTime
8175	}
8176	if hvrbpi.OfflineReplicationImportPath != nil {
8177		objectMap["offlineReplicationImportPath"] = hvrbpi.OfflineReplicationImportPath
8178	}
8179	if hvrbpi.OfflineReplicationExportPath != nil {
8180		objectMap["offlineReplicationExportPath"] = hvrbpi.OfflineReplicationExportPath
8181	}
8182	if hvrbpi.ReplicationPort != nil {
8183		objectMap["replicationPort"] = hvrbpi.ReplicationPort
8184	}
8185	if hvrbpi.AllowedAuthenticationType != nil {
8186		objectMap["allowedAuthenticationType"] = hvrbpi.AllowedAuthenticationType
8187	}
8188	if hvrbpi.ReplicaDeletion != nil {
8189		objectMap["replicaDeletion"] = hvrbpi.ReplicaDeletion
8190	}
8191	if hvrbpi.InstanceType != "" {
8192		objectMap["instanceType"] = hvrbpi.InstanceType
8193	}
8194	return json.Marshal(objectMap)
8195}
8196
8197// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8198func (hvrbpi HyperVReplicaBluePolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
8199	return nil, false
8200}
8201
8202// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8203func (hvrbpi HyperVReplicaBluePolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
8204	return nil, false
8205}
8206
8207// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8208func (hvrbpi HyperVReplicaBluePolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
8209	return &hvrbpi, true
8210}
8211
8212// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8213func (hvrbpi HyperVReplicaBluePolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
8214	return nil, false
8215}
8216
8217// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8218func (hvrbpi HyperVReplicaBluePolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
8219	return nil, false
8220}
8221
8222// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8223func (hvrbpi HyperVReplicaBluePolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
8224	return nil, false
8225}
8226
8227// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8228func (hvrbpi HyperVReplicaBluePolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
8229	return nil, false
8230}
8231
8232// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8233func (hvrbpi HyperVReplicaBluePolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
8234	return nil, false
8235}
8236
8237// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8238func (hvrbpi HyperVReplicaBluePolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
8239	return nil, false
8240}
8241
8242// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8243func (hvrbpi HyperVReplicaBluePolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
8244	return &hvrbpi, true
8245}
8246
8247// HyperVReplicaBlueReplicationDetails hyperV replica 2012 R2 (Blue) replication details.
8248type HyperVReplicaBlueReplicationDetails struct {
8249	// LastReplicatedTime - The Last replication time.
8250	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
8251	// VMNics - The PE Network details.
8252	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
8253	// VMID - The virtual machine Id.
8254	VMID *string `json:"vmId,omitempty"`
8255	// VMProtectionState - The protection state for the vm.
8256	VMProtectionState *string `json:"vmProtectionState,omitempty"`
8257	// VMProtectionStateDescription - The protection state description for the vm.
8258	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
8259	// InitialReplicationDetails - Initial replication details.
8260	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
8261	// VMDiskDetails - VM disk details.
8262	VMDiskDetails *[]DiskDetails `json:"vMDiskDetails,omitempty"`
8263	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
8264	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
8265}
8266
8267// MarshalJSON is the custom marshaler for HyperVReplicaBlueReplicationDetails.
8268func (hvrbrd HyperVReplicaBlueReplicationDetails) MarshalJSON() ([]byte, error) {
8269	hvrbrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2
8270	objectMap := make(map[string]interface{})
8271	if hvrbrd.LastReplicatedTime != nil {
8272		objectMap["lastReplicatedTime"] = hvrbrd.LastReplicatedTime
8273	}
8274	if hvrbrd.VMNics != nil {
8275		objectMap["vmNics"] = hvrbrd.VMNics
8276	}
8277	if hvrbrd.VMID != nil {
8278		objectMap["vmId"] = hvrbrd.VMID
8279	}
8280	if hvrbrd.VMProtectionState != nil {
8281		objectMap["vmProtectionState"] = hvrbrd.VMProtectionState
8282	}
8283	if hvrbrd.VMProtectionStateDescription != nil {
8284		objectMap["vmProtectionStateDescription"] = hvrbrd.VMProtectionStateDescription
8285	}
8286	if hvrbrd.InitialReplicationDetails != nil {
8287		objectMap["initialReplicationDetails"] = hvrbrd.InitialReplicationDetails
8288	}
8289	if hvrbrd.VMDiskDetails != nil {
8290		objectMap["vMDiskDetails"] = hvrbrd.VMDiskDetails
8291	}
8292	if hvrbrd.InstanceType != "" {
8293		objectMap["instanceType"] = hvrbrd.InstanceType
8294	}
8295	return json.Marshal(objectMap)
8296}
8297
8298// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8299func (hvrbrd HyperVReplicaBlueReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
8300	return nil, false
8301}
8302
8303// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8304func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
8305	return nil, false
8306}
8307
8308// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8309func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
8310	return nil, false
8311}
8312
8313// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8314func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
8315	return &hvrbrd, true
8316}
8317
8318// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8319func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
8320	return nil, false
8321}
8322
8323// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8324func (hvrbrd HyperVReplicaBlueReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
8325	return nil, false
8326}
8327
8328// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8329func (hvrbrd HyperVReplicaBlueReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
8330	return nil, false
8331}
8332
8333// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8334func (hvrbrd HyperVReplicaBlueReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
8335	return nil, false
8336}
8337
8338// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8339func (hvrbrd HyperVReplicaBlueReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
8340	return nil, false
8341}
8342
8343// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8344func (hvrbrd HyperVReplicaBlueReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
8345	return &hvrbrd, true
8346}
8347
8348// HyperVReplicaPolicyDetails hyper-V Replica Blue specific protection profile details.
8349type HyperVReplicaPolicyDetails struct {
8350	// RecoveryPoints - A value indicating the number of recovery points.
8351	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
8352	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
8353	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
8354	// Compression - A value indicating whether compression has to be enabled.
8355	Compression *string `json:"compression,omitempty"`
8356	// InitialReplicationMethod - A value indicating whether IR is online.
8357	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
8358	// OnlineReplicationStartTime - A value indicating the online IR start time.
8359	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
8360	// OfflineReplicationImportPath - A value indicating the offline IR import path.
8361	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
8362	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8363	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8364	// ReplicationPort - A value indicating the recovery HTTPS port.
8365	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8366	// AllowedAuthenticationType - A value indicating the authentication type.
8367	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8368	// ReplicaDeletionOption - A value indicating whether the VM has to be auto deleted. Supported Values: String.Empty, None, OnRecoveryCloud
8369	ReplicaDeletionOption *string `json:"replicaDeletionOption,omitempty"`
8370	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
8371	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
8372}
8373
8374// MarshalJSON is the custom marshaler for HyperVReplicaPolicyDetails.
8375func (hvrpd HyperVReplicaPolicyDetails) MarshalJSON() ([]byte, error) {
8376	hvrpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012
8377	objectMap := make(map[string]interface{})
8378	if hvrpd.RecoveryPoints != nil {
8379		objectMap["recoveryPoints"] = hvrpd.RecoveryPoints
8380	}
8381	if hvrpd.ApplicationConsistentSnapshotFrequencyInHours != nil {
8382		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrpd.ApplicationConsistentSnapshotFrequencyInHours
8383	}
8384	if hvrpd.Compression != nil {
8385		objectMap["compression"] = hvrpd.Compression
8386	}
8387	if hvrpd.InitialReplicationMethod != nil {
8388		objectMap["initialReplicationMethod"] = hvrpd.InitialReplicationMethod
8389	}
8390	if hvrpd.OnlineReplicationStartTime != nil {
8391		objectMap["onlineReplicationStartTime"] = hvrpd.OnlineReplicationStartTime
8392	}
8393	if hvrpd.OfflineReplicationImportPath != nil {
8394		objectMap["offlineReplicationImportPath"] = hvrpd.OfflineReplicationImportPath
8395	}
8396	if hvrpd.OfflineReplicationExportPath != nil {
8397		objectMap["offlineReplicationExportPath"] = hvrpd.OfflineReplicationExportPath
8398	}
8399	if hvrpd.ReplicationPort != nil {
8400		objectMap["replicationPort"] = hvrpd.ReplicationPort
8401	}
8402	if hvrpd.AllowedAuthenticationType != nil {
8403		objectMap["allowedAuthenticationType"] = hvrpd.AllowedAuthenticationType
8404	}
8405	if hvrpd.ReplicaDeletionOption != nil {
8406		objectMap["replicaDeletionOption"] = hvrpd.ReplicaDeletionOption
8407	}
8408	if hvrpd.InstanceType != "" {
8409		objectMap["instanceType"] = hvrpd.InstanceType
8410	}
8411	return json.Marshal(objectMap)
8412}
8413
8414// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8415func (hvrpd HyperVReplicaPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
8416	return nil, false
8417}
8418
8419// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8420func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
8421	return nil, false
8422}
8423
8424// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8425func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
8426	return nil, false
8427}
8428
8429// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8430func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
8431	return nil, false
8432}
8433
8434// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8435func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
8436	return &hvrpd, true
8437}
8438
8439// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8440func (hvrpd HyperVReplicaPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
8441	return nil, false
8442}
8443
8444// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8445func (hvrpd HyperVReplicaPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
8446	return nil, false
8447}
8448
8449// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8450func (hvrpd HyperVReplicaPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
8451	return nil, false
8452}
8453
8454// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8455func (hvrpd HyperVReplicaPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
8456	return nil, false
8457}
8458
8459// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8460func (hvrpd HyperVReplicaPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
8461	return nil, false
8462}
8463
8464// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8465func (hvrpd HyperVReplicaPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
8466	return nil, false
8467}
8468
8469// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8470func (hvrpd HyperVReplicaPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
8471	return nil, false
8472}
8473
8474// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8475func (hvrpd HyperVReplicaPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
8476	return &hvrpd, true
8477}
8478
8479// HyperVReplicaPolicyInput hyper-V Replica specific policy Input.
8480type HyperVReplicaPolicyInput struct {
8481	// RecoveryPoints - A value indicating the number of recovery points.
8482	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
8483	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
8484	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
8485	// Compression - A value indicating whether compression has to be enabled.
8486	Compression *string `json:"compression,omitempty"`
8487	// InitialReplicationMethod - A value indicating whether IR is online.
8488	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
8489	// OnlineReplicationStartTime - A value indicating the online IR start time.
8490	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
8491	// OfflineReplicationImportPath - A value indicating the offline IR import path.
8492	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
8493	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8494	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8495	// ReplicationPort - A value indicating the recovery HTTPS port.
8496	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8497	// AllowedAuthenticationType - A value indicating the authentication type.
8498	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8499	// ReplicaDeletion - A value indicating whether the VM has to be auto deleted.
8500	ReplicaDeletion *string `json:"replicaDeletion,omitempty"`
8501	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
8502	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
8503}
8504
8505// MarshalJSON is the custom marshaler for HyperVReplicaPolicyInput.
8506func (hvrpi HyperVReplicaPolicyInput) MarshalJSON() ([]byte, error) {
8507	hvrpi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012
8508	objectMap := make(map[string]interface{})
8509	if hvrpi.RecoveryPoints != nil {
8510		objectMap["recoveryPoints"] = hvrpi.RecoveryPoints
8511	}
8512	if hvrpi.ApplicationConsistentSnapshotFrequencyInHours != nil {
8513		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrpi.ApplicationConsistentSnapshotFrequencyInHours
8514	}
8515	if hvrpi.Compression != nil {
8516		objectMap["compression"] = hvrpi.Compression
8517	}
8518	if hvrpi.InitialReplicationMethod != nil {
8519		objectMap["initialReplicationMethod"] = hvrpi.InitialReplicationMethod
8520	}
8521	if hvrpi.OnlineReplicationStartTime != nil {
8522		objectMap["onlineReplicationStartTime"] = hvrpi.OnlineReplicationStartTime
8523	}
8524	if hvrpi.OfflineReplicationImportPath != nil {
8525		objectMap["offlineReplicationImportPath"] = hvrpi.OfflineReplicationImportPath
8526	}
8527	if hvrpi.OfflineReplicationExportPath != nil {
8528		objectMap["offlineReplicationExportPath"] = hvrpi.OfflineReplicationExportPath
8529	}
8530	if hvrpi.ReplicationPort != nil {
8531		objectMap["replicationPort"] = hvrpi.ReplicationPort
8532	}
8533	if hvrpi.AllowedAuthenticationType != nil {
8534		objectMap["allowedAuthenticationType"] = hvrpi.AllowedAuthenticationType
8535	}
8536	if hvrpi.ReplicaDeletion != nil {
8537		objectMap["replicaDeletion"] = hvrpi.ReplicaDeletion
8538	}
8539	if hvrpi.InstanceType != "" {
8540		objectMap["instanceType"] = hvrpi.InstanceType
8541	}
8542	return json.Marshal(objectMap)
8543}
8544
8545// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8546func (hvrpi HyperVReplicaPolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
8547	return nil, false
8548}
8549
8550// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8551func (hvrpi HyperVReplicaPolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
8552	return nil, false
8553}
8554
8555// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8556func (hvrpi HyperVReplicaPolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
8557	return nil, false
8558}
8559
8560// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8561func (hvrpi HyperVReplicaPolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
8562	return &hvrpi, true
8563}
8564
8565// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8566func (hvrpi HyperVReplicaPolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
8567	return nil, false
8568}
8569
8570// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8571func (hvrpi HyperVReplicaPolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
8572	return nil, false
8573}
8574
8575// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8576func (hvrpi HyperVReplicaPolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
8577	return nil, false
8578}
8579
8580// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8581func (hvrpi HyperVReplicaPolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
8582	return nil, false
8583}
8584
8585// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8586func (hvrpi HyperVReplicaPolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
8587	return nil, false
8588}
8589
8590// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8591func (hvrpi HyperVReplicaPolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
8592	return &hvrpi, true
8593}
8594
8595// HyperVReplicaReplicationDetails hyperV replica 2012 replication details.
8596type HyperVReplicaReplicationDetails struct {
8597	// LastReplicatedTime - The Last replication time.
8598	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
8599	// VMNics - The PE Network details.
8600	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
8601	// VMID - The virtual machine Id.
8602	VMID *string `json:"vmId,omitempty"`
8603	// VMProtectionState - The protection state for the vm.
8604	VMProtectionState *string `json:"vmProtectionState,omitempty"`
8605	// VMProtectionStateDescription - The protection state description for the vm.
8606	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
8607	// InitialReplicationDetails - Initial replication details.
8608	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
8609	// VMDiskDetails - VM disk details.
8610	VMDiskDetails *[]DiskDetails `json:"vMDiskDetails,omitempty"`
8611	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
8612	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
8613}
8614
8615// MarshalJSON is the custom marshaler for HyperVReplicaReplicationDetails.
8616func (hvrrd HyperVReplicaReplicationDetails) MarshalJSON() ([]byte, error) {
8617	hvrrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012
8618	objectMap := make(map[string]interface{})
8619	if hvrrd.LastReplicatedTime != nil {
8620		objectMap["lastReplicatedTime"] = hvrrd.LastReplicatedTime
8621	}
8622	if hvrrd.VMNics != nil {
8623		objectMap["vmNics"] = hvrrd.VMNics
8624	}
8625	if hvrrd.VMID != nil {
8626		objectMap["vmId"] = hvrrd.VMID
8627	}
8628	if hvrrd.VMProtectionState != nil {
8629		objectMap["vmProtectionState"] = hvrrd.VMProtectionState
8630	}
8631	if hvrrd.VMProtectionStateDescription != nil {
8632		objectMap["vmProtectionStateDescription"] = hvrrd.VMProtectionStateDescription
8633	}
8634	if hvrrd.InitialReplicationDetails != nil {
8635		objectMap["initialReplicationDetails"] = hvrrd.InitialReplicationDetails
8636	}
8637	if hvrrd.VMDiskDetails != nil {
8638		objectMap["vMDiskDetails"] = hvrrd.VMDiskDetails
8639	}
8640	if hvrrd.InstanceType != "" {
8641		objectMap["instanceType"] = hvrrd.InstanceType
8642	}
8643	return json.Marshal(objectMap)
8644}
8645
8646// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8647func (hvrrd HyperVReplicaReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
8648	return nil, false
8649}
8650
8651// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8652func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
8653	return nil, false
8654}
8655
8656// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8657func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
8658	return nil, false
8659}
8660
8661// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8662func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
8663	return nil, false
8664}
8665
8666// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8667func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
8668	return &hvrrd, true
8669}
8670
8671// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8672func (hvrrd HyperVReplicaReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
8673	return nil, false
8674}
8675
8676// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8677func (hvrrd HyperVReplicaReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
8678	return nil, false
8679}
8680
8681// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8682func (hvrrd HyperVReplicaReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
8683	return nil, false
8684}
8685
8686// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8687func (hvrrd HyperVReplicaReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
8688	return nil, false
8689}
8690
8691// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8692func (hvrrd HyperVReplicaReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
8693	return &hvrrd, true
8694}
8695
8696// HyperVSiteDetails hyperVSite fabric specific details.
8697type HyperVSiteDetails struct {
8698	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
8699	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
8700}
8701
8702// MarshalJSON is the custom marshaler for HyperVSiteDetails.
8703func (hvsd HyperVSiteDetails) MarshalJSON() ([]byte, error) {
8704	hvsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite
8705	objectMap := make(map[string]interface{})
8706	if hvsd.InstanceType != "" {
8707		objectMap["instanceType"] = hvsd.InstanceType
8708	}
8709	return json.Marshal(objectMap)
8710}
8711
8712// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8713func (hvsd HyperVSiteDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
8714	return nil, false
8715}
8716
8717// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8718func (hvsd HyperVSiteDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
8719	return &hvsd, true
8720}
8721
8722// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8723func (hvsd HyperVSiteDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
8724	return nil, false
8725}
8726
8727// AsVmmDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8728func (hvsd HyperVSiteDetails) AsVmmDetails() (*VmmDetails, bool) {
8729	return nil, false
8730}
8731
8732// AsVMwareDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8733func (hvsd HyperVSiteDetails) AsVMwareDetails() (*VMwareDetails, bool) {
8734	return nil, false
8735}
8736
8737// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8738func (hvsd HyperVSiteDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
8739	return nil, false
8740}
8741
8742// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8743func (hvsd HyperVSiteDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
8744	return nil, false
8745}
8746
8747// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8748func (hvsd HyperVSiteDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
8749	return &hvsd, true
8750}
8751
8752// HyperVVirtualMachineDetails single Host fabric provider specific VM settings.
8753type HyperVVirtualMachineDetails struct {
8754	// SourceItemID - The source id of the object.
8755	SourceItemID *string `json:"sourceItemId,omitempty"`
8756	// Generation - The id of the object in fabric.
8757	Generation *string `json:"generation,omitempty"`
8758	// OsDetails - The Last replication time.
8759	OsDetails *OSDetails `json:"osDetails,omitempty"`
8760	// DiskDetails - The Last successful failover time.
8761	DiskDetails *[]DiskDetails `json:"diskDetails,omitempty"`
8762	// HasPhysicalDisk - A value indicating whether the VM has a physical disk attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
8763	HasPhysicalDisk PresenceStatus `json:"hasPhysicalDisk,omitempty"`
8764	// HasFibreChannelAdapter - A value indicating whether the VM has a fibre channel adapter attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
8765	HasFibreChannelAdapter PresenceStatus `json:"hasFibreChannelAdapter,omitempty"`
8766	// HasSharedVhd - A value indicating whether the VM has a shared VHD attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
8767	HasSharedVhd PresenceStatus `json:"hasSharedVhd,omitempty"`
8768	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
8769	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
8770}
8771
8772// MarshalJSON is the custom marshaler for HyperVVirtualMachineDetails.
8773func (hvvmd HyperVVirtualMachineDetails) MarshalJSON() ([]byte, error) {
8774	hvvmd.InstanceType = InstanceTypeHyperVVirtualMachine
8775	objectMap := make(map[string]interface{})
8776	if hvvmd.SourceItemID != nil {
8777		objectMap["sourceItemId"] = hvvmd.SourceItemID
8778	}
8779	if hvvmd.Generation != nil {
8780		objectMap["generation"] = hvvmd.Generation
8781	}
8782	if hvvmd.OsDetails != nil {
8783		objectMap["osDetails"] = hvvmd.OsDetails
8784	}
8785	if hvvmd.DiskDetails != nil {
8786		objectMap["diskDetails"] = hvvmd.DiskDetails
8787	}
8788	if hvvmd.HasPhysicalDisk != "" {
8789		objectMap["hasPhysicalDisk"] = hvvmd.HasPhysicalDisk
8790	}
8791	if hvvmd.HasFibreChannelAdapter != "" {
8792		objectMap["hasFibreChannelAdapter"] = hvvmd.HasFibreChannelAdapter
8793	}
8794	if hvvmd.HasSharedVhd != "" {
8795		objectMap["hasSharedVhd"] = hvvmd.HasSharedVhd
8796	}
8797	if hvvmd.InstanceType != "" {
8798		objectMap["instanceType"] = hvvmd.InstanceType
8799	}
8800	return json.Marshal(objectMap)
8801}
8802
8803// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8804func (hvvmd HyperVVirtualMachineDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
8805	return &hvvmd, true
8806}
8807
8808// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8809func (hvvmd HyperVVirtualMachineDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
8810	return nil, false
8811}
8812
8813// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8814func (hvvmd HyperVVirtualMachineDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
8815	return nil, false
8816}
8817
8818// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8819func (hvvmd HyperVVirtualMachineDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
8820	return nil, false
8821}
8822
8823// AsConfigurationSettings is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8824func (hvvmd HyperVVirtualMachineDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
8825	return nil, false
8826}
8827
8828// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8829func (hvvmd HyperVVirtualMachineDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
8830	return &hvvmd, true
8831}
8832
8833// IdentityProviderDetails identity provider details.
8834type IdentityProviderDetails struct {
8835	// TenantID - The tenant Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8836	TenantID *string `json:"tenantId,omitempty"`
8837	// ApplicationID - The application/client Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8838	ApplicationID *string `json:"applicationId,omitempty"`
8839	// ObjectID - The object Id of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8840	ObjectID *string `json:"objectId,omitempty"`
8841	// Audience - The intended Audience of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8842	Audience *string `json:"audience,omitempty"`
8843	// AadAuthority - The base authority for Azure Active Directory authentication.
8844	AadAuthority *string `json:"aadAuthority,omitempty"`
8845}
8846
8847// IdentityProviderInput identity provider input.
8848type IdentityProviderInput struct {
8849	// TenantID - The tenant Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8850	TenantID *string `json:"tenantId,omitempty"`
8851	// ApplicationID - The application/client Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8852	ApplicationID *string `json:"applicationId,omitempty"`
8853	// ObjectID - The object Id of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8854	ObjectID *string `json:"objectId,omitempty"`
8855	// Audience - The intended Audience of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8856	Audience *string `json:"audience,omitempty"`
8857	// AadAuthority - The base authority for Azure Active Directory authentication.
8858	AadAuthority *string `json:"aadAuthority,omitempty"`
8859}
8860
8861// InconsistentVMDetails this class stores the monitoring details for consistency check of inconsistent
8862// Protected Entity.
8863type InconsistentVMDetails struct {
8864	// VMName - The Vm name.
8865	VMName *string `json:"vmName,omitempty"`
8866	// CloudName - The Cloud name.
8867	CloudName *string `json:"cloudName,omitempty"`
8868	// Details - The list of details regarding state of the Protected Entity in SRS and On prem.
8869	Details *[]string `json:"details,omitempty"`
8870	// ErrorIds - The list of error ids.
8871	ErrorIds *[]string `json:"errorIds,omitempty"`
8872}
8873
8874// InitialReplicationDetails initial replication details.
8875type InitialReplicationDetails struct {
8876	// InitialReplicationType - Initial replication type.
8877	InitialReplicationType *string `json:"initialReplicationType,omitempty"`
8878	// InitialReplicationProgressPercentage - The initial replication progress percentage.
8879	InitialReplicationProgressPercentage *string `json:"initialReplicationProgressPercentage,omitempty"`
8880}
8881
8882// InlineWorkflowTaskDetails this class represents the inline workflow task details.
8883type InlineWorkflowTaskDetails struct {
8884	// WorkflowIds - The list of child workflow ids.
8885	WorkflowIds *[]string `json:"workflowIds,omitempty"`
8886	// ChildTasks - The child tasks.
8887	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
8888	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
8889	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
8890}
8891
8892// MarshalJSON is the custom marshaler for InlineWorkflowTaskDetails.
8893func (iwtd InlineWorkflowTaskDetails) MarshalJSON() ([]byte, error) {
8894	iwtd.InstanceType = InstanceTypeInlineWorkflowTaskDetails
8895	objectMap := make(map[string]interface{})
8896	if iwtd.WorkflowIds != nil {
8897		objectMap["workflowIds"] = iwtd.WorkflowIds
8898	}
8899	if iwtd.ChildTasks != nil {
8900		objectMap["childTasks"] = iwtd.ChildTasks
8901	}
8902	if iwtd.InstanceType != "" {
8903		objectMap["instanceType"] = iwtd.InstanceType
8904	}
8905	return json.Marshal(objectMap)
8906}
8907
8908// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8909func (iwtd InlineWorkflowTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
8910	return &iwtd, true
8911}
8912
8913// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8914func (iwtd InlineWorkflowTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
8915	return nil, false
8916}
8917
8918// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8919func (iwtd InlineWorkflowTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
8920	return nil, false
8921}
8922
8923// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8924func (iwtd InlineWorkflowTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
8925	return nil, false
8926}
8927
8928// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8929func (iwtd InlineWorkflowTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
8930	return &iwtd, true
8931}
8932
8933// InMageAgentDetails the details of the InMage agent.
8934type InMageAgentDetails struct {
8935	// AgentVersion - The agent version.
8936	AgentVersion *string `json:"agentVersion,omitempty"`
8937	// AgentUpdateStatus - A value indicating whether installed agent needs to be updated.
8938	AgentUpdateStatus *string `json:"agentUpdateStatus,omitempty"`
8939	// PostUpdateRebootStatus - A value indicating whether reboot is required after update is applied.
8940	PostUpdateRebootStatus *string `json:"postUpdateRebootStatus,omitempty"`
8941	// AgentExpiryDate - Agent expiry date.
8942	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
8943}
8944
8945// InMageAgentVersionDetails inMage agent version details.
8946type InMageAgentVersionDetails struct {
8947	// PostUpdateRebootStatus - A value indicating whether reboot is required after update is applied.
8948	PostUpdateRebootStatus *string `json:"postUpdateRebootStatus,omitempty"`
8949	// Version - The agent version.
8950	Version *string `json:"version,omitempty"`
8951	// ExpiryDate - Version expiry date.
8952	ExpiryDate *date.Time `json:"expiryDate,omitempty"`
8953	// Status - A value indicating whether security update required. Possible values include: 'Supported', 'NotSupported', 'Deprecated', 'UpdateRequired', 'SecurityUpdateRequired'
8954	Status AgentVersionStatus `json:"status,omitempty"`
8955}
8956
8957// InMageAzureV2ApplyRecoveryPointInput applyRecoveryPoint input specific to InMageAzureV2 provider.
8958type InMageAzureV2ApplyRecoveryPointInput struct {
8959	// VaultLocation - The vault location where the recovery Vm resides.
8960	VaultLocation *string `json:"vaultLocation,omitempty"`
8961	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
8962	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
8963}
8964
8965// MarshalJSON is the custom marshaler for InMageAzureV2ApplyRecoveryPointInput.
8966func (imavarpi InMageAzureV2ApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
8967	imavarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2
8968	objectMap := make(map[string]interface{})
8969	if imavarpi.VaultLocation != nil {
8970		objectMap["vaultLocation"] = imavarpi.VaultLocation
8971	}
8972	if imavarpi.InstanceType != "" {
8973		objectMap["instanceType"] = imavarpi.InstanceType
8974	}
8975	return json.Marshal(objectMap)
8976}
8977
8978// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8979func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
8980	return nil, false
8981}
8982
8983// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8984func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
8985	return nil, false
8986}
8987
8988// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8989func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
8990	return &imavarpi, true
8991}
8992
8993// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8994func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
8995	return nil, false
8996}
8997
8998// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8999func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
9000	return nil, false
9001}
9002
9003// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
9004func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
9005	return &imavarpi, true
9006}
9007
9008// InMageAzureV2DiskInputDetails disk input details.
9009type InMageAzureV2DiskInputDetails struct {
9010	// DiskID - The DiskId.
9011	DiskID *string `json:"diskId,omitempty"`
9012	// LogStorageAccountID - The LogStorageAccountId.
9013	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
9014	// DiskType - The DiskType. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
9015	DiskType DiskAccountType `json:"diskType,omitempty"`
9016	// DiskEncryptionSetID - The DiskEncryptionSet ARM ID.
9017	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
9018}
9019
9020// InMageAzureV2EnableProtectionInput vMware Azure specific enable protection input.
9021type InMageAzureV2EnableProtectionInput struct {
9022	// MasterTargetID - The Master target Id.
9023	MasterTargetID *string `json:"masterTargetId,omitempty"`
9024	// ProcessServerID - The Process Server Id.
9025	ProcessServerID *string `json:"processServerId,omitempty"`
9026	// StorageAccountID - The storage account name.
9027	StorageAccountID *string `json:"storageAccountId,omitempty"`
9028	// RunAsAccountID - The CS account Id.
9029	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
9030	// MultiVMGroupID - The multi vm group Id.
9031	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
9032	// MultiVMGroupName - The multi vm group name.
9033	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
9034	// DisksToInclude - The disks to include list.
9035	DisksToInclude *[]InMageAzureV2DiskInputDetails `json:"disksToInclude,omitempty"`
9036	// TargetAzureNetworkID - The selected target Azure network Id.
9037	TargetAzureNetworkID *string `json:"targetAzureNetworkId,omitempty"`
9038	// TargetAzureSubnetID - The selected target Azure subnet Id.
9039	TargetAzureSubnetID *string `json:"targetAzureSubnetId,omitempty"`
9040	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
9041	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
9042	// TargetAzureVMName - The target azure Vm Name.
9043	TargetAzureVMName *string `json:"targetAzureVmName,omitempty"`
9044	// LogStorageAccountID - The storage account to be used for logging during replication.
9045	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
9046	// TargetAzureV1ResourceGroupID - The Id of the target resource group (for classic deployment) in which the failover VM is to be created.
9047	TargetAzureV1ResourceGroupID *string `json:"targetAzureV1ResourceGroupId,omitempty"`
9048	// TargetAzureV2ResourceGroupID - The Id of the target resource group (for resource manager deployment) in which the failover VM is to be created.
9049	TargetAzureV2ResourceGroupID *string `json:"targetAzureV2ResourceGroupId,omitempty"`
9050	// DiskType - The DiskType. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
9051	DiskType DiskAccountType `json:"diskType,omitempty"`
9052	// DiskEncryptionSetID - The DiskEncryptionSet ARM ID.
9053	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
9054	// TargetAvailabilityZone - The target availability zone.
9055	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
9056	// TargetProximityPlacementGroupID - The proximity placement group ARM Id.
9057	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
9058	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
9059	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
9060}
9061
9062// MarshalJSON is the custom marshaler for InMageAzureV2EnableProtectionInput.
9063func (imavepi InMageAzureV2EnableProtectionInput) MarshalJSON() ([]byte, error) {
9064	imavepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2
9065	objectMap := make(map[string]interface{})
9066	if imavepi.MasterTargetID != nil {
9067		objectMap["masterTargetId"] = imavepi.MasterTargetID
9068	}
9069	if imavepi.ProcessServerID != nil {
9070		objectMap["processServerId"] = imavepi.ProcessServerID
9071	}
9072	if imavepi.StorageAccountID != nil {
9073		objectMap["storageAccountId"] = imavepi.StorageAccountID
9074	}
9075	if imavepi.RunAsAccountID != nil {
9076		objectMap["runAsAccountId"] = imavepi.RunAsAccountID
9077	}
9078	if imavepi.MultiVMGroupID != nil {
9079		objectMap["multiVmGroupId"] = imavepi.MultiVMGroupID
9080	}
9081	if imavepi.MultiVMGroupName != nil {
9082		objectMap["multiVmGroupName"] = imavepi.MultiVMGroupName
9083	}
9084	if imavepi.DisksToInclude != nil {
9085		objectMap["disksToInclude"] = imavepi.DisksToInclude
9086	}
9087	if imavepi.TargetAzureNetworkID != nil {
9088		objectMap["targetAzureNetworkId"] = imavepi.TargetAzureNetworkID
9089	}
9090	if imavepi.TargetAzureSubnetID != nil {
9091		objectMap["targetAzureSubnetId"] = imavepi.TargetAzureSubnetID
9092	}
9093	if imavepi.EnableRdpOnTargetOption != nil {
9094		objectMap["enableRdpOnTargetOption"] = imavepi.EnableRdpOnTargetOption
9095	}
9096	if imavepi.TargetAzureVMName != nil {
9097		objectMap["targetAzureVmName"] = imavepi.TargetAzureVMName
9098	}
9099	if imavepi.LogStorageAccountID != nil {
9100		objectMap["logStorageAccountId"] = imavepi.LogStorageAccountID
9101	}
9102	if imavepi.TargetAzureV1ResourceGroupID != nil {
9103		objectMap["targetAzureV1ResourceGroupId"] = imavepi.TargetAzureV1ResourceGroupID
9104	}
9105	if imavepi.TargetAzureV2ResourceGroupID != nil {
9106		objectMap["targetAzureV2ResourceGroupId"] = imavepi.TargetAzureV2ResourceGroupID
9107	}
9108	if imavepi.DiskType != "" {
9109		objectMap["diskType"] = imavepi.DiskType
9110	}
9111	if imavepi.DiskEncryptionSetID != nil {
9112		objectMap["diskEncryptionSetId"] = imavepi.DiskEncryptionSetID
9113	}
9114	if imavepi.TargetAvailabilityZone != nil {
9115		objectMap["targetAvailabilityZone"] = imavepi.TargetAvailabilityZone
9116	}
9117	if imavepi.TargetProximityPlacementGroupID != nil {
9118		objectMap["targetProximityPlacementGroupId"] = imavepi.TargetProximityPlacementGroupID
9119	}
9120	if imavepi.InstanceType != "" {
9121		objectMap["instanceType"] = imavepi.InstanceType
9122	}
9123	return json.Marshal(objectMap)
9124}
9125
9126// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9127func (imavepi InMageAzureV2EnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
9128	return nil, false
9129}
9130
9131// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9132func (imavepi InMageAzureV2EnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
9133	return nil, false
9134}
9135
9136// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9137func (imavepi InMageAzureV2EnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
9138	return &imavepi, true
9139}
9140
9141// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9142func (imavepi InMageAzureV2EnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
9143	return nil, false
9144}
9145
9146// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9147func (imavepi InMageAzureV2EnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
9148	return nil, false
9149}
9150
9151// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9152func (imavepi InMageAzureV2EnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
9153	return nil, false
9154}
9155
9156// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9157func (imavepi InMageAzureV2EnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
9158	return nil, false
9159}
9160
9161// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9162func (imavepi InMageAzureV2EnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
9163	return &imavepi, true
9164}
9165
9166// InMageAzureV2EventDetails model class for event details of a VMwareAzureV2 event.
9167type InMageAzureV2EventDetails struct {
9168	// EventType - InMage Event type. Takes one of the values of {InMageDataContract.InMageMonitoringEventType}.
9169	EventType *string `json:"eventType,omitempty"`
9170	// Category - InMage Event Category.
9171	Category *string `json:"category,omitempty"`
9172	// Component - InMage Event Component.
9173	Component *string `json:"component,omitempty"`
9174	// CorrectiveAction - Corrective Action string for the event.
9175	CorrectiveAction *string `json:"correctiveAction,omitempty"`
9176	// Details - InMage Event Details.
9177	Details *string `json:"details,omitempty"`
9178	// Summary - InMage Event Summary.
9179	Summary *string `json:"summary,omitempty"`
9180	// SiteName - VMware Site name.
9181	SiteName *string `json:"siteName,omitempty"`
9182	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
9183	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
9184}
9185
9186// MarshalJSON is the custom marshaler for InMageAzureV2EventDetails.
9187func (imaved InMageAzureV2EventDetails) MarshalJSON() ([]byte, error) {
9188	imaved.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2
9189	objectMap := make(map[string]interface{})
9190	if imaved.EventType != nil {
9191		objectMap["eventType"] = imaved.EventType
9192	}
9193	if imaved.Category != nil {
9194		objectMap["category"] = imaved.Category
9195	}
9196	if imaved.Component != nil {
9197		objectMap["component"] = imaved.Component
9198	}
9199	if imaved.CorrectiveAction != nil {
9200		objectMap["correctiveAction"] = imaved.CorrectiveAction
9201	}
9202	if imaved.Details != nil {
9203		objectMap["details"] = imaved.Details
9204	}
9205	if imaved.Summary != nil {
9206		objectMap["summary"] = imaved.Summary
9207	}
9208	if imaved.SiteName != nil {
9209		objectMap["siteName"] = imaved.SiteName
9210	}
9211	if imaved.InstanceType != "" {
9212		objectMap["instanceType"] = imaved.InstanceType
9213	}
9214	return json.Marshal(objectMap)
9215}
9216
9217// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9218func (imaved InMageAzureV2EventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
9219	return nil, false
9220}
9221
9222// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9223func (imaved InMageAzureV2EventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
9224	return nil, false
9225}
9226
9227// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9228func (imaved InMageAzureV2EventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
9229	return nil, false
9230}
9231
9232// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9233func (imaved InMageAzureV2EventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
9234	return nil, false
9235}
9236
9237// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9238func (imaved InMageAzureV2EventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
9239	return nil, false
9240}
9241
9242// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9243func (imaved InMageAzureV2EventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
9244	return &imaved, true
9245}
9246
9247// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9248func (imaved InMageAzureV2EventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
9249	return nil, false
9250}
9251
9252// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9253func (imaved InMageAzureV2EventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
9254	return nil, false
9255}
9256
9257// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9258func (imaved InMageAzureV2EventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
9259	return &imaved, true
9260}
9261
9262// InMageAzureV2FailoverProviderInput inMageAzureV2 provider specific input for failover.
9263type InMageAzureV2FailoverProviderInput struct {
9264	// VaultLocation - Location of the vault.
9265	VaultLocation *string `json:"vaultLocation,omitempty"`
9266	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
9267	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
9268	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
9269	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
9270}
9271
9272// MarshalJSON is the custom marshaler for InMageAzureV2FailoverProviderInput.
9273func (imavfpi InMageAzureV2FailoverProviderInput) MarshalJSON() ([]byte, error) {
9274	imavfpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2
9275	objectMap := make(map[string]interface{})
9276	if imavfpi.VaultLocation != nil {
9277		objectMap["vaultLocation"] = imavfpi.VaultLocation
9278	}
9279	if imavfpi.RecoveryPointID != nil {
9280		objectMap["recoveryPointId"] = imavfpi.RecoveryPointID
9281	}
9282	if imavfpi.InstanceType != "" {
9283		objectMap["instanceType"] = imavfpi.InstanceType
9284	}
9285	return json.Marshal(objectMap)
9286}
9287
9288// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9289func (imavfpi InMageAzureV2FailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
9290	return nil, false
9291}
9292
9293// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9294func (imavfpi InMageAzureV2FailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
9295	return nil, false
9296}
9297
9298// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9299func (imavfpi InMageAzureV2FailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
9300	return nil, false
9301}
9302
9303// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9304func (imavfpi InMageAzureV2FailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
9305	return &imavfpi, true
9306}
9307
9308// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9309func (imavfpi InMageAzureV2FailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
9310	return nil, false
9311}
9312
9313// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9314func (imavfpi InMageAzureV2FailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
9315	return nil, false
9316}
9317
9318// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9319func (imavfpi InMageAzureV2FailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
9320	return &imavfpi, true
9321}
9322
9323// InMageAzureV2ManagedDiskDetails inMageAzureV2 Managed disk details.
9324type InMageAzureV2ManagedDiskDetails struct {
9325	// DiskID - The disk id.
9326	DiskID *string `json:"diskId,omitempty"`
9327	// SeedManagedDiskID - Seed managed disk Id.
9328	SeedManagedDiskID *string `json:"seedManagedDiskId,omitempty"`
9329	// ReplicaDiskType - The replica disk type.
9330	ReplicaDiskType *string `json:"replicaDiskType,omitempty"`
9331}
9332
9333// InMageAzureV2PolicyDetails inMage Azure v2 specific protection profile details.
9334type InMageAzureV2PolicyDetails struct {
9335	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
9336	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
9337	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
9338	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
9339	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
9340	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
9341	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
9342	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
9343	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
9344	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
9345	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
9346	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
9347}
9348
9349// MarshalJSON is the custom marshaler for InMageAzureV2PolicyDetails.
9350func (imavpd InMageAzureV2PolicyDetails) MarshalJSON() ([]byte, error) {
9351	imavpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2
9352	objectMap := make(map[string]interface{})
9353	if imavpd.CrashConsistentFrequencyInMinutes != nil {
9354		objectMap["crashConsistentFrequencyInMinutes"] = imavpd.CrashConsistentFrequencyInMinutes
9355	}
9356	if imavpd.RecoveryPointThresholdInMinutes != nil {
9357		objectMap["recoveryPointThresholdInMinutes"] = imavpd.RecoveryPointThresholdInMinutes
9358	}
9359	if imavpd.RecoveryPointHistory != nil {
9360		objectMap["recoveryPointHistory"] = imavpd.RecoveryPointHistory
9361	}
9362	if imavpd.AppConsistentFrequencyInMinutes != nil {
9363		objectMap["appConsistentFrequencyInMinutes"] = imavpd.AppConsistentFrequencyInMinutes
9364	}
9365	if imavpd.MultiVMSyncStatus != nil {
9366		objectMap["multiVmSyncStatus"] = imavpd.MultiVMSyncStatus
9367	}
9368	if imavpd.InstanceType != "" {
9369		objectMap["instanceType"] = imavpd.InstanceType
9370	}
9371	return json.Marshal(objectMap)
9372}
9373
9374// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9375func (imavpd InMageAzureV2PolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
9376	return nil, false
9377}
9378
9379// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9380func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
9381	return nil, false
9382}
9383
9384// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9385func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
9386	return nil, false
9387}
9388
9389// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9390func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
9391	return nil, false
9392}
9393
9394// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9395func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
9396	return nil, false
9397}
9398
9399// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9400func (imavpd InMageAzureV2PolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
9401	return &imavpd, true
9402}
9403
9404// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9405func (imavpd InMageAzureV2PolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
9406	return nil, false
9407}
9408
9409// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9410func (imavpd InMageAzureV2PolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
9411	return nil, false
9412}
9413
9414// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9415func (imavpd InMageAzureV2PolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
9416	return nil, false
9417}
9418
9419// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9420func (imavpd InMageAzureV2PolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
9421	return nil, false
9422}
9423
9424// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9425func (imavpd InMageAzureV2PolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
9426	return nil, false
9427}
9428
9429// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9430func (imavpd InMageAzureV2PolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
9431	return nil, false
9432}
9433
9434// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9435func (imavpd InMageAzureV2PolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
9436	return &imavpd, true
9437}
9438
9439// InMageAzureV2PolicyInput vMWare Azure specific policy Input.
9440type InMageAzureV2PolicyInput struct {
9441	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
9442	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
9443	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
9444	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
9445	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
9446	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
9447	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
9448	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
9449	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
9450	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
9451	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
9452	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
9453}
9454
9455// MarshalJSON is the custom marshaler for InMageAzureV2PolicyInput.
9456func (imavpi InMageAzureV2PolicyInput) MarshalJSON() ([]byte, error) {
9457	imavpi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2
9458	objectMap := make(map[string]interface{})
9459	if imavpi.RecoveryPointThresholdInMinutes != nil {
9460		objectMap["recoveryPointThresholdInMinutes"] = imavpi.RecoveryPointThresholdInMinutes
9461	}
9462	if imavpi.RecoveryPointHistory != nil {
9463		objectMap["recoveryPointHistory"] = imavpi.RecoveryPointHistory
9464	}
9465	if imavpi.CrashConsistentFrequencyInMinutes != nil {
9466		objectMap["crashConsistentFrequencyInMinutes"] = imavpi.CrashConsistentFrequencyInMinutes
9467	}
9468	if imavpi.AppConsistentFrequencyInMinutes != nil {
9469		objectMap["appConsistentFrequencyInMinutes"] = imavpi.AppConsistentFrequencyInMinutes
9470	}
9471	if imavpi.MultiVMSyncStatus != "" {
9472		objectMap["multiVmSyncStatus"] = imavpi.MultiVMSyncStatus
9473	}
9474	if imavpi.InstanceType != "" {
9475		objectMap["instanceType"] = imavpi.InstanceType
9476	}
9477	return json.Marshal(objectMap)
9478}
9479
9480// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9481func (imavpi InMageAzureV2PolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
9482	return nil, false
9483}
9484
9485// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9486func (imavpi InMageAzureV2PolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
9487	return nil, false
9488}
9489
9490// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9491func (imavpi InMageAzureV2PolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
9492	return nil, false
9493}
9494
9495// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9496func (imavpi InMageAzureV2PolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
9497	return nil, false
9498}
9499
9500// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9501func (imavpi InMageAzureV2PolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
9502	return &imavpi, true
9503}
9504
9505// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9506func (imavpi InMageAzureV2PolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
9507	return nil, false
9508}
9509
9510// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9511func (imavpi InMageAzureV2PolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
9512	return nil, false
9513}
9514
9515// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9516func (imavpi InMageAzureV2PolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
9517	return nil, false
9518}
9519
9520// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9521func (imavpi InMageAzureV2PolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
9522	return nil, false
9523}
9524
9525// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9526func (imavpi InMageAzureV2PolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
9527	return &imavpi, true
9528}
9529
9530// InMageAzureV2ProtectedDiskDetails inMageAzureV2 protected disk details.
9531type InMageAzureV2ProtectedDiskDetails struct {
9532	// DiskID - The disk id.
9533	DiskID *string `json:"diskId,omitempty"`
9534	// DiskName - The disk name.
9535	DiskName *string `json:"diskName,omitempty"`
9536	// ProtectionStage - The protection stage.
9537	ProtectionStage *string `json:"protectionStage,omitempty"`
9538	// HealthErrorCode - The health error code for the disk.
9539	HealthErrorCode *string `json:"healthErrorCode,omitempty"`
9540	// RpoInSeconds - The RPO in seconds.
9541	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
9542	// ResyncRequired - A value indicating whether resync is required for this disk.
9543	ResyncRequired *string `json:"resyncRequired,omitempty"`
9544	// ResyncProgressPercentage - The resync progress percentage.
9545	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
9546	// ResyncDurationInSeconds - The resync duration in seconds.
9547	ResyncDurationInSeconds *int64 `json:"resyncDurationInSeconds,omitempty"`
9548	// DiskCapacityInBytes - The disk capacity in bytes.
9549	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
9550	// FileSystemCapacityInBytes - The disk file system capacity in bytes.
9551	FileSystemCapacityInBytes *int64 `json:"fileSystemCapacityInBytes,omitempty"`
9552	// SourceDataInMegaBytes - The source data transit in MB.
9553	SourceDataInMegaBytes *float64 `json:"sourceDataInMegaBytes,omitempty"`
9554	// PsDataInMegaBytes - The PS data transit in MB.
9555	PsDataInMegaBytes *float64 `json:"psDataInMegaBytes,omitempty"`
9556	// TargetDataInMegaBytes - The target data transit in MB.
9557	TargetDataInMegaBytes *float64 `json:"targetDataInMegaBytes,omitempty"`
9558	// DiskResized - A value indicating whether disk is resized.
9559	DiskResized *string `json:"diskResized,omitempty"`
9560	// LastRpoCalculatedTime - The last RPO calculated time.
9561	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
9562}
9563
9564// InMageAzureV2RecoveryPointDetails inMage Azure V2 provider specific recovery point details.
9565type InMageAzureV2RecoveryPointDetails struct {
9566	// IsMultiVMSyncPoint - A value indicating whether the recovery point is multi VM consistent.
9567	IsMultiVMSyncPoint *string `json:"isMultiVmSyncPoint,omitempty"`
9568	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
9569	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
9570}
9571
9572// MarshalJSON is the custom marshaler for InMageAzureV2RecoveryPointDetails.
9573func (imavrpd InMageAzureV2RecoveryPointDetails) MarshalJSON() ([]byte, error) {
9574	imavrpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2
9575	objectMap := make(map[string]interface{})
9576	if imavrpd.IsMultiVMSyncPoint != nil {
9577		objectMap["isMultiVmSyncPoint"] = imavrpd.IsMultiVMSyncPoint
9578	}
9579	if imavrpd.InstanceType != "" {
9580		objectMap["instanceType"] = imavrpd.InstanceType
9581	}
9582	return json.Marshal(objectMap)
9583}
9584
9585// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9586func (imavrpd InMageAzureV2RecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
9587	return nil, false
9588}
9589
9590// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9591func (imavrpd InMageAzureV2RecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
9592	return &imavrpd, true
9593}
9594
9595// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9596func (imavrpd InMageAzureV2RecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
9597	return nil, false
9598}
9599
9600// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9601func (imavrpd InMageAzureV2RecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
9602	return nil, false
9603}
9604
9605// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9606func (imavrpd InMageAzureV2RecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
9607	return &imavrpd, true
9608}
9609
9610// InMageAzureV2ReplicationDetails inMageAzureV2 provider specific settings
9611type InMageAzureV2ReplicationDetails struct {
9612	// InfrastructureVMID - The infrastructure VM Id.
9613	InfrastructureVMID *string `json:"infrastructureVmId,omitempty"`
9614	// VCenterInfrastructureID - The vCenter infrastructure Id.
9615	VCenterInfrastructureID *string `json:"vCenterInfrastructureId,omitempty"`
9616	// ProtectionStage - The protection stage.
9617	ProtectionStage *string `json:"protectionStage,omitempty"`
9618	// VMID - The virtual machine Id.
9619	VMID *string `json:"vmId,omitempty"`
9620	// VMProtectionState - The protection state for the vm.
9621	VMProtectionState *string `json:"vmProtectionState,omitempty"`
9622	// VMProtectionStateDescription - The protection state description for the vm.
9623	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
9624	// ResyncProgressPercentage - The resync progress percentage.
9625	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
9626	// RpoInSeconds - The RPO in seconds.
9627	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
9628	// CompressedDataRateInMB - The compressed data change rate in MB.
9629	CompressedDataRateInMB *float64 `json:"compressedDataRateInMB,omitempty"`
9630	// UncompressedDataRateInMB - The uncompressed data change rate in MB.
9631	UncompressedDataRateInMB *float64 `json:"uncompressedDataRateInMB,omitempty"`
9632	// IPAddress - The source IP address.
9633	IPAddress *string `json:"ipAddress,omitempty"`
9634	// AgentVersion - The agent version.
9635	AgentVersion *string `json:"agentVersion,omitempty"`
9636	// AgentExpiryDate - Agent expiry date.
9637	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
9638	// IsAgentUpdateRequired - A value indicating whether installed agent needs to be updated.
9639	IsAgentUpdateRequired *string `json:"isAgentUpdateRequired,omitempty"`
9640	// IsRebootAfterUpdateRequired - A value indicating whether the source server requires a restart after update.
9641	IsRebootAfterUpdateRequired *string `json:"isRebootAfterUpdateRequired,omitempty"`
9642	// LastHeartbeat - The last heartbeat received from the source server.
9643	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
9644	// ProcessServerID - The process server Id.
9645	ProcessServerID *string `json:"processServerId,omitempty"`
9646	// ProcessServerName - READ-ONLY; The process server name.
9647	ProcessServerName *string `json:"processServerName,omitempty"`
9648	// MultiVMGroupID - The multi vm group Id.
9649	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
9650	// MultiVMGroupName - The multi vm group name.
9651	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
9652	// MultiVMSyncStatus - A value indicating whether multi vm sync is enabled or disabled.
9653	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
9654	// ProtectedDisks - The list of protected disks.
9655	ProtectedDisks *[]InMageAzureV2ProtectedDiskDetails `json:"protectedDisks,omitempty"`
9656	// DiskResized - A value indicating whether any disk is resized for this VM.
9657	DiskResized *string `json:"diskResized,omitempty"`
9658	// MasterTargetID - The master target Id.
9659	MasterTargetID *string `json:"masterTargetId,omitempty"`
9660	// SourceVMCPUCount - The CPU count of the VM on the primary side.
9661	SourceVMCPUCount *int32 `json:"sourceVmCpuCount,omitempty"`
9662	// SourceVMRAMSizeInMB - The RAM size of the VM on the primary side.
9663	SourceVMRAMSizeInMB *int32 `json:"sourceVmRamSizeInMB,omitempty"`
9664	// OsType - The type of the OS on the VM.
9665	OsType *string `json:"osType,omitempty"`
9666	// VhdName - The OS disk VHD name.
9667	VhdName *string `json:"vhdName,omitempty"`
9668	// OsDiskID - The id of the disk containing the OS.
9669	OsDiskID *string `json:"osDiskId,omitempty"`
9670	// AzureVMDiskDetails - Azure VM Disk details.
9671	AzureVMDiskDetails *[]AzureVMDiskDetails `json:"azureVMDiskDetails,omitempty"`
9672	// RecoveryAzureVMName - Recovery Azure given name.
9673	RecoveryAzureVMName *string `json:"recoveryAzureVMName,omitempty"`
9674	// RecoveryAzureVMSize - The Recovery Azure VM size.
9675	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
9676	// RecoveryAzureStorageAccount - The recovery Azure storage account.
9677	RecoveryAzureStorageAccount *string `json:"recoveryAzureStorageAccount,omitempty"`
9678	// RecoveryAzureLogStorageAccountID - The ARM id of the log storage account used for replication. This will be set to null if no log storage account was provided during enable protection.
9679	RecoveryAzureLogStorageAccountID *string `json:"recoveryAzureLogStorageAccountId,omitempty"`
9680	// VMNics - The PE Network details.
9681	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
9682	// SelectedRecoveryAzureNetworkID - The selected recovery azure network Id.
9683	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
9684	// SelectedTfoAzureNetworkID - The test failover virtual network.
9685	SelectedTfoAzureNetworkID *string `json:"selectedTfoAzureNetworkId,omitempty"`
9686	// SelectedSourceNicID - The selected source nic Id which will be used as the primary nic during failover.
9687	SelectedSourceNicID *string `json:"selectedSourceNicId,omitempty"`
9688	// DiscoveryType - A value indicating the discovery type of the machine. Value can be vCenter or physical.
9689	DiscoveryType *string `json:"discoveryType,omitempty"`
9690	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
9691	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
9692	// Datastores - The data stores of the on-premise machine. Value can be list of strings that contain data store names.
9693	Datastores *[]string `json:"datastores,omitempty"`
9694	// TargetVMID - The ARM Id of the target Azure VM. This value will be null until the VM is failed over. Only after failure it will be populated with the ARM Id of the Azure VM.
9695	TargetVMID *string `json:"targetVmId,omitempty"`
9696	// RecoveryAzureResourceGroupID - The target resource group Id.
9697	RecoveryAzureResourceGroupID *string `json:"recoveryAzureResourceGroupId,omitempty"`
9698	// RecoveryAvailabilitySetID - The recovery availability set Id.
9699	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
9700	// TargetAvailabilityZone - The target availability zone.
9701	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
9702	// TargetProximityPlacementGroupID - The target proximity placement group Id.
9703	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
9704	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
9705	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
9706	// LicenseType - License Type of the VM to be used.
9707	LicenseType *string `json:"licenseType,omitempty"`
9708	// ValidationErrors - The validation errors of the on-premise machine Value can be list of validation errors.
9709	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
9710	// LastRpoCalculatedTime - The last RPO calculated time.
9711	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
9712	// LastUpdateReceivedTime - The last update time received from on-prem components.
9713	LastUpdateReceivedTime *date.Time `json:"lastUpdateReceivedTime,omitempty"`
9714	// ReplicaID - The replica id of the protected item.
9715	ReplicaID *string `json:"replicaId,omitempty"`
9716	// OsVersion - The OS Version of the protected item.
9717	OsVersion *string `json:"osVersion,omitempty"`
9718	// ProtectedManagedDisks - The list of protected managed disks.
9719	ProtectedManagedDisks *[]InMageAzureV2ManagedDiskDetails `json:"protectedManagedDisks,omitempty"`
9720	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
9721	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
9722}
9723
9724// MarshalJSON is the custom marshaler for InMageAzureV2ReplicationDetails.
9725func (imavrd InMageAzureV2ReplicationDetails) MarshalJSON() ([]byte, error) {
9726	imavrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2
9727	objectMap := make(map[string]interface{})
9728	if imavrd.InfrastructureVMID != nil {
9729		objectMap["infrastructureVmId"] = imavrd.InfrastructureVMID
9730	}
9731	if imavrd.VCenterInfrastructureID != nil {
9732		objectMap["vCenterInfrastructureId"] = imavrd.VCenterInfrastructureID
9733	}
9734	if imavrd.ProtectionStage != nil {
9735		objectMap["protectionStage"] = imavrd.ProtectionStage
9736	}
9737	if imavrd.VMID != nil {
9738		objectMap["vmId"] = imavrd.VMID
9739	}
9740	if imavrd.VMProtectionState != nil {
9741		objectMap["vmProtectionState"] = imavrd.VMProtectionState
9742	}
9743	if imavrd.VMProtectionStateDescription != nil {
9744		objectMap["vmProtectionStateDescription"] = imavrd.VMProtectionStateDescription
9745	}
9746	if imavrd.ResyncProgressPercentage != nil {
9747		objectMap["resyncProgressPercentage"] = imavrd.ResyncProgressPercentage
9748	}
9749	if imavrd.RpoInSeconds != nil {
9750		objectMap["rpoInSeconds"] = imavrd.RpoInSeconds
9751	}
9752	if imavrd.CompressedDataRateInMB != nil {
9753		objectMap["compressedDataRateInMB"] = imavrd.CompressedDataRateInMB
9754	}
9755	if imavrd.UncompressedDataRateInMB != nil {
9756		objectMap["uncompressedDataRateInMB"] = imavrd.UncompressedDataRateInMB
9757	}
9758	if imavrd.IPAddress != nil {
9759		objectMap["ipAddress"] = imavrd.IPAddress
9760	}
9761	if imavrd.AgentVersion != nil {
9762		objectMap["agentVersion"] = imavrd.AgentVersion
9763	}
9764	if imavrd.AgentExpiryDate != nil {
9765		objectMap["agentExpiryDate"] = imavrd.AgentExpiryDate
9766	}
9767	if imavrd.IsAgentUpdateRequired != nil {
9768		objectMap["isAgentUpdateRequired"] = imavrd.IsAgentUpdateRequired
9769	}
9770	if imavrd.IsRebootAfterUpdateRequired != nil {
9771		objectMap["isRebootAfterUpdateRequired"] = imavrd.IsRebootAfterUpdateRequired
9772	}
9773	if imavrd.LastHeartbeat != nil {
9774		objectMap["lastHeartbeat"] = imavrd.LastHeartbeat
9775	}
9776	if imavrd.ProcessServerID != nil {
9777		objectMap["processServerId"] = imavrd.ProcessServerID
9778	}
9779	if imavrd.MultiVMGroupID != nil {
9780		objectMap["multiVmGroupId"] = imavrd.MultiVMGroupID
9781	}
9782	if imavrd.MultiVMGroupName != nil {
9783		objectMap["multiVmGroupName"] = imavrd.MultiVMGroupName
9784	}
9785	if imavrd.MultiVMSyncStatus != nil {
9786		objectMap["multiVmSyncStatus"] = imavrd.MultiVMSyncStatus
9787	}
9788	if imavrd.ProtectedDisks != nil {
9789		objectMap["protectedDisks"] = imavrd.ProtectedDisks
9790	}
9791	if imavrd.DiskResized != nil {
9792		objectMap["diskResized"] = imavrd.DiskResized
9793	}
9794	if imavrd.MasterTargetID != nil {
9795		objectMap["masterTargetId"] = imavrd.MasterTargetID
9796	}
9797	if imavrd.SourceVMCPUCount != nil {
9798		objectMap["sourceVmCpuCount"] = imavrd.SourceVMCPUCount
9799	}
9800	if imavrd.SourceVMRAMSizeInMB != nil {
9801		objectMap["sourceVmRamSizeInMB"] = imavrd.SourceVMRAMSizeInMB
9802	}
9803	if imavrd.OsType != nil {
9804		objectMap["osType"] = imavrd.OsType
9805	}
9806	if imavrd.VhdName != nil {
9807		objectMap["vhdName"] = imavrd.VhdName
9808	}
9809	if imavrd.OsDiskID != nil {
9810		objectMap["osDiskId"] = imavrd.OsDiskID
9811	}
9812	if imavrd.AzureVMDiskDetails != nil {
9813		objectMap["azureVMDiskDetails"] = imavrd.AzureVMDiskDetails
9814	}
9815	if imavrd.RecoveryAzureVMName != nil {
9816		objectMap["recoveryAzureVMName"] = imavrd.RecoveryAzureVMName
9817	}
9818	if imavrd.RecoveryAzureVMSize != nil {
9819		objectMap["recoveryAzureVMSize"] = imavrd.RecoveryAzureVMSize
9820	}
9821	if imavrd.RecoveryAzureStorageAccount != nil {
9822		objectMap["recoveryAzureStorageAccount"] = imavrd.RecoveryAzureStorageAccount
9823	}
9824	if imavrd.RecoveryAzureLogStorageAccountID != nil {
9825		objectMap["recoveryAzureLogStorageAccountId"] = imavrd.RecoveryAzureLogStorageAccountID
9826	}
9827	if imavrd.VMNics != nil {
9828		objectMap["vmNics"] = imavrd.VMNics
9829	}
9830	if imavrd.SelectedRecoveryAzureNetworkID != nil {
9831		objectMap["selectedRecoveryAzureNetworkId"] = imavrd.SelectedRecoveryAzureNetworkID
9832	}
9833	if imavrd.SelectedTfoAzureNetworkID != nil {
9834		objectMap["selectedTfoAzureNetworkId"] = imavrd.SelectedTfoAzureNetworkID
9835	}
9836	if imavrd.SelectedSourceNicID != nil {
9837		objectMap["selectedSourceNicId"] = imavrd.SelectedSourceNicID
9838	}
9839	if imavrd.DiscoveryType != nil {
9840		objectMap["discoveryType"] = imavrd.DiscoveryType
9841	}
9842	if imavrd.EnableRdpOnTargetOption != nil {
9843		objectMap["enableRdpOnTargetOption"] = imavrd.EnableRdpOnTargetOption
9844	}
9845	if imavrd.Datastores != nil {
9846		objectMap["datastores"] = imavrd.Datastores
9847	}
9848	if imavrd.TargetVMID != nil {
9849		objectMap["targetVmId"] = imavrd.TargetVMID
9850	}
9851	if imavrd.RecoveryAzureResourceGroupID != nil {
9852		objectMap["recoveryAzureResourceGroupId"] = imavrd.RecoveryAzureResourceGroupID
9853	}
9854	if imavrd.RecoveryAvailabilitySetID != nil {
9855		objectMap["recoveryAvailabilitySetId"] = imavrd.RecoveryAvailabilitySetID
9856	}
9857	if imavrd.TargetAvailabilityZone != nil {
9858		objectMap["targetAvailabilityZone"] = imavrd.TargetAvailabilityZone
9859	}
9860	if imavrd.TargetProximityPlacementGroupID != nil {
9861		objectMap["targetProximityPlacementGroupId"] = imavrd.TargetProximityPlacementGroupID
9862	}
9863	if imavrd.UseManagedDisks != nil {
9864		objectMap["useManagedDisks"] = imavrd.UseManagedDisks
9865	}
9866	if imavrd.LicenseType != nil {
9867		objectMap["licenseType"] = imavrd.LicenseType
9868	}
9869	if imavrd.ValidationErrors != nil {
9870		objectMap["validationErrors"] = imavrd.ValidationErrors
9871	}
9872	if imavrd.LastRpoCalculatedTime != nil {
9873		objectMap["lastRpoCalculatedTime"] = imavrd.LastRpoCalculatedTime
9874	}
9875	if imavrd.LastUpdateReceivedTime != nil {
9876		objectMap["lastUpdateReceivedTime"] = imavrd.LastUpdateReceivedTime
9877	}
9878	if imavrd.ReplicaID != nil {
9879		objectMap["replicaId"] = imavrd.ReplicaID
9880	}
9881	if imavrd.OsVersion != nil {
9882		objectMap["osVersion"] = imavrd.OsVersion
9883	}
9884	if imavrd.ProtectedManagedDisks != nil {
9885		objectMap["protectedManagedDisks"] = imavrd.ProtectedManagedDisks
9886	}
9887	if imavrd.InstanceType != "" {
9888		objectMap["instanceType"] = imavrd.InstanceType
9889	}
9890	return json.Marshal(objectMap)
9891}
9892
9893// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9894func (imavrd InMageAzureV2ReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
9895	return nil, false
9896}
9897
9898// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9899func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
9900	return nil, false
9901}
9902
9903// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9904func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
9905	return nil, false
9906}
9907
9908// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9909func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
9910	return nil, false
9911}
9912
9913// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9914func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
9915	return nil, false
9916}
9917
9918// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9919func (imavrd InMageAzureV2ReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
9920	return &imavrd, true
9921}
9922
9923// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9924func (imavrd InMageAzureV2ReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
9925	return nil, false
9926}
9927
9928// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9929func (imavrd InMageAzureV2ReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
9930	return nil, false
9931}
9932
9933// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9934func (imavrd InMageAzureV2ReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
9935	return nil, false
9936}
9937
9938// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9939func (imavrd InMageAzureV2ReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
9940	return &imavrd, true
9941}
9942
9943// InMageAzureV2ReprotectInput inMageAzureV2 specific provider input.
9944type InMageAzureV2ReprotectInput struct {
9945	// MasterTargetID - The Master target Id.
9946	MasterTargetID *string `json:"masterTargetId,omitempty"`
9947	// ProcessServerID - The Process Server Id.
9948	ProcessServerID *string `json:"processServerId,omitempty"`
9949	// StorageAccountID - The storage account id.
9950	StorageAccountID *string `json:"storageAccountId,omitempty"`
9951	// RunAsAccountID - The CS account Id.
9952	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
9953	// PolicyID - The Policy Id.
9954	PolicyID *string `json:"policyId,omitempty"`
9955	// LogStorageAccountID - The storage account to be used for logging during replication.
9956	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
9957	// DisksToInclude - The disks to include list.
9958	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
9959	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
9960	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
9961}
9962
9963// MarshalJSON is the custom marshaler for InMageAzureV2ReprotectInput.
9964func (imavri InMageAzureV2ReprotectInput) MarshalJSON() ([]byte, error) {
9965	imavri.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2
9966	objectMap := make(map[string]interface{})
9967	if imavri.MasterTargetID != nil {
9968		objectMap["masterTargetId"] = imavri.MasterTargetID
9969	}
9970	if imavri.ProcessServerID != nil {
9971		objectMap["processServerId"] = imavri.ProcessServerID
9972	}
9973	if imavri.StorageAccountID != nil {
9974		objectMap["storageAccountId"] = imavri.StorageAccountID
9975	}
9976	if imavri.RunAsAccountID != nil {
9977		objectMap["runAsAccountId"] = imavri.RunAsAccountID
9978	}
9979	if imavri.PolicyID != nil {
9980		objectMap["policyId"] = imavri.PolicyID
9981	}
9982	if imavri.LogStorageAccountID != nil {
9983		objectMap["logStorageAccountId"] = imavri.LogStorageAccountID
9984	}
9985	if imavri.DisksToInclude != nil {
9986		objectMap["disksToInclude"] = imavri.DisksToInclude
9987	}
9988	if imavri.InstanceType != "" {
9989		objectMap["instanceType"] = imavri.InstanceType
9990	}
9991	return json.Marshal(objectMap)
9992}
9993
9994// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
9995func (imavri InMageAzureV2ReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
9996	return nil, false
9997}
9998
9999// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10000func (imavri InMageAzureV2ReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
10001	return nil, false
10002}
10003
10004// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10005func (imavri InMageAzureV2ReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
10006	return &imavri, true
10007}
10008
10009// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10010func (imavri InMageAzureV2ReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
10011	return nil, false
10012}
10013
10014// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10015func (imavri InMageAzureV2ReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
10016	return nil, false
10017}
10018
10019// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10020func (imavri InMageAzureV2ReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
10021	return &imavri, true
10022}
10023
10024// InMageAzureV2TestFailoverInput inMageAzureV2 provider specific input for test failover.
10025type InMageAzureV2TestFailoverInput struct {
10026	// VaultLocation - Location of the vault.
10027	VaultLocation *string `json:"vaultLocation,omitempty"`
10028	// RecoveryPointID - The recovery point id to be passed to test failover to a particular recovery point. In case of latest recovery point, null should be passed.
10029	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10030	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
10031	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
10032}
10033
10034// MarshalJSON is the custom marshaler for InMageAzureV2TestFailoverInput.
10035func (imavtfi InMageAzureV2TestFailoverInput) MarshalJSON() ([]byte, error) {
10036	imavtfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2
10037	objectMap := make(map[string]interface{})
10038	if imavtfi.VaultLocation != nil {
10039		objectMap["vaultLocation"] = imavtfi.VaultLocation
10040	}
10041	if imavtfi.RecoveryPointID != nil {
10042		objectMap["recoveryPointId"] = imavtfi.RecoveryPointID
10043	}
10044	if imavtfi.InstanceType != "" {
10045		objectMap["instanceType"] = imavtfi.InstanceType
10046	}
10047	return json.Marshal(objectMap)
10048}
10049
10050// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10051func (imavtfi InMageAzureV2TestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
10052	return nil, false
10053}
10054
10055// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10056func (imavtfi InMageAzureV2TestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
10057	return nil, false
10058}
10059
10060// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10061func (imavtfi InMageAzureV2TestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
10062	return &imavtfi, true
10063}
10064
10065// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10066func (imavtfi InMageAzureV2TestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
10067	return nil, false
10068}
10069
10070// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10071func (imavtfi InMageAzureV2TestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
10072	return nil, false
10073}
10074
10075// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10076func (imavtfi InMageAzureV2TestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
10077	return nil, false
10078}
10079
10080// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10081func (imavtfi InMageAzureV2TestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
10082	return &imavtfi, true
10083}
10084
10085// InMageAzureV2UnplannedFailoverInput inMageAzureV2 provider specific input for unplanned failover.
10086type InMageAzureV2UnplannedFailoverInput struct {
10087	// VaultLocation - Location of the vault.
10088	VaultLocation *string `json:"vaultLocation,omitempty"`
10089	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
10090	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10091	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
10092	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
10093}
10094
10095// MarshalJSON is the custom marshaler for InMageAzureV2UnplannedFailoverInput.
10096func (imavufi InMageAzureV2UnplannedFailoverInput) MarshalJSON() ([]byte, error) {
10097	imavufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2
10098	objectMap := make(map[string]interface{})
10099	if imavufi.VaultLocation != nil {
10100		objectMap["vaultLocation"] = imavufi.VaultLocation
10101	}
10102	if imavufi.RecoveryPointID != nil {
10103		objectMap["recoveryPointId"] = imavufi.RecoveryPointID
10104	}
10105	if imavufi.InstanceType != "" {
10106		objectMap["instanceType"] = imavufi.InstanceType
10107	}
10108	return json.Marshal(objectMap)
10109}
10110
10111// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10112func (imavufi InMageAzureV2UnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
10113	return nil, false
10114}
10115
10116// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10117func (imavufi InMageAzureV2UnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
10118	return nil, false
10119}
10120
10121// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10122func (imavufi InMageAzureV2UnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
10123	return &imavufi, true
10124}
10125
10126// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10127func (imavufi InMageAzureV2UnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
10128	return nil, false
10129}
10130
10131// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10132func (imavufi InMageAzureV2UnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
10133	return nil, false
10134}
10135
10136// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10137func (imavufi InMageAzureV2UnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
10138	return nil, false
10139}
10140
10141// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10142func (imavufi InMageAzureV2UnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
10143	return &imavufi, true
10144}
10145
10146// InMageAzureV2UpdateReplicationProtectedItemInput inMage Azure V2 input to update replication protected
10147// item.
10148type InMageAzureV2UpdateReplicationProtectedItemInput struct {
10149	// RecoveryAzureV1ResourceGroupID - The recovery Azure resource group Id for classic deployment.
10150	RecoveryAzureV1ResourceGroupID *string `json:"recoveryAzureV1ResourceGroupId,omitempty"`
10151	// RecoveryAzureV2ResourceGroupID - The recovery Azure resource group Id for resource manager deployment.
10152	RecoveryAzureV2ResourceGroupID *string `json:"recoveryAzureV2ResourceGroupId,omitempty"`
10153	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
10154	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
10155	// TargetProximityPlacementGroupID - The target proximity placement group Id.
10156	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
10157	// TargetAvailabilityZone - The target availability zone.
10158	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
10159	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
10160	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
10161}
10162
10163// MarshalJSON is the custom marshaler for InMageAzureV2UpdateReplicationProtectedItemInput.
10164func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
10165	imavurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2
10166	objectMap := make(map[string]interface{})
10167	if imavurpii.RecoveryAzureV1ResourceGroupID != nil {
10168		objectMap["recoveryAzureV1ResourceGroupId"] = imavurpii.RecoveryAzureV1ResourceGroupID
10169	}
10170	if imavurpii.RecoveryAzureV2ResourceGroupID != nil {
10171		objectMap["recoveryAzureV2ResourceGroupId"] = imavurpii.RecoveryAzureV2ResourceGroupID
10172	}
10173	if imavurpii.UseManagedDisks != nil {
10174		objectMap["useManagedDisks"] = imavurpii.UseManagedDisks
10175	}
10176	if imavurpii.TargetProximityPlacementGroupID != nil {
10177		objectMap["targetProximityPlacementGroupId"] = imavurpii.TargetProximityPlacementGroupID
10178	}
10179	if imavurpii.TargetAvailabilityZone != nil {
10180		objectMap["targetAvailabilityZone"] = imavurpii.TargetAvailabilityZone
10181	}
10182	if imavurpii.InstanceType != "" {
10183		objectMap["instanceType"] = imavurpii.InstanceType
10184	}
10185	return json.Marshal(objectMap)
10186}
10187
10188// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10189func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
10190	return nil, false
10191}
10192
10193// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10194func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
10195	return nil, false
10196}
10197
10198// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10199func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
10200	return &imavurpii, true
10201}
10202
10203// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10204func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
10205	return nil, false
10206}
10207
10208// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10209func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
10210	return nil, false
10211}
10212
10213// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10214func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
10215	return &imavurpii, true
10216}
10217
10218// InMageBasePolicyDetails base class for the policies of providers using InMage replication.
10219type InMageBasePolicyDetails struct {
10220	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
10221	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
10222	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
10223	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
10224	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
10225	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
10226	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
10227	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
10228	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
10229	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
10230}
10231
10232// MarshalJSON is the custom marshaler for InMageBasePolicyDetails.
10233func (imbpd InMageBasePolicyDetails) MarshalJSON() ([]byte, error) {
10234	imbpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails
10235	objectMap := make(map[string]interface{})
10236	if imbpd.RecoveryPointThresholdInMinutes != nil {
10237		objectMap["recoveryPointThresholdInMinutes"] = imbpd.RecoveryPointThresholdInMinutes
10238	}
10239	if imbpd.RecoveryPointHistory != nil {
10240		objectMap["recoveryPointHistory"] = imbpd.RecoveryPointHistory
10241	}
10242	if imbpd.AppConsistentFrequencyInMinutes != nil {
10243		objectMap["appConsistentFrequencyInMinutes"] = imbpd.AppConsistentFrequencyInMinutes
10244	}
10245	if imbpd.MultiVMSyncStatus != nil {
10246		objectMap["multiVmSyncStatus"] = imbpd.MultiVMSyncStatus
10247	}
10248	if imbpd.InstanceType != "" {
10249		objectMap["instanceType"] = imbpd.InstanceType
10250	}
10251	return json.Marshal(objectMap)
10252}
10253
10254// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10255func (imbpd InMageBasePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
10256	return nil, false
10257}
10258
10259// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10260func (imbpd InMageBasePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
10261	return nil, false
10262}
10263
10264// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10265func (imbpd InMageBasePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
10266	return nil, false
10267}
10268
10269// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10270func (imbpd InMageBasePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
10271	return nil, false
10272}
10273
10274// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10275func (imbpd InMageBasePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
10276	return nil, false
10277}
10278
10279// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10280func (imbpd InMageBasePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
10281	return nil, false
10282}
10283
10284// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10285func (imbpd InMageBasePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
10286	return &imbpd, true
10287}
10288
10289// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10290func (imbpd InMageBasePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
10291	return nil, false
10292}
10293
10294// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10295func (imbpd InMageBasePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
10296	return nil, false
10297}
10298
10299// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10300func (imbpd InMageBasePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
10301	return nil, false
10302}
10303
10304// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10305func (imbpd InMageBasePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
10306	return nil, false
10307}
10308
10309// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10310func (imbpd InMageBasePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
10311	return nil, false
10312}
10313
10314// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10315func (imbpd InMageBasePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
10316	return &imbpd, true
10317}
10318
10319// InMageDisableProtectionProviderSpecificInput inMage disable protection provider specific input.
10320type InMageDisableProtectionProviderSpecificInput struct {
10321	// ReplicaVMDeletionStatus - A value indicating whether the replica VM should be destroyed or retained. Values from Delete and Retain.
10322	ReplicaVMDeletionStatus *string `json:"replicaVmDeletionStatus,omitempty"`
10323	// InstanceType - Possible values include: 'InstanceTypeDisableProtectionProviderSpecificInput', 'InstanceTypeInMage'
10324	InstanceType InstanceTypeBasicDisableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
10325}
10326
10327// MarshalJSON is the custom marshaler for InMageDisableProtectionProviderSpecificInput.
10328func (imdppsi InMageDisableProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
10329	imdppsi.InstanceType = InstanceTypeInMage
10330	objectMap := make(map[string]interface{})
10331	if imdppsi.ReplicaVMDeletionStatus != nil {
10332		objectMap["replicaVmDeletionStatus"] = imdppsi.ReplicaVMDeletionStatus
10333	}
10334	if imdppsi.InstanceType != "" {
10335		objectMap["instanceType"] = imdppsi.InstanceType
10336	}
10337	return json.Marshal(objectMap)
10338}
10339
10340// AsInMageDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for InMageDisableProtectionProviderSpecificInput.
10341func (imdppsi InMageDisableProtectionProviderSpecificInput) AsInMageDisableProtectionProviderSpecificInput() (*InMageDisableProtectionProviderSpecificInput, bool) {
10342	return &imdppsi, true
10343}
10344
10345// AsDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for InMageDisableProtectionProviderSpecificInput.
10346func (imdppsi InMageDisableProtectionProviderSpecificInput) AsDisableProtectionProviderSpecificInput() (*DisableProtectionProviderSpecificInput, bool) {
10347	return nil, false
10348}
10349
10350// AsBasicDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for InMageDisableProtectionProviderSpecificInput.
10351func (imdppsi InMageDisableProtectionProviderSpecificInput) AsBasicDisableProtectionProviderSpecificInput() (BasicDisableProtectionProviderSpecificInput, bool) {
10352	return &imdppsi, true
10353}
10354
10355// InMageDiskDetails vMware/Physical specific Disk Details
10356type InMageDiskDetails struct {
10357	// DiskID - The disk Id.
10358	DiskID *string `json:"diskId,omitempty"`
10359	// DiskName - The disk name.
10360	DiskName *string `json:"diskName,omitempty"`
10361	// DiskSizeInMB - The disk size in MB.
10362	DiskSizeInMB *string `json:"diskSizeInMB,omitempty"`
10363	// DiskType - Whether disk is system disk or data disk.
10364	DiskType *string `json:"diskType,omitempty"`
10365	// DiskConfiguration - Whether disk is dynamic disk or basic disk.
10366	DiskConfiguration *string `json:"diskConfiguration,omitempty"`
10367	// VolumeList - Volumes of the disk.
10368	VolumeList *[]DiskVolumeDetails `json:"volumeList,omitempty"`
10369}
10370
10371// InMageDiskExclusionInput diskExclusionInput when doing enable protection of virtual machine in InMage
10372// provider.
10373type InMageDiskExclusionInput struct {
10374	// VolumeOptions - The volume label based option for disk exclusion.
10375	VolumeOptions *[]InMageVolumeExclusionOptions `json:"volumeOptions,omitempty"`
10376	// DiskSignatureOptions - The guest disk signature based option for disk exclusion.
10377	DiskSignatureOptions *[]InMageDiskSignatureExclusionOptions `json:"diskSignatureOptions,omitempty"`
10378}
10379
10380// InMageDiskSignatureExclusionOptions guest disk signature based disk exclusion option when doing enable
10381// protection of virtual machine in InMage provider.
10382type InMageDiskSignatureExclusionOptions struct {
10383	// DiskSignature - The guest signature of disk to be excluded from replication.
10384	DiskSignature *string `json:"diskSignature,omitempty"`
10385}
10386
10387// InMageEnableProtectionInput vMware Azure specific enable protection input.
10388type InMageEnableProtectionInput struct {
10389	// VMFriendlyName - The Vm Name.
10390	VMFriendlyName *string `json:"vmFriendlyName,omitempty"`
10391	// MasterTargetID - The Master Target Id.
10392	MasterTargetID *string `json:"masterTargetId,omitempty"`
10393	// ProcessServerID - The Process Server Id.
10394	ProcessServerID *string `json:"processServerId,omitempty"`
10395	// RetentionDrive - The retention drive to use on the MT.
10396	RetentionDrive *string `json:"retentionDrive,omitempty"`
10397	// RunAsAccountID - The CS account Id.
10398	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
10399	// MultiVMGroupID - The multi vm group Id.
10400	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
10401	// MultiVMGroupName - The multi vm group name.
10402	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
10403	// DatastoreName - The target data store name.
10404	DatastoreName *string `json:"datastoreName,omitempty"`
10405	// DiskExclusionInput - The enable disk exclusion input.
10406	DiskExclusionInput *InMageDiskExclusionInput `json:"diskExclusionInput,omitempty"`
10407	// DisksToInclude - The disks to include list.
10408	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
10409	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
10410	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
10411}
10412
10413// MarshalJSON is the custom marshaler for InMageEnableProtectionInput.
10414func (imepi InMageEnableProtectionInput) MarshalJSON() ([]byte, error) {
10415	imepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage
10416	objectMap := make(map[string]interface{})
10417	if imepi.VMFriendlyName != nil {
10418		objectMap["vmFriendlyName"] = imepi.VMFriendlyName
10419	}
10420	if imepi.MasterTargetID != nil {
10421		objectMap["masterTargetId"] = imepi.MasterTargetID
10422	}
10423	if imepi.ProcessServerID != nil {
10424		objectMap["processServerId"] = imepi.ProcessServerID
10425	}
10426	if imepi.RetentionDrive != nil {
10427		objectMap["retentionDrive"] = imepi.RetentionDrive
10428	}
10429	if imepi.RunAsAccountID != nil {
10430		objectMap["runAsAccountId"] = imepi.RunAsAccountID
10431	}
10432	if imepi.MultiVMGroupID != nil {
10433		objectMap["multiVmGroupId"] = imepi.MultiVMGroupID
10434	}
10435	if imepi.MultiVMGroupName != nil {
10436		objectMap["multiVmGroupName"] = imepi.MultiVMGroupName
10437	}
10438	if imepi.DatastoreName != nil {
10439		objectMap["datastoreName"] = imepi.DatastoreName
10440	}
10441	if imepi.DiskExclusionInput != nil {
10442		objectMap["diskExclusionInput"] = imepi.DiskExclusionInput
10443	}
10444	if imepi.DisksToInclude != nil {
10445		objectMap["disksToInclude"] = imepi.DisksToInclude
10446	}
10447	if imepi.InstanceType != "" {
10448		objectMap["instanceType"] = imepi.InstanceType
10449	}
10450	return json.Marshal(objectMap)
10451}
10452
10453// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10454func (imepi InMageEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
10455	return nil, false
10456}
10457
10458// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10459func (imepi InMageEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
10460	return nil, false
10461}
10462
10463// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10464func (imepi InMageEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
10465	return nil, false
10466}
10467
10468// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10469func (imepi InMageEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
10470	return &imepi, true
10471}
10472
10473// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10474func (imepi InMageEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
10475	return nil, false
10476}
10477
10478// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10479func (imepi InMageEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
10480	return nil, false
10481}
10482
10483// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10484func (imepi InMageEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
10485	return nil, false
10486}
10487
10488// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10489func (imepi InMageEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
10490	return &imepi, true
10491}
10492
10493// InMageFailoverProviderInput provider specific input for InMage failover.
10494type InMageFailoverProviderInput struct {
10495	// RecoveryPointType - The recovery point type. Values from LatestTime, LatestTag or Custom. In the case of custom, the recovery point provided by RecoveryPointId will be used. In the other two cases, recovery point id will be ignored. Possible values include: 'LatestTime', 'LatestTag', 'Custom'
10496	RecoveryPointType RecoveryPointType `json:"recoveryPointType,omitempty"`
10497	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
10498	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10499	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
10500	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
10501}
10502
10503// MarshalJSON is the custom marshaler for InMageFailoverProviderInput.
10504func (imfpi InMageFailoverProviderInput) MarshalJSON() ([]byte, error) {
10505	imfpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage
10506	objectMap := make(map[string]interface{})
10507	if imfpi.RecoveryPointType != "" {
10508		objectMap["recoveryPointType"] = imfpi.RecoveryPointType
10509	}
10510	if imfpi.RecoveryPointID != nil {
10511		objectMap["recoveryPointId"] = imfpi.RecoveryPointID
10512	}
10513	if imfpi.InstanceType != "" {
10514		objectMap["instanceType"] = imfpi.InstanceType
10515	}
10516	return json.Marshal(objectMap)
10517}
10518
10519// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10520func (imfpi InMageFailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
10521	return nil, false
10522}
10523
10524// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10525func (imfpi InMageFailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
10526	return nil, false
10527}
10528
10529// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10530func (imfpi InMageFailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
10531	return nil, false
10532}
10533
10534// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10535func (imfpi InMageFailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
10536	return nil, false
10537}
10538
10539// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10540func (imfpi InMageFailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
10541	return &imfpi, true
10542}
10543
10544// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10545func (imfpi InMageFailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
10546	return nil, false
10547}
10548
10549// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10550func (imfpi InMageFailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
10551	return &imfpi, true
10552}
10553
10554// InMagePolicyDetails inMage specific protection profile details.
10555type InMagePolicyDetails struct {
10556	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
10557	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
10558	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
10559	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
10560	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
10561	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
10562	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
10563	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
10564	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
10565	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
10566}
10567
10568// MarshalJSON is the custom marshaler for InMagePolicyDetails.
10569func (impd InMagePolicyDetails) MarshalJSON() ([]byte, error) {
10570	impd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage
10571	objectMap := make(map[string]interface{})
10572	if impd.RecoveryPointThresholdInMinutes != nil {
10573		objectMap["recoveryPointThresholdInMinutes"] = impd.RecoveryPointThresholdInMinutes
10574	}
10575	if impd.RecoveryPointHistory != nil {
10576		objectMap["recoveryPointHistory"] = impd.RecoveryPointHistory
10577	}
10578	if impd.AppConsistentFrequencyInMinutes != nil {
10579		objectMap["appConsistentFrequencyInMinutes"] = impd.AppConsistentFrequencyInMinutes
10580	}
10581	if impd.MultiVMSyncStatus != nil {
10582		objectMap["multiVmSyncStatus"] = impd.MultiVMSyncStatus
10583	}
10584	if impd.InstanceType != "" {
10585		objectMap["instanceType"] = impd.InstanceType
10586	}
10587	return json.Marshal(objectMap)
10588}
10589
10590// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10591func (impd InMagePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
10592	return nil, false
10593}
10594
10595// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10596func (impd InMagePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
10597	return nil, false
10598}
10599
10600// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10601func (impd InMagePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
10602	return nil, false
10603}
10604
10605// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10606func (impd InMagePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
10607	return nil, false
10608}
10609
10610// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10611func (impd InMagePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
10612	return nil, false
10613}
10614
10615// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10616func (impd InMagePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
10617	return nil, false
10618}
10619
10620// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10621func (impd InMagePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
10622	return nil, false
10623}
10624
10625// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10626func (impd InMagePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
10627	return &impd, true
10628}
10629
10630// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10631func (impd InMagePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
10632	return nil, false
10633}
10634
10635// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10636func (impd InMagePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
10637	return nil, false
10638}
10639
10640// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10641func (impd InMagePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
10642	return nil, false
10643}
10644
10645// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10646func (impd InMagePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
10647	return nil, false
10648}
10649
10650// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10651func (impd InMagePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
10652	return &impd, true
10653}
10654
10655// InMagePolicyInput vMWare Azure specific protection profile Input.
10656type InMagePolicyInput struct {
10657	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
10658	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
10659	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
10660	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
10661	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
10662	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
10663	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
10664	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
10665	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
10666	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
10667}
10668
10669// MarshalJSON is the custom marshaler for InMagePolicyInput.
10670func (impi InMagePolicyInput) MarshalJSON() ([]byte, error) {
10671	impi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage
10672	objectMap := make(map[string]interface{})
10673	if impi.RecoveryPointThresholdInMinutes != nil {
10674		objectMap["recoveryPointThresholdInMinutes"] = impi.RecoveryPointThresholdInMinutes
10675	}
10676	if impi.RecoveryPointHistory != nil {
10677		objectMap["recoveryPointHistory"] = impi.RecoveryPointHistory
10678	}
10679	if impi.AppConsistentFrequencyInMinutes != nil {
10680		objectMap["appConsistentFrequencyInMinutes"] = impi.AppConsistentFrequencyInMinutes
10681	}
10682	if impi.MultiVMSyncStatus != "" {
10683		objectMap["multiVmSyncStatus"] = impi.MultiVMSyncStatus
10684	}
10685	if impi.InstanceType != "" {
10686		objectMap["instanceType"] = impi.InstanceType
10687	}
10688	return json.Marshal(objectMap)
10689}
10690
10691// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10692func (impi InMagePolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
10693	return nil, false
10694}
10695
10696// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10697func (impi InMagePolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
10698	return nil, false
10699}
10700
10701// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10702func (impi InMagePolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
10703	return nil, false
10704}
10705
10706// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10707func (impi InMagePolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
10708	return nil, false
10709}
10710
10711// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10712func (impi InMagePolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
10713	return nil, false
10714}
10715
10716// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10717func (impi InMagePolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
10718	return &impi, true
10719}
10720
10721// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10722func (impi InMagePolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
10723	return nil, false
10724}
10725
10726// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10727func (impi InMagePolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
10728	return nil, false
10729}
10730
10731// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10732func (impi InMagePolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
10733	return nil, false
10734}
10735
10736// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10737func (impi InMagePolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
10738	return &impi, true
10739}
10740
10741// InMageProtectedDiskDetails inMage protected disk details.
10742type InMageProtectedDiskDetails struct {
10743	// DiskID - The disk id.
10744	DiskID *string `json:"diskId,omitempty"`
10745	// DiskName - The disk name.
10746	DiskName *string `json:"diskName,omitempty"`
10747	// ProtectionStage - The protection stage.
10748	ProtectionStage *string `json:"protectionStage,omitempty"`
10749	// HealthErrorCode - The health error code for the disk.
10750	HealthErrorCode *string `json:"healthErrorCode,omitempty"`
10751	// RpoInSeconds - The RPO in seconds.
10752	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
10753	// ResyncRequired - A value indicating whether resync is required for this disk.
10754	ResyncRequired *string `json:"resyncRequired,omitempty"`
10755	// ResyncProgressPercentage - The resync progress percentage.
10756	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
10757	// ResyncDurationInSeconds - The resync duration in seconds.
10758	ResyncDurationInSeconds *int64 `json:"resyncDurationInSeconds,omitempty"`
10759	// DiskCapacityInBytes - The disk capacity in bytes.
10760	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
10761	// FileSystemCapacityInBytes - The file system capacity in bytes.
10762	FileSystemCapacityInBytes *int64 `json:"fileSystemCapacityInBytes,omitempty"`
10763	// SourceDataInMB - The source data transit in MB.
10764	SourceDataInMB *float64 `json:"sourceDataInMB,omitempty"`
10765	// PsDataInMB - The PS data transit in MB.
10766	PsDataInMB *float64 `json:"psDataInMB,omitempty"`
10767	// TargetDataInMB - The target data transit in MB.
10768	TargetDataInMB *float64 `json:"targetDataInMB,omitempty"`
10769	// DiskResized - A value indicating whether disk is resized.
10770	DiskResized *string `json:"diskResized,omitempty"`
10771	// LastRpoCalculatedTime - The last RPO calculated time.
10772	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
10773}
10774
10775// InMageRcmAgentUpgradeBlockingErrorDetails inMageRcm source agent upgrade blocking error details.
10776type InMageRcmAgentUpgradeBlockingErrorDetails struct {
10777	// ErrorCode - READ-ONLY; The error code.
10778	ErrorCode *string `json:"errorCode,omitempty"`
10779	// ErrorMessage - READ-ONLY; The error message.
10780	ErrorMessage *string `json:"errorMessage,omitempty"`
10781	// PossibleCauses - READ-ONLY; The possible causes.
10782	PossibleCauses *string `json:"possibleCauses,omitempty"`
10783	// RecommendedAction - READ-ONLY; The recommended action.
10784	RecommendedAction *string `json:"recommendedAction,omitempty"`
10785	// ErrorMessageParameters - READ-ONLY; The error message parameters.
10786	ErrorMessageParameters map[string]*string `json:"errorMessageParameters"`
10787	// ErrorTags - READ-ONLY; The error tags.
10788	ErrorTags map[string]*string `json:"errorTags"`
10789}
10790
10791// MarshalJSON is the custom marshaler for InMageRcmAgentUpgradeBlockingErrorDetails.
10792func (imraubed InMageRcmAgentUpgradeBlockingErrorDetails) MarshalJSON() ([]byte, error) {
10793	objectMap := make(map[string]interface{})
10794	return json.Marshal(objectMap)
10795}
10796
10797// InMageRcmApplyRecoveryPointInput applyRecoveryPoint input specific to InMageRcm provider.
10798type InMageRcmApplyRecoveryPointInput struct {
10799	// RecoveryPointID - The recovery point Id.
10800	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10801	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
10802	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
10803}
10804
10805// MarshalJSON is the custom marshaler for InMageRcmApplyRecoveryPointInput.
10806func (imrarpi InMageRcmApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
10807	imrarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm
10808	objectMap := make(map[string]interface{})
10809	if imrarpi.RecoveryPointID != nil {
10810		objectMap["recoveryPointId"] = imrarpi.RecoveryPointID
10811	}
10812	if imrarpi.InstanceType != "" {
10813		objectMap["instanceType"] = imrarpi.InstanceType
10814	}
10815	return json.Marshal(objectMap)
10816}
10817
10818// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10819func (imrarpi InMageRcmApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
10820	return nil, false
10821}
10822
10823// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10824func (imrarpi InMageRcmApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
10825	return nil, false
10826}
10827
10828// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10829func (imrarpi InMageRcmApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
10830	return nil, false
10831}
10832
10833// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10834func (imrarpi InMageRcmApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
10835	return &imrarpi, true
10836}
10837
10838// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10839func (imrarpi InMageRcmApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
10840	return nil, false
10841}
10842
10843// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10844func (imrarpi InMageRcmApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
10845	return &imrarpi, true
10846}
10847
10848// InMageRcmDiskInput inMageRcm disk input.
10849type InMageRcmDiskInput struct {
10850	// DiskID - The disk Id.
10851	DiskID *string `json:"diskId,omitempty"`
10852	// LogStorageAccountID - The log storage account ARM Id.
10853	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
10854	// DiskType - The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
10855	DiskType DiskAccountType `json:"diskType,omitempty"`
10856	// DiskEncryptionSetID - The disk encryption set ARM Id.
10857	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
10858}
10859
10860// InMageRcmDisksDefaultInput inMageRcm disk input.
10861type InMageRcmDisksDefaultInput struct {
10862	// LogStorageAccountID - The log storage account ARM Id.
10863	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
10864	// DiskType - The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
10865	DiskType DiskAccountType `json:"diskType,omitempty"`
10866	// DiskEncryptionSetID - The disk encryption set ARM Id.
10867	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
10868}
10869
10870// InMageRcmEnableProtectionInput inMageRcm specific enable protection input.
10871type InMageRcmEnableProtectionInput struct {
10872	// FabricDiscoveryMachineID - The ARM Id of discovered machine.
10873	FabricDiscoveryMachineID *string `json:"fabricDiscoveryMachineId,omitempty"`
10874	// DisksToInclude - The disks to include list.
10875	DisksToInclude *[]InMageRcmDiskInput `json:"disksToInclude,omitempty"`
10876	// DisksDefault - The default disk input.
10877	DisksDefault *InMageRcmDisksDefaultInput `json:"disksDefault,omitempty"`
10878	// TargetResourceGroupID - The target resource group ARM Id.
10879	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
10880	// TargetNetworkID - The selected target network ARM Id.
10881	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
10882	// TestNetworkID - The selected test network ARM Id.
10883	TestNetworkID *string `json:"testNetworkId,omitempty"`
10884	// TargetSubnetName - The selected target subnet name.
10885	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
10886	// TestSubnetName - The selected test subnet name.
10887	TestSubnetName *string `json:"testSubnetName,omitempty"`
10888	// TargetVMName - The target VM name.
10889	TargetVMName *string `json:"targetVmName,omitempty"`
10890	// TargetVMSize - The target VM size.
10891	TargetVMSize *string `json:"targetVmSize,omitempty"`
10892	// LicenseType - The license type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
10893	LicenseType LicenseType `json:"licenseType,omitempty"`
10894	// TargetAvailabilitySetID - The target availability set ARM Id.
10895	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
10896	// TargetAvailabilityZone - The target availability zone.
10897	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
10898	// TargetProximityPlacementGroupID - The target proximity placement group Id.
10899	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
10900	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
10901	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
10902	// RunAsAccountID - The run-as account Id.
10903	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
10904	// ProcessServerID - The process server Id.
10905	ProcessServerID *string `json:"processServerId,omitempty"`
10906	// MultiVMGroupName - The multi VM group name.
10907	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
10908	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
10909	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
10910}
10911
10912// MarshalJSON is the custom marshaler for InMageRcmEnableProtectionInput.
10913func (imrepi InMageRcmEnableProtectionInput) MarshalJSON() ([]byte, error) {
10914	imrepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm
10915	objectMap := make(map[string]interface{})
10916	if imrepi.FabricDiscoveryMachineID != nil {
10917		objectMap["fabricDiscoveryMachineId"] = imrepi.FabricDiscoveryMachineID
10918	}
10919	if imrepi.DisksToInclude != nil {
10920		objectMap["disksToInclude"] = imrepi.DisksToInclude
10921	}
10922	if imrepi.DisksDefault != nil {
10923		objectMap["disksDefault"] = imrepi.DisksDefault
10924	}
10925	if imrepi.TargetResourceGroupID != nil {
10926		objectMap["targetResourceGroupId"] = imrepi.TargetResourceGroupID
10927	}
10928	if imrepi.TargetNetworkID != nil {
10929		objectMap["targetNetworkId"] = imrepi.TargetNetworkID
10930	}
10931	if imrepi.TestNetworkID != nil {
10932		objectMap["testNetworkId"] = imrepi.TestNetworkID
10933	}
10934	if imrepi.TargetSubnetName != nil {
10935		objectMap["targetSubnetName"] = imrepi.TargetSubnetName
10936	}
10937	if imrepi.TestSubnetName != nil {
10938		objectMap["testSubnetName"] = imrepi.TestSubnetName
10939	}
10940	if imrepi.TargetVMName != nil {
10941		objectMap["targetVmName"] = imrepi.TargetVMName
10942	}
10943	if imrepi.TargetVMSize != nil {
10944		objectMap["targetVmSize"] = imrepi.TargetVMSize
10945	}
10946	if imrepi.LicenseType != "" {
10947		objectMap["licenseType"] = imrepi.LicenseType
10948	}
10949	if imrepi.TargetAvailabilitySetID != nil {
10950		objectMap["targetAvailabilitySetId"] = imrepi.TargetAvailabilitySetID
10951	}
10952	if imrepi.TargetAvailabilityZone != nil {
10953		objectMap["targetAvailabilityZone"] = imrepi.TargetAvailabilityZone
10954	}
10955	if imrepi.TargetProximityPlacementGroupID != nil {
10956		objectMap["targetProximityPlacementGroupId"] = imrepi.TargetProximityPlacementGroupID
10957	}
10958	if imrepi.TargetBootDiagnosticsStorageAccountID != nil {
10959		objectMap["targetBootDiagnosticsStorageAccountId"] = imrepi.TargetBootDiagnosticsStorageAccountID
10960	}
10961	if imrepi.RunAsAccountID != nil {
10962		objectMap["runAsAccountId"] = imrepi.RunAsAccountID
10963	}
10964	if imrepi.ProcessServerID != nil {
10965		objectMap["processServerId"] = imrepi.ProcessServerID
10966	}
10967	if imrepi.MultiVMGroupName != nil {
10968		objectMap["multiVmGroupName"] = imrepi.MultiVMGroupName
10969	}
10970	if imrepi.InstanceType != "" {
10971		objectMap["instanceType"] = imrepi.InstanceType
10972	}
10973	return json.Marshal(objectMap)
10974}
10975
10976// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10977func (imrepi InMageRcmEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
10978	return nil, false
10979}
10980
10981// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10982func (imrepi InMageRcmEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
10983	return nil, false
10984}
10985
10986// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10987func (imrepi InMageRcmEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
10988	return nil, false
10989}
10990
10991// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10992func (imrepi InMageRcmEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
10993	return nil, false
10994}
10995
10996// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10997func (imrepi InMageRcmEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
10998	return &imrepi, true
10999}
11000
11001// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
11002func (imrepi InMageRcmEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
11003	return nil, false
11004}
11005
11006// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
11007func (imrepi InMageRcmEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
11008	return nil, false
11009}
11010
11011// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
11012func (imrepi InMageRcmEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
11013	return &imrepi, true
11014}
11015
11016// InMageRcmEventDetails event details for InMageRcm provider.
11017type InMageRcmEventDetails struct {
11018	// ProtectedItemName - READ-ONLY; The protected item name.
11019	ProtectedItemName *string `json:"protectedItemName,omitempty"`
11020	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
11021	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
11022}
11023
11024// MarshalJSON is the custom marshaler for InMageRcmEventDetails.
11025func (imred InMageRcmEventDetails) MarshalJSON() ([]byte, error) {
11026	imred.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm
11027	objectMap := make(map[string]interface{})
11028	if imred.InstanceType != "" {
11029		objectMap["instanceType"] = imred.InstanceType
11030	}
11031	return json.Marshal(objectMap)
11032}
11033
11034// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11035func (imred InMageRcmEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
11036	return nil, false
11037}
11038
11039// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11040func (imred InMageRcmEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
11041	return nil, false
11042}
11043
11044// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11045func (imred InMageRcmEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
11046	return nil, false
11047}
11048
11049// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11050func (imred InMageRcmEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
11051	return nil, false
11052}
11053
11054// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11055func (imred InMageRcmEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
11056	return nil, false
11057}
11058
11059// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11060func (imred InMageRcmEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
11061	return nil, false
11062}
11063
11064// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11065func (imred InMageRcmEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
11066	return &imred, true
11067}
11068
11069// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11070func (imred InMageRcmEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
11071	return nil, false
11072}
11073
11074// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11075func (imred InMageRcmEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
11076	return &imred, true
11077}
11078
11079// InMageRcmFabricCreationInput inMageRcm fabric provider specific settings.
11080type InMageRcmFabricCreationInput struct {
11081	// VmwareSiteID - The ARM Id of the VMware site.
11082	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
11083	// PhysicalSiteID - The ARM Id of the physical site.
11084	PhysicalSiteID *string `json:"physicalSiteId,omitempty"`
11085	// SourceAgentIdentity - The identity provider input for source agent authentication.
11086	SourceAgentIdentity *IdentityProviderInput `json:"sourceAgentIdentity,omitempty"`
11087	// AuthCertificate - The certificate to be used for AAD authentication.
11088	AuthCertificate *string `json:"authCertificate,omitempty"`
11089	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
11090	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
11091}
11092
11093// MarshalJSON is the custom marshaler for InMageRcmFabricCreationInput.
11094func (imrfci InMageRcmFabricCreationInput) MarshalJSON() ([]byte, error) {
11095	imrfci.InstanceType = InstanceTypeInMageRcm
11096	objectMap := make(map[string]interface{})
11097	if imrfci.VmwareSiteID != nil {
11098		objectMap["vmwareSiteId"] = imrfci.VmwareSiteID
11099	}
11100	if imrfci.PhysicalSiteID != nil {
11101		objectMap["physicalSiteId"] = imrfci.PhysicalSiteID
11102	}
11103	if imrfci.SourceAgentIdentity != nil {
11104		objectMap["sourceAgentIdentity"] = imrfci.SourceAgentIdentity
11105	}
11106	if imrfci.AuthCertificate != nil {
11107		objectMap["authCertificate"] = imrfci.AuthCertificate
11108	}
11109	if imrfci.InstanceType != "" {
11110		objectMap["instanceType"] = imrfci.InstanceType
11111	}
11112	return json.Marshal(objectMap)
11113}
11114
11115// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11116func (imrfci InMageRcmFabricCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
11117	return nil, false
11118}
11119
11120// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11121func (imrfci InMageRcmFabricCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
11122	return &imrfci, true
11123}
11124
11125// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11126func (imrfci InMageRcmFabricCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
11127	return nil, false
11128}
11129
11130// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11131func (imrfci InMageRcmFabricCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
11132	return nil, false
11133}
11134
11135// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11136func (imrfci InMageRcmFabricCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
11137	return &imrfci, true
11138}
11139
11140// InMageRcmFabricSpecificDetails inMageRcm fabric specific details.
11141type InMageRcmFabricSpecificDetails struct {
11142	// VmwareSiteID - READ-ONLY; The ARM Id of the VMware site.
11143	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
11144	// PhysicalSiteID - READ-ONLY; The ARM Id of the physical site.
11145	PhysicalSiteID *string `json:"physicalSiteId,omitempty"`
11146	// ServiceEndpoint - READ-ONLY; The service endpoint.
11147	ServiceEndpoint *string `json:"serviceEndpoint,omitempty"`
11148	// ServiceResourceID - READ-ONLY; The service resource Id.
11149	ServiceResourceID *string `json:"serviceResourceId,omitempty"`
11150	// ServiceContainerID - READ-ONLY; The service container Id.
11151	ServiceContainerID *string `json:"serviceContainerId,omitempty"`
11152	// DataPlaneURI - READ-ONLY; The data plane Uri.
11153	DataPlaneURI *string `json:"dataPlaneUri,omitempty"`
11154	// ControlPlaneURI - READ-ONLY; The control plane Uri.
11155	ControlPlaneURI *string `json:"controlPlaneUri,omitempty"`
11156	// ProcessServers - READ-ONLY; The list of process servers.
11157	ProcessServers *[]ProcessServerDetails `json:"processServers,omitempty"`
11158	// RcmProxies - READ-ONLY; The list of RCM proxies.
11159	RcmProxies *[]RcmProxyDetails `json:"rcmProxies,omitempty"`
11160	// PushInstallers - READ-ONLY; The list of push installers.
11161	PushInstallers *[]PushInstallerDetails `json:"pushInstallers,omitempty"`
11162	// ReplicationAgents - READ-ONLY; The list of replication agents.
11163	ReplicationAgents *[]ReplicationAgentDetails `json:"replicationAgents,omitempty"`
11164	// ReprotectAgents - READ-ONLY; The list of reprotect agents.
11165	ReprotectAgents *[]ReprotectAgentDetails `json:"reprotectAgents,omitempty"`
11166	// Dras - READ-ONLY; The list of DRAs.
11167	Dras *[]DraDetails `json:"dras,omitempty"`
11168	// AgentDetails - READ-ONLY; The list of agent details.
11169	AgentDetails *[]AgentDetails `json:"agentDetails,omitempty"`
11170	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
11171	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
11172}
11173
11174// MarshalJSON is the custom marshaler for InMageRcmFabricSpecificDetails.
11175func (imrfsd InMageRcmFabricSpecificDetails) MarshalJSON() ([]byte, error) {
11176	imrfsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm
11177	objectMap := make(map[string]interface{})
11178	if imrfsd.InstanceType != "" {
11179		objectMap["instanceType"] = imrfsd.InstanceType
11180	}
11181	return json.Marshal(objectMap)
11182}
11183
11184// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11185func (imrfsd InMageRcmFabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
11186	return nil, false
11187}
11188
11189// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11190func (imrfsd InMageRcmFabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
11191	return nil, false
11192}
11193
11194// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11195func (imrfsd InMageRcmFabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
11196	return &imrfsd, true
11197}
11198
11199// AsVmmDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11200func (imrfsd InMageRcmFabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
11201	return nil, false
11202}
11203
11204// AsVMwareDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11205func (imrfsd InMageRcmFabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
11206	return nil, false
11207}
11208
11209// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11210func (imrfsd InMageRcmFabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
11211	return nil, false
11212}
11213
11214// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11215func (imrfsd InMageRcmFabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
11216	return nil, false
11217}
11218
11219// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11220func (imrfsd InMageRcmFabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
11221	return &imrfsd, true
11222}
11223
11224// InMageRcmLastAgentUpgradeErrorDetails inMageRcm last source agent upgrade error details.
11225type InMageRcmLastAgentUpgradeErrorDetails struct {
11226	// ErrorCode - READ-ONLY; The error code.
11227	ErrorCode *string `json:"errorCode,omitempty"`
11228	// ErrorMessage - READ-ONLY; The error message.
11229	ErrorMessage *string `json:"errorMessage,omitempty"`
11230	// PossibleCauses - READ-ONLY; The possible causes.
11231	PossibleCauses *string `json:"possibleCauses,omitempty"`
11232	// RecommendedAction - READ-ONLY; The recommended action.
11233	RecommendedAction *string `json:"recommendedAction,omitempty"`
11234	// ErrorMessageParameters - READ-ONLY; The error message parameters.
11235	ErrorMessageParameters map[string]*string `json:"errorMessageParameters"`
11236	// ErrorTags - READ-ONLY; The error tags.
11237	ErrorTags map[string]*string `json:"errorTags"`
11238}
11239
11240// MarshalJSON is the custom marshaler for InMageRcmLastAgentUpgradeErrorDetails.
11241func (imrlaued InMageRcmLastAgentUpgradeErrorDetails) MarshalJSON() ([]byte, error) {
11242	objectMap := make(map[string]interface{})
11243	return json.Marshal(objectMap)
11244}
11245
11246// InMageRcmMobilityAgentDetails inMageRcm mobility agent details.
11247type InMageRcmMobilityAgentDetails struct {
11248	// Version - READ-ONLY; The agent version.
11249	Version *string `json:"version,omitempty"`
11250	// LatestVersion - READ-ONLY; The latest agent version available.
11251	LatestVersion *string `json:"latestVersion,omitempty"`
11252	// DriverVersion - READ-ONLY; The driver version.
11253	DriverVersion *string `json:"driverVersion,omitempty"`
11254	// LatestUpgradableVersionWithoutReboot - READ-ONLY; The latest upgradeable version available without reboot.
11255	LatestUpgradableVersionWithoutReboot *string `json:"latestUpgradableVersionWithoutReboot,omitempty"`
11256	// AgentVersionExpiryDate - READ-ONLY; The agent version expiry date.
11257	AgentVersionExpiryDate *date.Time `json:"agentVersionExpiryDate,omitempty"`
11258	// DriverVersionExpiryDate - READ-ONLY; The driver version expiry date.
11259	DriverVersionExpiryDate *date.Time `json:"driverVersionExpiryDate,omitempty"`
11260	// LastHeartbeatUtc - READ-ONLY; The time of the last heartbeat received from the agent.
11261	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
11262	// ReasonsBlockingUpgrade - READ-ONLY; The whether update is possible or not.
11263	ReasonsBlockingUpgrade *[]AgentUpgradeBlockedReason `json:"reasonsBlockingUpgrade,omitempty"`
11264	// IsUpgradeable - READ-ONLY; A value indicating whether agent is upgradeable or not.
11265	IsUpgradeable *string `json:"isUpgradeable,omitempty"`
11266}
11267
11268// MarshalJSON is the custom marshaler for InMageRcmMobilityAgentDetails.
11269func (imrmad InMageRcmMobilityAgentDetails) MarshalJSON() ([]byte, error) {
11270	objectMap := make(map[string]interface{})
11271	return json.Marshal(objectMap)
11272}
11273
11274// InMageRcmNicDetails inMageRcm NIC details.
11275type InMageRcmNicDetails struct {
11276	// NicID - READ-ONLY; The NIC Id.
11277	NicID *string `json:"nicId,omitempty"`
11278	// IsPrimaryNic - READ-ONLY; A value indicating whether this is the primary NIC.
11279	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
11280	// IsSelectedForFailover - READ-ONLY; A value indicating whether this NIC is selected for failover.
11281	IsSelectedForFailover *string `json:"isSelectedForFailover,omitempty"`
11282	// SourceIPAddress - READ-ONLY; The source IP address.
11283	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
11284	// SourceIPAddressType - READ-ONLY; The source IP address type. Possible values include: 'Dynamic', 'Static'
11285	SourceIPAddressType EthernetAddressType `json:"sourceIPAddressType,omitempty"`
11286	// SourceNetworkID - READ-ONLY; Source network Id.
11287	SourceNetworkID *string `json:"sourceNetworkId,omitempty"`
11288	// SourceSubnetName - READ-ONLY; Source subnet name.
11289	SourceSubnetName *string `json:"sourceSubnetName,omitempty"`
11290	// TargetIPAddress - READ-ONLY; The target IP address.
11291	TargetIPAddress *string `json:"targetIPAddress,omitempty"`
11292	// TargetIPAddressType - READ-ONLY; The target IP address type. Possible values include: 'Dynamic', 'Static'
11293	TargetIPAddressType EthernetAddressType `json:"targetIPAddressType,omitempty"`
11294	// TargetSubnetName - READ-ONLY; Target subnet name.
11295	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
11296	// TestSubnetName - READ-ONLY; Test subnet name.
11297	TestSubnetName *string `json:"testSubnetName,omitempty"`
11298	// TestIPAddress - READ-ONLY; The test IP address.
11299	TestIPAddress *string `json:"testIPAddress,omitempty"`
11300	// TestIPAddressType - READ-ONLY; The test IP address type. Possible values include: 'Dynamic', 'Static'
11301	TestIPAddressType EthernetAddressType `json:"testIPAddressType,omitempty"`
11302}
11303
11304// MarshalJSON is the custom marshaler for InMageRcmNicDetails.
11305func (imrnd InMageRcmNicDetails) MarshalJSON() ([]byte, error) {
11306	objectMap := make(map[string]interface{})
11307	return json.Marshal(objectMap)
11308}
11309
11310// InMageRcmNicInput inMageRcm NIC input.
11311type InMageRcmNicInput struct {
11312	// NicID - The NIC Id.
11313	NicID *string `json:"nicId,omitempty"`
11314	// IsPrimaryNic - A value indicating whether this is the primary NIC.
11315	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
11316	// IsSelectedForFailover - A value indicating whether this NIC is selected for failover.
11317	IsSelectedForFailover *string `json:"isSelectedForFailover,omitempty"`
11318	// TargetSubnetName - Target subnet name.
11319	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
11320	// TargetStaticIPAddress - The target static IP address.
11321	TargetStaticIPAddress *string `json:"targetStaticIPAddress,omitempty"`
11322	// TestSubnetName - The test subnet name.
11323	TestSubnetName *string `json:"testSubnetName,omitempty"`
11324	// TestStaticIPAddress - The test static IP address.
11325	TestStaticIPAddress *string `json:"testStaticIPAddress,omitempty"`
11326}
11327
11328// InMageRcmPolicyCreationInput inMageRcm policy creation input.
11329type InMageRcmPolicyCreationInput struct {
11330	// RecoveryPointHistoryInMinutes - The duration in minutes until which the recovery points need to be stored.
11331	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
11332	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
11333	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
11334	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
11335	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
11336	// EnableMultiVMSync - A value indicating whether multi-VM sync has to be enabled.
11337	EnableMultiVMSync *string `json:"enableMultiVmSync,omitempty"`
11338	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
11339	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
11340}
11341
11342// MarshalJSON is the custom marshaler for InMageRcmPolicyCreationInput.
11343func (imrpci InMageRcmPolicyCreationInput) MarshalJSON() ([]byte, error) {
11344	imrpci.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm
11345	objectMap := make(map[string]interface{})
11346	if imrpci.RecoveryPointHistoryInMinutes != nil {
11347		objectMap["recoveryPointHistoryInMinutes"] = imrpci.RecoveryPointHistoryInMinutes
11348	}
11349	if imrpci.CrashConsistentFrequencyInMinutes != nil {
11350		objectMap["crashConsistentFrequencyInMinutes"] = imrpci.CrashConsistentFrequencyInMinutes
11351	}
11352	if imrpci.AppConsistentFrequencyInMinutes != nil {
11353		objectMap["appConsistentFrequencyInMinutes"] = imrpci.AppConsistentFrequencyInMinutes
11354	}
11355	if imrpci.EnableMultiVMSync != nil {
11356		objectMap["enableMultiVmSync"] = imrpci.EnableMultiVMSync
11357	}
11358	if imrpci.InstanceType != "" {
11359		objectMap["instanceType"] = imrpci.InstanceType
11360	}
11361	return json.Marshal(objectMap)
11362}
11363
11364// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11365func (imrpci InMageRcmPolicyCreationInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
11366	return nil, false
11367}
11368
11369// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11370func (imrpci InMageRcmPolicyCreationInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
11371	return nil, false
11372}
11373
11374// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11375func (imrpci InMageRcmPolicyCreationInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
11376	return nil, false
11377}
11378
11379// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11380func (imrpci InMageRcmPolicyCreationInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
11381	return nil, false
11382}
11383
11384// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11385func (imrpci InMageRcmPolicyCreationInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
11386	return nil, false
11387}
11388
11389// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11390func (imrpci InMageRcmPolicyCreationInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
11391	return nil, false
11392}
11393
11394// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11395func (imrpci InMageRcmPolicyCreationInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
11396	return &imrpci, true
11397}
11398
11399// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11400func (imrpci InMageRcmPolicyCreationInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
11401	return nil, false
11402}
11403
11404// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11405func (imrpci InMageRcmPolicyCreationInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
11406	return nil, false
11407}
11408
11409// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11410func (imrpci InMageRcmPolicyCreationInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
11411	return &imrpci, true
11412}
11413
11414// InMageRcmPolicyDetails inMageRcm specific policy details.
11415type InMageRcmPolicyDetails struct {
11416	// RecoveryPointHistoryInMinutes - READ-ONLY; The duration in minutes until which the recovery points need to be stored.
11417	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
11418	// AppConsistentFrequencyInMinutes - READ-ONLY; The app consistent snapshot frequency in minutes.
11419	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
11420	// CrashConsistentFrequencyInMinutes - READ-ONLY; The crash consistent snapshot frequency in minutes.
11421	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
11422	// EnableMultiVMSync - READ-ONLY; A value indicating whether multi-VM sync has to be enabled.
11423	EnableMultiVMSync *string `json:"enableMultiVmSync,omitempty"`
11424	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
11425	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
11426}
11427
11428// MarshalJSON is the custom marshaler for InMageRcmPolicyDetails.
11429func (imrpd InMageRcmPolicyDetails) MarshalJSON() ([]byte, error) {
11430	imrpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm
11431	objectMap := make(map[string]interface{})
11432	if imrpd.InstanceType != "" {
11433		objectMap["instanceType"] = imrpd.InstanceType
11434	}
11435	return json.Marshal(objectMap)
11436}
11437
11438// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11439func (imrpd InMageRcmPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
11440	return nil, false
11441}
11442
11443// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11444func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
11445	return nil, false
11446}
11447
11448// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11449func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
11450	return nil, false
11451}
11452
11453// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11454func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
11455	return nil, false
11456}
11457
11458// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11459func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
11460	return nil, false
11461}
11462
11463// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11464func (imrpd InMageRcmPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
11465	return nil, false
11466}
11467
11468// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11469func (imrpd InMageRcmPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
11470	return nil, false
11471}
11472
11473// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11474func (imrpd InMageRcmPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
11475	return nil, false
11476}
11477
11478// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11479func (imrpd InMageRcmPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
11480	return &imrpd, true
11481}
11482
11483// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11484func (imrpd InMageRcmPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
11485	return nil, false
11486}
11487
11488// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11489func (imrpd InMageRcmPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
11490	return nil, false
11491}
11492
11493// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11494func (imrpd InMageRcmPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
11495	return nil, false
11496}
11497
11498// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11499func (imrpd InMageRcmPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
11500	return &imrpd, true
11501}
11502
11503// InMageRcmProtectedDiskDetails inMageRcm protected disk details.
11504type InMageRcmProtectedDiskDetails struct {
11505	// DiskID - READ-ONLY; The disk Id.
11506	DiskID *string `json:"diskId,omitempty"`
11507	// DiskName - READ-ONLY; The disk name.
11508	DiskName *string `json:"diskName,omitempty"`
11509	// IsOSDisk - READ-ONLY; A value indicating whether the disk is the OS disk.
11510	IsOSDisk *string `json:"isOSDisk,omitempty"`
11511	// CapacityInBytes - READ-ONLY; The disk capacity in bytes.
11512	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
11513	// LogStorageAccountID - READ-ONLY; The log storage account ARM Id.
11514	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
11515	// DiskEncryptionSetID - READ-ONLY; The disk encryption set ARM Id.
11516	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
11517	// SeedManagedDiskID - READ-ONLY; The ARM Id of the seed managed disk.
11518	SeedManagedDiskID *string `json:"seedManagedDiskId,omitempty"`
11519	// TargetManagedDiskID - READ-ONLY; The ARM Id of the target managed disk.
11520	TargetManagedDiskID *string `json:"targetManagedDiskId,omitempty"`
11521	// DiskType - READ-ONLY; The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
11522	DiskType DiskAccountType `json:"diskType,omitempty"`
11523}
11524
11525// MarshalJSON is the custom marshaler for InMageRcmProtectedDiskDetails.
11526func (imrpdd InMageRcmProtectedDiskDetails) MarshalJSON() ([]byte, error) {
11527	objectMap := make(map[string]interface{})
11528	return json.Marshal(objectMap)
11529}
11530
11531// InMageRcmRecoveryPointDetails inMageRcm provider specific recovery point details.
11532type InMageRcmRecoveryPointDetails struct {
11533	// IsMultiVMSyncPoint - READ-ONLY; A value indicating whether the recovery point is multi VM consistent.
11534	IsMultiVMSyncPoint *string `json:"isMultiVmSyncPoint,omitempty"`
11535	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
11536	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
11537}
11538
11539// MarshalJSON is the custom marshaler for InMageRcmRecoveryPointDetails.
11540func (imrrpd InMageRcmRecoveryPointDetails) MarshalJSON() ([]byte, error) {
11541	imrrpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm
11542	objectMap := make(map[string]interface{})
11543	if imrrpd.InstanceType != "" {
11544		objectMap["instanceType"] = imrrpd.InstanceType
11545	}
11546	return json.Marshal(objectMap)
11547}
11548
11549// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11550func (imrrpd InMageRcmRecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
11551	return nil, false
11552}
11553
11554// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11555func (imrrpd InMageRcmRecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
11556	return nil, false
11557}
11558
11559// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11560func (imrrpd InMageRcmRecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
11561	return &imrrpd, true
11562}
11563
11564// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11565func (imrrpd InMageRcmRecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
11566	return nil, false
11567}
11568
11569// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11570func (imrrpd InMageRcmRecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
11571	return &imrrpd, true
11572}
11573
11574// InMageRcmReplicationDetails inMageRcm provider specific details.
11575type InMageRcmReplicationDetails struct {
11576	// InternalIdentifier - READ-ONLY; The virtual machine internal identifier.
11577	InternalIdentifier *string `json:"internalIdentifier,omitempty"`
11578	// FabricDiscoveryMachineID - READ-ONLY; The ARM Id of the discovered VM.
11579	FabricDiscoveryMachineID *string `json:"fabricDiscoveryMachineId,omitempty"`
11580	// MultiVMGroupName - READ-ONLY; The multi VM group name.
11581	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
11582	// DiscoveryType - READ-ONLY; The type of the discovered VM.
11583	DiscoveryType *string `json:"discoveryType,omitempty"`
11584	// ProcessServerID - READ-ONLY; The process server Id.
11585	ProcessServerID *string `json:"processServerId,omitempty"`
11586	// ProcessorCoreCount - READ-ONLY; The processor core count.
11587	ProcessorCoreCount *int32 `json:"processorCoreCount,omitempty"`
11588	// AllocatedMemoryInMB - READ-ONLY; The allocated memory in MB.
11589	AllocatedMemoryInMB *float64 `json:"allocatedMemoryInMB,omitempty"`
11590	// ProcessServerName - READ-ONLY; The process server name.
11591	ProcessServerName *string `json:"processServerName,omitempty"`
11592	// RunAsAccountID - READ-ONLY; The run-as account Id.
11593	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
11594	// OsType - READ-ONLY; The type of the OS on the VM.
11595	OsType *string `json:"osType,omitempty"`
11596	// FirmwareType - READ-ONLY; The firmware type.
11597	FirmwareType *string `json:"firmwareType,omitempty"`
11598	// TargetGeneration - READ-ONLY; The target generation.
11599	TargetGeneration *string `json:"targetGeneration,omitempty"`
11600	// LicenseType - READ-ONLY; License Type of the VM to be used.
11601	LicenseType *string `json:"licenseType,omitempty"`
11602	// TargetVMName - READ-ONLY; Target VM name.
11603	TargetVMName *string `json:"targetVmName,omitempty"`
11604	// TargetVMSize - READ-ONLY; The target VM size.
11605	TargetVMSize *string `json:"targetVmSize,omitempty"`
11606	// TargetResourceGroupID - READ-ONLY; The target resource group Id.
11607	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
11608	// TargetAvailabilitySetID - READ-ONLY; The target availability set Id.
11609	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
11610	// TargetAvailabilityZone - READ-ONLY; The target availability zone.
11611	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
11612	// TargetProximityPlacementGroupID - READ-ONLY; The target proximity placement group Id.
11613	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
11614	// TargetBootDiagnosticsStorageAccountID - READ-ONLY; The target boot diagnostics storage account ARM Id.
11615	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
11616	// TargetNetworkID - READ-ONLY; The target network Id.
11617	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
11618	// TestNetworkID - READ-ONLY; The test network Id.
11619	TestNetworkID *string `json:"testNetworkId,omitempty"`
11620	// FailoverRecoveryPointID - READ-ONLY; The recovery point Id to which the VM was failed over.
11621	FailoverRecoveryPointID *string `json:"failoverRecoveryPointId,omitempty"`
11622	// LastRecoveryPointReceived - READ-ONLY; The last recovery point received time.
11623	LastRecoveryPointReceived *date.Time `json:"lastRecoveryPointReceived,omitempty"`
11624	// LastRpoInSeconds - READ-ONLY; The last recovery point objective value.
11625	LastRpoInSeconds *int64 `json:"lastRpoInSeconds,omitempty"`
11626	// LastRpoCalculatedTime - READ-ONLY; The last recovery point objective calculated time.
11627	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
11628	// LastRecoveryPointID - READ-ONLY; The last recovery point Id.
11629	LastRecoveryPointID *string `json:"lastRecoveryPointId,omitempty"`
11630	// InitialReplicationProgressPercentage - READ-ONLY; The initial replication progress percentage. This is calculated based on total bytes processed for all disks in the source VM.
11631	InitialReplicationProgressPercentage *int32 `json:"initialReplicationProgressPercentage,omitempty"`
11632	// InitialReplicationProcessedBytes - READ-ONLY; The initial replication processed bytes. This includes sum of total bytes transferred and matched bytes on all selected disks in source VM.
11633	InitialReplicationProcessedBytes *int64 `json:"initialReplicationProcessedBytes,omitempty"`
11634	// InitialReplicationTransferredBytes - READ-ONLY; The initial replication transferred bytes from source VM to azure for all selected disks on source VM.
11635	InitialReplicationTransferredBytes *int64 `json:"initialReplicationTransferredBytes,omitempty"`
11636	// ResyncProgressPercentage - READ-ONLY; The resync progress percentage. This is calculated based on total bytes processed for all disks in the source VM.
11637	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
11638	// ResyncProcessedBytes - READ-ONLY; The resync processed bytes. This includes sum of total bytes transferred and matched bytes on all selected disks in source VM.
11639	ResyncProcessedBytes *int64 `json:"resyncProcessedBytes,omitempty"`
11640	// ResyncTransferredBytes - READ-ONLY; The resync transferred bytes from source VM to azure for all selected disks on source VM.
11641	ResyncTransferredBytes *int64 `json:"resyncTransferredBytes,omitempty"`
11642	// ResyncRequired - READ-ONLY; A value indicating whether resync is required.
11643	ResyncRequired *string `json:"resyncRequired,omitempty"`
11644	// ResyncState - READ-ONLY; The resync state. Possible values include: 'ResyncStateNone', 'ResyncStatePreparedForResynchronization', 'ResyncStateStartedResynchronization'
11645	ResyncState ResyncState `json:"resyncState,omitempty"`
11646	// AgentUpgradeState - READ-ONLY; The agent auto upgrade state. Possible values include: 'MobilityAgentUpgradeStateNone', 'MobilityAgentUpgradeStateStarted', 'MobilityAgentUpgradeStateCompleted', 'MobilityAgentUpgradeStateCommit'
11647	AgentUpgradeState MobilityAgentUpgradeState `json:"agentUpgradeState,omitempty"`
11648	// LastAgentUpgradeType - READ-ONLY; The last agent upgrade type.
11649	LastAgentUpgradeType *string `json:"lastAgentUpgradeType,omitempty"`
11650	// LastAgentUpgradeFailedJobID - READ-ONLY; The last agent upgrade failed or cancelled job Id.
11651	LastAgentUpgradeFailedJobID *string `json:"lastAgentUpgradeFailedJobId,omitempty"`
11652	// ProtectedDisks - READ-ONLY; The list of protected disks.
11653	ProtectedDisks *[]InMageRcmProtectedDiskDetails `json:"protectedDisks,omitempty"`
11654	// IsLastUpgradeSuccessful - READ-ONLY; A value indicating whether last agent upgrade was successful or not.
11655	IsLastUpgradeSuccessful *string `json:"isLastUpgradeSuccessful,omitempty"`
11656	// MobilityAgentDetails - READ-ONLY; The mobility agent information.
11657	MobilityAgentDetails *InMageRcmMobilityAgentDetails `json:"mobilityAgentDetails,omitempty"`
11658	// LastAgentUpgradeErrorDetails - READ-ONLY; The last agent upgrade error information.
11659	LastAgentUpgradeErrorDetails *[]InMageRcmLastAgentUpgradeErrorDetails `json:"lastAgentUpgradeErrorDetails,omitempty"`
11660	// AgentUpgradeBlockingErrorDetails - READ-ONLY; The agent upgrade blocking error information.
11661	AgentUpgradeBlockingErrorDetails *[]InMageRcmAgentUpgradeBlockingErrorDetails `json:"agentUpgradeBlockingErrorDetails,omitempty"`
11662	// VMNics - READ-ONLY; The network details.
11663	VMNics *[]InMageRcmNicDetails `json:"vmNics,omitempty"`
11664	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
11665	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
11666}
11667
11668// MarshalJSON is the custom marshaler for InMageRcmReplicationDetails.
11669func (imrrd InMageRcmReplicationDetails) MarshalJSON() ([]byte, error) {
11670	imrrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm
11671	objectMap := make(map[string]interface{})
11672	if imrrd.InstanceType != "" {
11673		objectMap["instanceType"] = imrrd.InstanceType
11674	}
11675	return json.Marshal(objectMap)
11676}
11677
11678// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11679func (imrrd InMageRcmReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
11680	return nil, false
11681}
11682
11683// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11684func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
11685	return nil, false
11686}
11687
11688// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11689func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
11690	return nil, false
11691}
11692
11693// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11694func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
11695	return nil, false
11696}
11697
11698// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11699func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
11700	return nil, false
11701}
11702
11703// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11704func (imrrd InMageRcmReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
11705	return nil, false
11706}
11707
11708// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11709func (imrrd InMageRcmReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
11710	return &imrrd, true
11711}
11712
11713// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11714func (imrrd InMageRcmReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
11715	return nil, false
11716}
11717
11718// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11719func (imrrd InMageRcmReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
11720	return nil, false
11721}
11722
11723// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11724func (imrrd InMageRcmReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
11725	return &imrrd, true
11726}
11727
11728// InMageRcmTestFailoverInput inMageRcm provider specific input for test failover.
11729type InMageRcmTestFailoverInput struct {
11730	// NetworkID - The test network Id.
11731	NetworkID *string `json:"networkId,omitempty"`
11732	// RecoveryPointID - The recovery point id to be passed to test failover to a particular recovery point. In case of latest recovery point, null should be passed.
11733	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
11734	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
11735	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
11736}
11737
11738// MarshalJSON is the custom marshaler for InMageRcmTestFailoverInput.
11739func (imrtfi InMageRcmTestFailoverInput) MarshalJSON() ([]byte, error) {
11740	imrtfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm
11741	objectMap := make(map[string]interface{})
11742	if imrtfi.NetworkID != nil {
11743		objectMap["networkId"] = imrtfi.NetworkID
11744	}
11745	if imrtfi.RecoveryPointID != nil {
11746		objectMap["recoveryPointId"] = imrtfi.RecoveryPointID
11747	}
11748	if imrtfi.InstanceType != "" {
11749		objectMap["instanceType"] = imrtfi.InstanceType
11750	}
11751	return json.Marshal(objectMap)
11752}
11753
11754// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11755func (imrtfi InMageRcmTestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
11756	return nil, false
11757}
11758
11759// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11760func (imrtfi InMageRcmTestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
11761	return nil, false
11762}
11763
11764// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11765func (imrtfi InMageRcmTestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
11766	return nil, false
11767}
11768
11769// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11770func (imrtfi InMageRcmTestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
11771	return &imrtfi, true
11772}
11773
11774// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11775func (imrtfi InMageRcmTestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
11776	return nil, false
11777}
11778
11779// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11780func (imrtfi InMageRcmTestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
11781	return nil, false
11782}
11783
11784// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11785func (imrtfi InMageRcmTestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
11786	return &imrtfi, true
11787}
11788
11789// InMageRcmUnplannedFailoverInput inMageRcm provider specific input for unplanned failover.
11790type InMageRcmUnplannedFailoverInput struct {
11791	// PerformShutdown - A value indicating whether VM is to be shutdown.
11792	PerformShutdown *string `json:"performShutdown,omitempty"`
11793	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
11794	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
11795	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
11796	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
11797}
11798
11799// MarshalJSON is the custom marshaler for InMageRcmUnplannedFailoverInput.
11800func (imrufi InMageRcmUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
11801	imrufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm
11802	objectMap := make(map[string]interface{})
11803	if imrufi.PerformShutdown != nil {
11804		objectMap["performShutdown"] = imrufi.PerformShutdown
11805	}
11806	if imrufi.RecoveryPointID != nil {
11807		objectMap["recoveryPointId"] = imrufi.RecoveryPointID
11808	}
11809	if imrufi.InstanceType != "" {
11810		objectMap["instanceType"] = imrufi.InstanceType
11811	}
11812	return json.Marshal(objectMap)
11813}
11814
11815// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11816func (imrufi InMageRcmUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
11817	return nil, false
11818}
11819
11820// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11821func (imrufi InMageRcmUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
11822	return nil, false
11823}
11824
11825// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11826func (imrufi InMageRcmUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
11827	return nil, false
11828}
11829
11830// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11831func (imrufi InMageRcmUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
11832	return &imrufi, true
11833}
11834
11835// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11836func (imrufi InMageRcmUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
11837	return nil, false
11838}
11839
11840// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11841func (imrufi InMageRcmUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
11842	return nil, false
11843}
11844
11845// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11846func (imrufi InMageRcmUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
11847	return &imrufi, true
11848}
11849
11850// InMageRcmUpdateReplicationProtectedItemInput inMageRcm provider specific input to update replication
11851// protected item.
11852type InMageRcmUpdateReplicationProtectedItemInput struct {
11853	// TargetVMName - The target VM name.
11854	TargetVMName *string `json:"targetVmName,omitempty"`
11855	// TargetVMSize - The target VM size.
11856	TargetVMSize *string `json:"targetVmSize,omitempty"`
11857	// TargetResourceGroupID - The target resource group ARM Id.
11858	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
11859	// TargetAvailabilitySetID - The target availability set ARM Id.
11860	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
11861	// TargetAvailabilityZone - The target availability zone.
11862	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
11863	// TargetProximityPlacementGroupID - The target proximity placement group Id.
11864	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
11865	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
11866	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
11867	// TargetNetworkID - The target network ARM Id.
11868	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
11869	// TestNetworkID - The test network ARM Id.
11870	TestNetworkID *string `json:"testNetworkId,omitempty"`
11871	// VMNics - The list of NIC details.
11872	VMNics *[]InMageRcmNicInput `json:"vmNics,omitempty"`
11873	// LicenseType - The license type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
11874	LicenseType LicenseType `json:"licenseType,omitempty"`
11875	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
11876	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
11877}
11878
11879// MarshalJSON is the custom marshaler for InMageRcmUpdateReplicationProtectedItemInput.
11880func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
11881	imrurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm
11882	objectMap := make(map[string]interface{})
11883	if imrurpii.TargetVMName != nil {
11884		objectMap["targetVmName"] = imrurpii.TargetVMName
11885	}
11886	if imrurpii.TargetVMSize != nil {
11887		objectMap["targetVmSize"] = imrurpii.TargetVMSize
11888	}
11889	if imrurpii.TargetResourceGroupID != nil {
11890		objectMap["targetResourceGroupId"] = imrurpii.TargetResourceGroupID
11891	}
11892	if imrurpii.TargetAvailabilitySetID != nil {
11893		objectMap["targetAvailabilitySetId"] = imrurpii.TargetAvailabilitySetID
11894	}
11895	if imrurpii.TargetAvailabilityZone != nil {
11896		objectMap["targetAvailabilityZone"] = imrurpii.TargetAvailabilityZone
11897	}
11898	if imrurpii.TargetProximityPlacementGroupID != nil {
11899		objectMap["targetProximityPlacementGroupId"] = imrurpii.TargetProximityPlacementGroupID
11900	}
11901	if imrurpii.TargetBootDiagnosticsStorageAccountID != nil {
11902		objectMap["targetBootDiagnosticsStorageAccountId"] = imrurpii.TargetBootDiagnosticsStorageAccountID
11903	}
11904	if imrurpii.TargetNetworkID != nil {
11905		objectMap["targetNetworkId"] = imrurpii.TargetNetworkID
11906	}
11907	if imrurpii.TestNetworkID != nil {
11908		objectMap["testNetworkId"] = imrurpii.TestNetworkID
11909	}
11910	if imrurpii.VMNics != nil {
11911		objectMap["vmNics"] = imrurpii.VMNics
11912	}
11913	if imrurpii.LicenseType != "" {
11914		objectMap["licenseType"] = imrurpii.LicenseType
11915	}
11916	if imrurpii.InstanceType != "" {
11917		objectMap["instanceType"] = imrurpii.InstanceType
11918	}
11919	return json.Marshal(objectMap)
11920}
11921
11922// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11923func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
11924	return nil, false
11925}
11926
11927// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11928func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
11929	return nil, false
11930}
11931
11932// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11933func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
11934	return nil, false
11935}
11936
11937// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11938func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
11939	return &imrurpii, true
11940}
11941
11942// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11943func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
11944	return nil, false
11945}
11946
11947// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11948func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
11949	return &imrurpii, true
11950}
11951
11952// InMageReplicationDetails inMage provider specific settings
11953type InMageReplicationDetails struct {
11954	// ActiveSiteType - The active location of the VM. If the VM is being protected from Azure, this field will take values from { Azure, OnPrem }. If the VM is being protected between two data-centers, this field will be OnPrem always.
11955	ActiveSiteType *string `json:"activeSiteType,omitempty"`
11956	// SourceVMCPUCount - The CPU count of the VM on the primary side.
11957	SourceVMCPUCount *int32 `json:"sourceVmCpuCount,omitempty"`
11958	// SourceVMRAMSizeInMB - The RAM size of the VM on the primary side.
11959	SourceVMRAMSizeInMB *int32 `json:"sourceVmRamSizeInMB,omitempty"`
11960	// OsDetails - The OS details.
11961	OsDetails *OSDiskDetails `json:"osDetails,omitempty"`
11962	// ProtectionStage - The protection stage.
11963	ProtectionStage *string `json:"protectionStage,omitempty"`
11964	// VMID - The virtual machine Id.
11965	VMID *string `json:"vmId,omitempty"`
11966	// VMProtectionState - The protection state for the vm.
11967	VMProtectionState *string `json:"vmProtectionState,omitempty"`
11968	// VMProtectionStateDescription - The protection state description for the vm.
11969	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
11970	// ResyncDetails - The resync details of the machine
11971	ResyncDetails *InitialReplicationDetails `json:"resyncDetails,omitempty"`
11972	// RetentionWindowStart - The retention window start time.
11973	RetentionWindowStart *date.Time `json:"retentionWindowStart,omitempty"`
11974	// RetentionWindowEnd - The retention window end time.
11975	RetentionWindowEnd *date.Time `json:"retentionWindowEnd,omitempty"`
11976	// CompressedDataRateInMB - The compressed data change rate in MB.
11977	CompressedDataRateInMB *float64 `json:"compressedDataRateInMB,omitempty"`
11978	// UncompressedDataRateInMB - The uncompressed data change rate in MB.
11979	UncompressedDataRateInMB *float64 `json:"uncompressedDataRateInMB,omitempty"`
11980	// RpoInSeconds - The RPO in seconds.
11981	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
11982	// ProtectedDisks - The list of protected disks.
11983	ProtectedDisks *[]InMageProtectedDiskDetails `json:"protectedDisks,omitempty"`
11984	// IPAddress - The source IP address.
11985	IPAddress *string `json:"ipAddress,omitempty"`
11986	// LastHeartbeat - The last heartbeat received from the source server.
11987	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
11988	// ProcessServerID - The process server Id.
11989	ProcessServerID *string `json:"processServerId,omitempty"`
11990	// MasterTargetID - The master target Id.
11991	MasterTargetID *string `json:"masterTargetId,omitempty"`
11992	// ConsistencyPoints - The collection of Consistency points.
11993	ConsistencyPoints map[string]*date.Time `json:"consistencyPoints"`
11994	// DiskResized - A value indicating whether any disk is resized for this VM.
11995	DiskResized *string `json:"diskResized,omitempty"`
11996	// RebootAfterUpdateStatus - A value indicating whether the source server requires a restart after update.
11997	RebootAfterUpdateStatus *string `json:"rebootAfterUpdateStatus,omitempty"`
11998	// MultiVMGroupID - The multi vm group Id, if any.
11999	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
12000	// MultiVMGroupName - The multi vm group name, if any.
12001	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
12002	// MultiVMSyncStatus - A value indicating whether the multi vm sync is enabled or disabled.
12003	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
12004	// AgentDetails - The agent details.
12005	AgentDetails *InMageAgentDetails `json:"agentDetails,omitempty"`
12006	// VCenterInfrastructureID - The vCenter infrastructure Id.
12007	VCenterInfrastructureID *string `json:"vCenterInfrastructureId,omitempty"`
12008	// InfrastructureVMID - The infrastructure VM Id.
12009	InfrastructureVMID *string `json:"infrastructureVmId,omitempty"`
12010	// VMNics - The PE Network details.
12011	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
12012	// DiscoveryType - A value indicating the discovery type of the machine.
12013	DiscoveryType *string `json:"discoveryType,omitempty"`
12014	// AzureStorageAccountID - A value indicating the underlying Azure storage account. If the VM is not running in Azure, this value shall be set to null.
12015	AzureStorageAccountID *string `json:"azureStorageAccountId,omitempty"`
12016	// Datastores - The data stores of the on-premise machine Value can be list of strings that contain data store names
12017	Datastores *[]string `json:"datastores,omitempty"`
12018	// ValidationErrors - The validation errors of the on-premise machine Value can be list of validation errors
12019	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
12020	// LastRpoCalculatedTime - The last RPO calculated time.
12021	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
12022	// LastUpdateReceivedTime - The last update time received from on-prem components.
12023	LastUpdateReceivedTime *date.Time `json:"lastUpdateReceivedTime,omitempty"`
12024	// ReplicaID - The replica id of the protected item.
12025	ReplicaID *string `json:"replicaId,omitempty"`
12026	// OsVersion - The OS Version of the protected item.
12027	OsVersion *string `json:"osVersion,omitempty"`
12028	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
12029	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
12030}
12031
12032// MarshalJSON is the custom marshaler for InMageReplicationDetails.
12033func (imrd InMageReplicationDetails) MarshalJSON() ([]byte, error) {
12034	imrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage
12035	objectMap := make(map[string]interface{})
12036	if imrd.ActiveSiteType != nil {
12037		objectMap["activeSiteType"] = imrd.ActiveSiteType
12038	}
12039	if imrd.SourceVMCPUCount != nil {
12040		objectMap["sourceVmCpuCount"] = imrd.SourceVMCPUCount
12041	}
12042	if imrd.SourceVMRAMSizeInMB != nil {
12043		objectMap["sourceVmRamSizeInMB"] = imrd.SourceVMRAMSizeInMB
12044	}
12045	if imrd.OsDetails != nil {
12046		objectMap["osDetails"] = imrd.OsDetails
12047	}
12048	if imrd.ProtectionStage != nil {
12049		objectMap["protectionStage"] = imrd.ProtectionStage
12050	}
12051	if imrd.VMID != nil {
12052		objectMap["vmId"] = imrd.VMID
12053	}
12054	if imrd.VMProtectionState != nil {
12055		objectMap["vmProtectionState"] = imrd.VMProtectionState
12056	}
12057	if imrd.VMProtectionStateDescription != nil {
12058		objectMap["vmProtectionStateDescription"] = imrd.VMProtectionStateDescription
12059	}
12060	if imrd.ResyncDetails != nil {
12061		objectMap["resyncDetails"] = imrd.ResyncDetails
12062	}
12063	if imrd.RetentionWindowStart != nil {
12064		objectMap["retentionWindowStart"] = imrd.RetentionWindowStart
12065	}
12066	if imrd.RetentionWindowEnd != nil {
12067		objectMap["retentionWindowEnd"] = imrd.RetentionWindowEnd
12068	}
12069	if imrd.CompressedDataRateInMB != nil {
12070		objectMap["compressedDataRateInMB"] = imrd.CompressedDataRateInMB
12071	}
12072	if imrd.UncompressedDataRateInMB != nil {
12073		objectMap["uncompressedDataRateInMB"] = imrd.UncompressedDataRateInMB
12074	}
12075	if imrd.RpoInSeconds != nil {
12076		objectMap["rpoInSeconds"] = imrd.RpoInSeconds
12077	}
12078	if imrd.ProtectedDisks != nil {
12079		objectMap["protectedDisks"] = imrd.ProtectedDisks
12080	}
12081	if imrd.IPAddress != nil {
12082		objectMap["ipAddress"] = imrd.IPAddress
12083	}
12084	if imrd.LastHeartbeat != nil {
12085		objectMap["lastHeartbeat"] = imrd.LastHeartbeat
12086	}
12087	if imrd.ProcessServerID != nil {
12088		objectMap["processServerId"] = imrd.ProcessServerID
12089	}
12090	if imrd.MasterTargetID != nil {
12091		objectMap["masterTargetId"] = imrd.MasterTargetID
12092	}
12093	if imrd.ConsistencyPoints != nil {
12094		objectMap["consistencyPoints"] = imrd.ConsistencyPoints
12095	}
12096	if imrd.DiskResized != nil {
12097		objectMap["diskResized"] = imrd.DiskResized
12098	}
12099	if imrd.RebootAfterUpdateStatus != nil {
12100		objectMap["rebootAfterUpdateStatus"] = imrd.RebootAfterUpdateStatus
12101	}
12102	if imrd.MultiVMGroupID != nil {
12103		objectMap["multiVmGroupId"] = imrd.MultiVMGroupID
12104	}
12105	if imrd.MultiVMGroupName != nil {
12106		objectMap["multiVmGroupName"] = imrd.MultiVMGroupName
12107	}
12108	if imrd.MultiVMSyncStatus != nil {
12109		objectMap["multiVmSyncStatus"] = imrd.MultiVMSyncStatus
12110	}
12111	if imrd.AgentDetails != nil {
12112		objectMap["agentDetails"] = imrd.AgentDetails
12113	}
12114	if imrd.VCenterInfrastructureID != nil {
12115		objectMap["vCenterInfrastructureId"] = imrd.VCenterInfrastructureID
12116	}
12117	if imrd.InfrastructureVMID != nil {
12118		objectMap["infrastructureVmId"] = imrd.InfrastructureVMID
12119	}
12120	if imrd.VMNics != nil {
12121		objectMap["vmNics"] = imrd.VMNics
12122	}
12123	if imrd.DiscoveryType != nil {
12124		objectMap["discoveryType"] = imrd.DiscoveryType
12125	}
12126	if imrd.AzureStorageAccountID != nil {
12127		objectMap["azureStorageAccountId"] = imrd.AzureStorageAccountID
12128	}
12129	if imrd.Datastores != nil {
12130		objectMap["datastores"] = imrd.Datastores
12131	}
12132	if imrd.ValidationErrors != nil {
12133		objectMap["validationErrors"] = imrd.ValidationErrors
12134	}
12135	if imrd.LastRpoCalculatedTime != nil {
12136		objectMap["lastRpoCalculatedTime"] = imrd.LastRpoCalculatedTime
12137	}
12138	if imrd.LastUpdateReceivedTime != nil {
12139		objectMap["lastUpdateReceivedTime"] = imrd.LastUpdateReceivedTime
12140	}
12141	if imrd.ReplicaID != nil {
12142		objectMap["replicaId"] = imrd.ReplicaID
12143	}
12144	if imrd.OsVersion != nil {
12145		objectMap["osVersion"] = imrd.OsVersion
12146	}
12147	if imrd.InstanceType != "" {
12148		objectMap["instanceType"] = imrd.InstanceType
12149	}
12150	return json.Marshal(objectMap)
12151}
12152
12153// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12154func (imrd InMageReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
12155	return nil, false
12156}
12157
12158// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12159func (imrd InMageReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
12160	return nil, false
12161}
12162
12163// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12164func (imrd InMageReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
12165	return nil, false
12166}
12167
12168// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12169func (imrd InMageReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
12170	return nil, false
12171}
12172
12173// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12174func (imrd InMageReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
12175	return nil, false
12176}
12177
12178// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12179func (imrd InMageReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
12180	return nil, false
12181}
12182
12183// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12184func (imrd InMageReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
12185	return nil, false
12186}
12187
12188// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12189func (imrd InMageReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
12190	return &imrd, true
12191}
12192
12193// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12194func (imrd InMageReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
12195	return nil, false
12196}
12197
12198// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12199func (imrd InMageReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
12200	return &imrd, true
12201}
12202
12203// InMageReprotectInput inMageAzureV2 specific provider input.
12204type InMageReprotectInput struct {
12205	// MasterTargetID - The Master Target Id.
12206	MasterTargetID *string `json:"masterTargetId,omitempty"`
12207	// ProcessServerID - The Process Server Id.
12208	ProcessServerID *string `json:"processServerId,omitempty"`
12209	// RetentionDrive - The retention drive to use on the MT.
12210	RetentionDrive *string `json:"retentionDrive,omitempty"`
12211	// RunAsAccountID - The CS account Id.
12212	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
12213	// DatastoreName - The target data store name.
12214	DatastoreName *string `json:"datastoreName,omitempty"`
12215	// DiskExclusionInput - The enable disk exclusion input.
12216	DiskExclusionInput *InMageDiskExclusionInput `json:"diskExclusionInput,omitempty"`
12217	// ProfileID - The Policy Id.
12218	ProfileID *string `json:"profileId,omitempty"`
12219	// DisksToInclude - The disks to include list.
12220	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
12221	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
12222	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
12223}
12224
12225// MarshalJSON is the custom marshaler for InMageReprotectInput.
12226func (imri InMageReprotectInput) MarshalJSON() ([]byte, error) {
12227	imri.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage
12228	objectMap := make(map[string]interface{})
12229	if imri.MasterTargetID != nil {
12230		objectMap["masterTargetId"] = imri.MasterTargetID
12231	}
12232	if imri.ProcessServerID != nil {
12233		objectMap["processServerId"] = imri.ProcessServerID
12234	}
12235	if imri.RetentionDrive != nil {
12236		objectMap["retentionDrive"] = imri.RetentionDrive
12237	}
12238	if imri.RunAsAccountID != nil {
12239		objectMap["runAsAccountId"] = imri.RunAsAccountID
12240	}
12241	if imri.DatastoreName != nil {
12242		objectMap["datastoreName"] = imri.DatastoreName
12243	}
12244	if imri.DiskExclusionInput != nil {
12245		objectMap["diskExclusionInput"] = imri.DiskExclusionInput
12246	}
12247	if imri.ProfileID != nil {
12248		objectMap["profileId"] = imri.ProfileID
12249	}
12250	if imri.DisksToInclude != nil {
12251		objectMap["disksToInclude"] = imri.DisksToInclude
12252	}
12253	if imri.InstanceType != "" {
12254		objectMap["instanceType"] = imri.InstanceType
12255	}
12256	return json.Marshal(objectMap)
12257}
12258
12259// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12260func (imri InMageReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
12261	return nil, false
12262}
12263
12264// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12265func (imri InMageReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
12266	return nil, false
12267}
12268
12269// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12270func (imri InMageReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
12271	return nil, false
12272}
12273
12274// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12275func (imri InMageReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
12276	return &imri, true
12277}
12278
12279// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12280func (imri InMageReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
12281	return nil, false
12282}
12283
12284// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12285func (imri InMageReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
12286	return &imri, true
12287}
12288
12289// InMageTestFailoverInput provider specific input for InMage test failover.
12290type InMageTestFailoverInput struct {
12291	// RecoveryPointType - The recovery point type. Values from LatestTime, LatestTag or Custom. In the case of custom, the recovery point provided by RecoveryPointId will be used. In the other two cases, recovery point id will be ignored. Possible values include: 'LatestTime', 'LatestTag', 'Custom'
12292	RecoveryPointType RecoveryPointType `json:"recoveryPointType,omitempty"`
12293	// RecoveryPointID - The recovery point id to be passed to test failover to a particular recovery point. In case of latest recovery point, null should be passed.
12294	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
12295	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
12296	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
12297}
12298
12299// MarshalJSON is the custom marshaler for InMageTestFailoverInput.
12300func (imtfi InMageTestFailoverInput) MarshalJSON() ([]byte, error) {
12301	imtfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage
12302	objectMap := make(map[string]interface{})
12303	if imtfi.RecoveryPointType != "" {
12304		objectMap["recoveryPointType"] = imtfi.RecoveryPointType
12305	}
12306	if imtfi.RecoveryPointID != nil {
12307		objectMap["recoveryPointId"] = imtfi.RecoveryPointID
12308	}
12309	if imtfi.InstanceType != "" {
12310		objectMap["instanceType"] = imtfi.InstanceType
12311	}
12312	return json.Marshal(objectMap)
12313}
12314
12315// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12316func (imtfi InMageTestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
12317	return nil, false
12318}
12319
12320// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12321func (imtfi InMageTestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
12322	return nil, false
12323}
12324
12325// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12326func (imtfi InMageTestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
12327	return nil, false
12328}
12329
12330// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12331func (imtfi InMageTestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
12332	return nil, false
12333}
12334
12335// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12336func (imtfi InMageTestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
12337	return &imtfi, true
12338}
12339
12340// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12341func (imtfi InMageTestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
12342	return nil, false
12343}
12344
12345// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12346func (imtfi InMageTestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
12347	return &imtfi, true
12348}
12349
12350// InMageUnplannedFailoverInput provider specific input for InMage unplanned failover.
12351type InMageUnplannedFailoverInput struct {
12352	// RecoveryPointType - The recovery point type. Values from LatestTime, LatestTag or Custom. In the case of custom, the recovery point provided by RecoveryPointId will be used. In the other two cases, recovery point id will be ignored. Possible values include: 'LatestTime', 'LatestTag', 'Custom'
12353	RecoveryPointType RecoveryPointType `json:"recoveryPointType,omitempty"`
12354	// RecoveryPointID - The recovery point id to be passed to failover to a particular recovery point. In case of latest recovery point, null should be passed.
12355	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
12356	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
12357	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
12358}
12359
12360// MarshalJSON is the custom marshaler for InMageUnplannedFailoverInput.
12361func (imufi InMageUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
12362	imufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage
12363	objectMap := make(map[string]interface{})
12364	if imufi.RecoveryPointType != "" {
12365		objectMap["recoveryPointType"] = imufi.RecoveryPointType
12366	}
12367	if imufi.RecoveryPointID != nil {
12368		objectMap["recoveryPointId"] = imufi.RecoveryPointID
12369	}
12370	if imufi.InstanceType != "" {
12371		objectMap["instanceType"] = imufi.InstanceType
12372	}
12373	return json.Marshal(objectMap)
12374}
12375
12376// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12377func (imufi InMageUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
12378	return nil, false
12379}
12380
12381// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12382func (imufi InMageUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
12383	return nil, false
12384}
12385
12386// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12387func (imufi InMageUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
12388	return nil, false
12389}
12390
12391// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12392func (imufi InMageUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
12393	return nil, false
12394}
12395
12396// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12397func (imufi InMageUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
12398	return &imufi, true
12399}
12400
12401// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12402func (imufi InMageUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
12403	return nil, false
12404}
12405
12406// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12407func (imufi InMageUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
12408	return &imufi, true
12409}
12410
12411// InMageVolumeExclusionOptions guest disk signature based disk exclusion option when doing enable
12412// protection of virtual machine in InMage provider.
12413type InMageVolumeExclusionOptions struct {
12414	// VolumeLabel - The volume label. The disk having any volume with this label will be excluded from replication.
12415	VolumeLabel *string `json:"volumeLabel,omitempty"`
12416	// OnlyExcludeIfSingleVolume - The value indicating whether to exclude multi volume disk or not. If a disk has multiple volumes and one of the volume has label matching with VolumeLabel this disk will be excluded from replication if OnlyExcludeIfSingleVolume is false.
12417	OnlyExcludeIfSingleVolume *string `json:"onlyExcludeIfSingleVolume,omitempty"`
12418}
12419
12420// InnerHealthError implements InnerHealthError class. HealthError object has a list of InnerHealthErrors
12421// as child errors. InnerHealthError is used because this will prevent an infinite loop of structures when
12422// Hydra tries to auto-generate the contract. We are exposing the related health errors as inner health
12423// errors and all API consumers can utilize this in the same fashion as Exception -&gt; InnerException.
12424type InnerHealthError struct {
12425	// ErrorSource - Source of error.
12426	ErrorSource *string `json:"errorSource,omitempty"`
12427	// ErrorType - Type of error.
12428	ErrorType *string `json:"errorType,omitempty"`
12429	// ErrorLevel - Level of error.
12430	ErrorLevel *string `json:"errorLevel,omitempty"`
12431	// ErrorCategory - Category of error.
12432	ErrorCategory *string `json:"errorCategory,omitempty"`
12433	// ErrorCode - Error code.
12434	ErrorCode *string `json:"errorCode,omitempty"`
12435	// SummaryMessage - Summary message of the entity.
12436	SummaryMessage *string `json:"summaryMessage,omitempty"`
12437	// ErrorMessage - Error message.
12438	ErrorMessage *string `json:"errorMessage,omitempty"`
12439	// PossibleCauses - Possible causes of error.
12440	PossibleCauses *string `json:"possibleCauses,omitempty"`
12441	// RecommendedAction - Recommended action to resolve error.
12442	RecommendedAction *string `json:"recommendedAction,omitempty"`
12443	// CreationTimeUtc - Error creation time (UTC)
12444	CreationTimeUtc *date.Time `json:"creationTimeUtc,omitempty"`
12445	// RecoveryProviderErrorMessage - DRA error message.
12446	RecoveryProviderErrorMessage *string `json:"recoveryProviderErrorMessage,omitempty"`
12447	// EntityID - ID of the entity.
12448	EntityID *string `json:"entityId,omitempty"`
12449}
12450
12451// InputEndpoint azure VM input endpoint details.
12452type InputEndpoint struct {
12453	// EndpointName - The input endpoint name.
12454	EndpointName *string `json:"endpointName,omitempty"`
12455	// PrivatePort - The input endpoint private port.
12456	PrivatePort *int32 `json:"privatePort,omitempty"`
12457	// PublicPort - The input endpoint public port.
12458	PublicPort *int32 `json:"publicPort,omitempty"`
12459	// Protocol - The input endpoint protocol.
12460	Protocol *string `json:"protocol,omitempty"`
12461}
12462
12463// IPConfig IP configuration details.
12464type IPConfig struct {
12465	// StaticIPAddress - The static IP address of the IP configuration.
12466	StaticIPAddress *string `json:"staticIPAddress,omitempty"`
12467	// PublicIPAddressID - The Id of the public IP address associated with the IP configuration.
12468	PublicIPAddressID *string `json:"publicIpAddressId,omitempty"`
12469	// LBBackendAddressPoolIds - The backend address pools associated with the IP configuration.
12470	LBBackendAddressPoolIds *[]string `json:"lBBackendAddressPoolIds,omitempty"`
12471}
12472
12473// Job job details.
12474type Job struct {
12475	autorest.Response `json:"-"`
12476	// Properties - The custom data.
12477	Properties *JobProperties `json:"properties,omitempty"`
12478	// ID - READ-ONLY; Resource Id
12479	ID *string `json:"id,omitempty"`
12480	// Name - READ-ONLY; Resource Name
12481	Name *string `json:"name,omitempty"`
12482	// Type - READ-ONLY; Resource Type
12483	Type *string `json:"type,omitempty"`
12484	// Location - Resource Location
12485	Location *string `json:"location,omitempty"`
12486}
12487
12488// MarshalJSON is the custom marshaler for Job.
12489func (j Job) MarshalJSON() ([]byte, error) {
12490	objectMap := make(map[string]interface{})
12491	if j.Properties != nil {
12492		objectMap["properties"] = j.Properties
12493	}
12494	if j.Location != nil {
12495		objectMap["location"] = j.Location
12496	}
12497	return json.Marshal(objectMap)
12498}
12499
12500// JobCollection collection of jobs.
12501type JobCollection struct {
12502	autorest.Response `json:"-"`
12503	// Value - The list of jobs.
12504	Value *[]Job `json:"value,omitempty"`
12505	// NextLink - The value of next link.
12506	NextLink *string `json:"nextLink,omitempty"`
12507}
12508
12509// JobCollectionIterator provides access to a complete listing of Job values.
12510type JobCollectionIterator struct {
12511	i    int
12512	page JobCollectionPage
12513}
12514
12515// NextWithContext advances to the next value.  If there was an error making
12516// the request the iterator does not advance and the error is returned.
12517func (iter *JobCollectionIterator) NextWithContext(ctx context.Context) (err error) {
12518	if tracing.IsEnabled() {
12519		ctx = tracing.StartSpan(ctx, fqdn+"/JobCollectionIterator.NextWithContext")
12520		defer func() {
12521			sc := -1
12522			if iter.Response().Response.Response != nil {
12523				sc = iter.Response().Response.Response.StatusCode
12524			}
12525			tracing.EndSpan(ctx, sc, err)
12526		}()
12527	}
12528	iter.i++
12529	if iter.i < len(iter.page.Values()) {
12530		return nil
12531	}
12532	err = iter.page.NextWithContext(ctx)
12533	if err != nil {
12534		iter.i--
12535		return err
12536	}
12537	iter.i = 0
12538	return nil
12539}
12540
12541// Next advances to the next value.  If there was an error making
12542// the request the iterator does not advance and the error is returned.
12543// Deprecated: Use NextWithContext() instead.
12544func (iter *JobCollectionIterator) Next() error {
12545	return iter.NextWithContext(context.Background())
12546}
12547
12548// NotDone returns true if the enumeration should be started or is not yet complete.
12549func (iter JobCollectionIterator) NotDone() bool {
12550	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12551}
12552
12553// Response returns the raw server response from the last page request.
12554func (iter JobCollectionIterator) Response() JobCollection {
12555	return iter.page.Response()
12556}
12557
12558// Value returns the current value or a zero-initialized value if the
12559// iterator has advanced beyond the end of the collection.
12560func (iter JobCollectionIterator) Value() Job {
12561	if !iter.page.NotDone() {
12562		return Job{}
12563	}
12564	return iter.page.Values()[iter.i]
12565}
12566
12567// Creates a new instance of the JobCollectionIterator type.
12568func NewJobCollectionIterator(page JobCollectionPage) JobCollectionIterator {
12569	return JobCollectionIterator{page: page}
12570}
12571
12572// IsEmpty returns true if the ListResult contains no values.
12573func (jc JobCollection) IsEmpty() bool {
12574	return jc.Value == nil || len(*jc.Value) == 0
12575}
12576
12577// hasNextLink returns true if the NextLink is not empty.
12578func (jc JobCollection) hasNextLink() bool {
12579	return jc.NextLink != nil && len(*jc.NextLink) != 0
12580}
12581
12582// jobCollectionPreparer prepares a request to retrieve the next set of results.
12583// It returns nil if no more results exist.
12584func (jc JobCollection) jobCollectionPreparer(ctx context.Context) (*http.Request, error) {
12585	if !jc.hasNextLink() {
12586		return nil, nil
12587	}
12588	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12589		autorest.AsJSON(),
12590		autorest.AsGet(),
12591		autorest.WithBaseURL(to.String(jc.NextLink)))
12592}
12593
12594// JobCollectionPage contains a page of Job values.
12595type JobCollectionPage struct {
12596	fn func(context.Context, JobCollection) (JobCollection, error)
12597	jc JobCollection
12598}
12599
12600// NextWithContext advances to the next page of values.  If there was an error making
12601// the request the page does not advance and the error is returned.
12602func (page *JobCollectionPage) NextWithContext(ctx context.Context) (err error) {
12603	if tracing.IsEnabled() {
12604		ctx = tracing.StartSpan(ctx, fqdn+"/JobCollectionPage.NextWithContext")
12605		defer func() {
12606			sc := -1
12607			if page.Response().Response.Response != nil {
12608				sc = page.Response().Response.Response.StatusCode
12609			}
12610			tracing.EndSpan(ctx, sc, err)
12611		}()
12612	}
12613	for {
12614		next, err := page.fn(ctx, page.jc)
12615		if err != nil {
12616			return err
12617		}
12618		page.jc = next
12619		if !next.hasNextLink() || !next.IsEmpty() {
12620			break
12621		}
12622	}
12623	return nil
12624}
12625
12626// Next advances to the next page of values.  If there was an error making
12627// the request the page does not advance and the error is returned.
12628// Deprecated: Use NextWithContext() instead.
12629func (page *JobCollectionPage) Next() error {
12630	return page.NextWithContext(context.Background())
12631}
12632
12633// NotDone returns true if the page enumeration should be started or is not yet complete.
12634func (page JobCollectionPage) NotDone() bool {
12635	return !page.jc.IsEmpty()
12636}
12637
12638// Response returns the raw server response from the last page request.
12639func (page JobCollectionPage) Response() JobCollection {
12640	return page.jc
12641}
12642
12643// Values returns the slice of values for the current page or nil if there are no values.
12644func (page JobCollectionPage) Values() []Job {
12645	if page.jc.IsEmpty() {
12646		return nil
12647	}
12648	return *page.jc.Value
12649}
12650
12651// Creates a new instance of the JobCollectionPage type.
12652func NewJobCollectionPage(cur JobCollection, getNextPage func(context.Context, JobCollection) (JobCollection, error)) JobCollectionPage {
12653	return JobCollectionPage{
12654		fn: getNextPage,
12655		jc: cur,
12656	}
12657}
12658
12659// BasicJobDetails job details based on specific job type.
12660type BasicJobDetails interface {
12661	AsAsrJobDetails() (*AsrJobDetails, bool)
12662	AsExportJobDetails() (*ExportJobDetails, bool)
12663	AsFailoverJobDetails() (*FailoverJobDetails, bool)
12664	AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool)
12665	AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool)
12666	AsJobDetails() (*JobDetails, bool)
12667}
12668
12669// JobDetails job details based on specific job type.
12670type JobDetails struct {
12671	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
12672	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
12673	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
12674	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
12675}
12676
12677func unmarshalBasicJobDetails(body []byte) (BasicJobDetails, error) {
12678	var m map[string]interface{}
12679	err := json.Unmarshal(body, &m)
12680	if err != nil {
12681		return nil, err
12682	}
12683
12684	switch m["instanceType"] {
12685	case string(InstanceTypeAsrJobDetails):
12686		var ajd AsrJobDetails
12687		err := json.Unmarshal(body, &ajd)
12688		return ajd, err
12689	case string(InstanceTypeExportJobDetails):
12690		var ejd ExportJobDetails
12691		err := json.Unmarshal(body, &ejd)
12692		return ejd, err
12693	case string(InstanceTypeFailoverJobDetails):
12694		var fjd FailoverJobDetails
12695		err := json.Unmarshal(body, &fjd)
12696		return fjd, err
12697	case string(InstanceTypeSwitchProtectionJobDetails):
12698		var spjd SwitchProtectionJobDetails
12699		err := json.Unmarshal(body, &spjd)
12700		return spjd, err
12701	case string(InstanceTypeTestFailoverJobDetails):
12702		var tfjd TestFailoverJobDetails
12703		err := json.Unmarshal(body, &tfjd)
12704		return tfjd, err
12705	default:
12706		var jd JobDetails
12707		err := json.Unmarshal(body, &jd)
12708		return jd, err
12709	}
12710}
12711func unmarshalBasicJobDetailsArray(body []byte) ([]BasicJobDetails, error) {
12712	var rawMessages []*json.RawMessage
12713	err := json.Unmarshal(body, &rawMessages)
12714	if err != nil {
12715		return nil, err
12716	}
12717
12718	jdArray := make([]BasicJobDetails, len(rawMessages))
12719
12720	for index, rawMessage := range rawMessages {
12721		jd, err := unmarshalBasicJobDetails(*rawMessage)
12722		if err != nil {
12723			return nil, err
12724		}
12725		jdArray[index] = jd
12726	}
12727	return jdArray, nil
12728}
12729
12730// MarshalJSON is the custom marshaler for JobDetails.
12731func (jd JobDetails) MarshalJSON() ([]byte, error) {
12732	jd.InstanceType = InstanceTypeJobDetails
12733	objectMap := make(map[string]interface{})
12734	if jd.AffectedObjectDetails != nil {
12735		objectMap["affectedObjectDetails"] = jd.AffectedObjectDetails
12736	}
12737	if jd.InstanceType != "" {
12738		objectMap["instanceType"] = jd.InstanceType
12739	}
12740	return json.Marshal(objectMap)
12741}
12742
12743// AsAsrJobDetails is the BasicJobDetails implementation for JobDetails.
12744func (jd JobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
12745	return nil, false
12746}
12747
12748// AsExportJobDetails is the BasicJobDetails implementation for JobDetails.
12749func (jd JobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
12750	return nil, false
12751}
12752
12753// AsFailoverJobDetails is the BasicJobDetails implementation for JobDetails.
12754func (jd JobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
12755	return nil, false
12756}
12757
12758// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for JobDetails.
12759func (jd JobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
12760	return nil, false
12761}
12762
12763// AsTestFailoverJobDetails is the BasicJobDetails implementation for JobDetails.
12764func (jd JobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
12765	return nil, false
12766}
12767
12768// AsJobDetails is the BasicJobDetails implementation for JobDetails.
12769func (jd JobDetails) AsJobDetails() (*JobDetails, bool) {
12770	return &jd, true
12771}
12772
12773// AsBasicJobDetails is the BasicJobDetails implementation for JobDetails.
12774func (jd JobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
12775	return &jd, true
12776}
12777
12778// JobEntity this class contains the minimal job details required to navigate to the desired drill down.
12779type JobEntity struct {
12780	// JobID - The job id.
12781	JobID *string `json:"jobId,omitempty"`
12782	// JobFriendlyName - The job display name.
12783	JobFriendlyName *string `json:"jobFriendlyName,omitempty"`
12784	// TargetObjectID - The object id.
12785	TargetObjectID *string `json:"targetObjectId,omitempty"`
12786	// TargetObjectName - The object name.
12787	TargetObjectName *string `json:"targetObjectName,omitempty"`
12788	// TargetInstanceType - The workflow affected object type.
12789	TargetInstanceType *string `json:"targetInstanceType,omitempty"`
12790	// JobScenarioName - The job name. Enum type ScenarioName.
12791	JobScenarioName *string `json:"jobScenarioName,omitempty"`
12792}
12793
12794// JobErrorDetails this class contains the error details per object.
12795type JobErrorDetails struct {
12796	// ServiceErrorDetails - The Service error details.
12797	ServiceErrorDetails *ServiceError `json:"serviceErrorDetails,omitempty"`
12798	// ProviderErrorDetails - The Provider error details.
12799	ProviderErrorDetails *ProviderError `json:"providerErrorDetails,omitempty"`
12800	// ErrorLevel - Error level of error.
12801	ErrorLevel *string `json:"errorLevel,omitempty"`
12802	// CreationTime - The creation time of job error.
12803	CreationTime *date.Time `json:"creationTime,omitempty"`
12804	// TaskID - The Id of the task.
12805	TaskID *string `json:"taskId,omitempty"`
12806}
12807
12808// JobProperties job custom data details.
12809type JobProperties struct {
12810	// ActivityID - The activity id.
12811	ActivityID *string `json:"activityId,omitempty"`
12812	// ScenarioName - The ScenarioName.
12813	ScenarioName *string `json:"scenarioName,omitempty"`
12814	// FriendlyName - The DisplayName.
12815	FriendlyName *string `json:"friendlyName,omitempty"`
12816	// State - The status of the Job. It is one of these values - NotStarted, InProgress, Succeeded, Failed, Cancelled, Suspended or Other.
12817	State *string `json:"state,omitempty"`
12818	// StateDescription - The description of the state of the Job. For e.g. - For Succeeded state, description can be Completed, PartiallySucceeded, CompletedWithInformation or Skipped.
12819	StateDescription *string `json:"stateDescription,omitempty"`
12820	// Tasks - The tasks.
12821	Tasks *[]ASRTask `json:"tasks,omitempty"`
12822	// Errors - The errors.
12823	Errors *[]JobErrorDetails `json:"errors,omitempty"`
12824	// StartTime - The start time.
12825	StartTime *date.Time `json:"startTime,omitempty"`
12826	// EndTime - The end time.
12827	EndTime *date.Time `json:"endTime,omitempty"`
12828	// AllowedActions - The Allowed action the job.
12829	AllowedActions *[]string `json:"allowedActions,omitempty"`
12830	// TargetObjectID - The affected Object Id.
12831	TargetObjectID *string `json:"targetObjectId,omitempty"`
12832	// TargetObjectName - The name of the affected object.
12833	TargetObjectName *string `json:"targetObjectName,omitempty"`
12834	// TargetInstanceType - The type of the affected object which is of {Microsoft.Azure.SiteRecovery.V2015_11_10.AffectedObjectType} class.
12835	TargetInstanceType *string `json:"targetInstanceType,omitempty"`
12836	// CustomDetails - The custom job details like test failover job details.
12837	CustomDetails BasicJobDetails `json:"customDetails,omitempty"`
12838}
12839
12840// UnmarshalJSON is the custom unmarshaler for JobProperties struct.
12841func (jp *JobProperties) UnmarshalJSON(body []byte) error {
12842	var m map[string]*json.RawMessage
12843	err := json.Unmarshal(body, &m)
12844	if err != nil {
12845		return err
12846	}
12847	for k, v := range m {
12848		switch k {
12849		case "activityId":
12850			if v != nil {
12851				var activityID string
12852				err = json.Unmarshal(*v, &activityID)
12853				if err != nil {
12854					return err
12855				}
12856				jp.ActivityID = &activityID
12857			}
12858		case "scenarioName":
12859			if v != nil {
12860				var scenarioName string
12861				err = json.Unmarshal(*v, &scenarioName)
12862				if err != nil {
12863					return err
12864				}
12865				jp.ScenarioName = &scenarioName
12866			}
12867		case "friendlyName":
12868			if v != nil {
12869				var friendlyName string
12870				err = json.Unmarshal(*v, &friendlyName)
12871				if err != nil {
12872					return err
12873				}
12874				jp.FriendlyName = &friendlyName
12875			}
12876		case "state":
12877			if v != nil {
12878				var state string
12879				err = json.Unmarshal(*v, &state)
12880				if err != nil {
12881					return err
12882				}
12883				jp.State = &state
12884			}
12885		case "stateDescription":
12886			if v != nil {
12887				var stateDescription string
12888				err = json.Unmarshal(*v, &stateDescription)
12889				if err != nil {
12890					return err
12891				}
12892				jp.StateDescription = &stateDescription
12893			}
12894		case "tasks":
12895			if v != nil {
12896				var tasks []ASRTask
12897				err = json.Unmarshal(*v, &tasks)
12898				if err != nil {
12899					return err
12900				}
12901				jp.Tasks = &tasks
12902			}
12903		case "errors":
12904			if v != nil {
12905				var errorsVar []JobErrorDetails
12906				err = json.Unmarshal(*v, &errorsVar)
12907				if err != nil {
12908					return err
12909				}
12910				jp.Errors = &errorsVar
12911			}
12912		case "startTime":
12913			if v != nil {
12914				var startTime date.Time
12915				err = json.Unmarshal(*v, &startTime)
12916				if err != nil {
12917					return err
12918				}
12919				jp.StartTime = &startTime
12920			}
12921		case "endTime":
12922			if v != nil {
12923				var endTime date.Time
12924				err = json.Unmarshal(*v, &endTime)
12925				if err != nil {
12926					return err
12927				}
12928				jp.EndTime = &endTime
12929			}
12930		case "allowedActions":
12931			if v != nil {
12932				var allowedActions []string
12933				err = json.Unmarshal(*v, &allowedActions)
12934				if err != nil {
12935					return err
12936				}
12937				jp.AllowedActions = &allowedActions
12938			}
12939		case "targetObjectId":
12940			if v != nil {
12941				var targetObjectID string
12942				err = json.Unmarshal(*v, &targetObjectID)
12943				if err != nil {
12944					return err
12945				}
12946				jp.TargetObjectID = &targetObjectID
12947			}
12948		case "targetObjectName":
12949			if v != nil {
12950				var targetObjectName string
12951				err = json.Unmarshal(*v, &targetObjectName)
12952				if err != nil {
12953					return err
12954				}
12955				jp.TargetObjectName = &targetObjectName
12956			}
12957		case "targetInstanceType":
12958			if v != nil {
12959				var targetInstanceType string
12960				err = json.Unmarshal(*v, &targetInstanceType)
12961				if err != nil {
12962					return err
12963				}
12964				jp.TargetInstanceType = &targetInstanceType
12965			}
12966		case "customDetails":
12967			if v != nil {
12968				customDetails, err := unmarshalBasicJobDetails(*v)
12969				if err != nil {
12970					return err
12971				}
12972				jp.CustomDetails = customDetails
12973			}
12974		}
12975	}
12976
12977	return nil
12978}
12979
12980// JobQueryParameter query parameter to enumerate jobs.
12981type JobQueryParameter struct {
12982	// StartTime - Date time to get jobs from.
12983	StartTime *string `json:"startTime,omitempty"`
12984	// EndTime - Date time to get jobs up to.
12985	EndTime *string `json:"endTime,omitempty"`
12986	// FabricID - The Id of the fabric to search jobs under.
12987	FabricID *string `json:"fabricId,omitempty"`
12988	// AffectedObjectTypes - The type of objects.
12989	AffectedObjectTypes *string `json:"affectedObjectTypes,omitempty"`
12990	// JobStatus - The states of the job to be filtered can be in.
12991	JobStatus *string `json:"jobStatus,omitempty"`
12992}
12993
12994// JobStatusEventDetails model class for event details of a job status event.
12995type JobStatusEventDetails struct {
12996	// JobID - Job arm id for the event.
12997	JobID *string `json:"jobId,omitempty"`
12998	// JobFriendlyName - JobName for the Event.
12999	JobFriendlyName *string `json:"jobFriendlyName,omitempty"`
13000	// JobStatus - JobStatus for the Event.
13001	JobStatus *string `json:"jobStatus,omitempty"`
13002	// AffectedObjectType - AffectedObjectType for the event.
13003	AffectedObjectType *string `json:"affectedObjectType,omitempty"`
13004	// InstanceType - Possible values include: 'InstanceTypeEventSpecificDetails', 'InstanceTypeJobStatus'
13005	InstanceType InstanceTypeBasicEventSpecificDetails `json:"instanceType,omitempty"`
13006}
13007
13008// MarshalJSON is the custom marshaler for JobStatusEventDetails.
13009func (jsed JobStatusEventDetails) MarshalJSON() ([]byte, error) {
13010	jsed.InstanceType = InstanceTypeJobStatus
13011	objectMap := make(map[string]interface{})
13012	if jsed.JobID != nil {
13013		objectMap["jobId"] = jsed.JobID
13014	}
13015	if jsed.JobFriendlyName != nil {
13016		objectMap["jobFriendlyName"] = jsed.JobFriendlyName
13017	}
13018	if jsed.JobStatus != nil {
13019		objectMap["jobStatus"] = jsed.JobStatus
13020	}
13021	if jsed.AffectedObjectType != nil {
13022		objectMap["affectedObjectType"] = jsed.AffectedObjectType
13023	}
13024	if jsed.InstanceType != "" {
13025		objectMap["instanceType"] = jsed.InstanceType
13026	}
13027	return json.Marshal(objectMap)
13028}
13029
13030// AsJobStatusEventDetails is the BasicEventSpecificDetails implementation for JobStatusEventDetails.
13031func (jsed JobStatusEventDetails) AsJobStatusEventDetails() (*JobStatusEventDetails, bool) {
13032	return &jsed, true
13033}
13034
13035// AsEventSpecificDetails is the BasicEventSpecificDetails implementation for JobStatusEventDetails.
13036func (jsed JobStatusEventDetails) AsEventSpecificDetails() (*EventSpecificDetails, bool) {
13037	return nil, false
13038}
13039
13040// AsBasicEventSpecificDetails is the BasicEventSpecificDetails implementation for JobStatusEventDetails.
13041func (jsed JobStatusEventDetails) AsBasicEventSpecificDetails() (BasicEventSpecificDetails, bool) {
13042	return &jsed, true
13043}
13044
13045// JobTaskDetails this class represents a task which is actually a workflow so that one can navigate to its
13046// individual drill down.
13047type JobTaskDetails struct {
13048	// JobTask - The job entity.
13049	JobTask *JobEntity `json:"jobTask,omitempty"`
13050	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
13051	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
13052}
13053
13054// MarshalJSON is the custom marshaler for JobTaskDetails.
13055func (jtd JobTaskDetails) MarshalJSON() ([]byte, error) {
13056	jtd.InstanceType = InstanceTypeJobTaskDetails
13057	objectMap := make(map[string]interface{})
13058	if jtd.JobTask != nil {
13059		objectMap["jobTask"] = jtd.JobTask
13060	}
13061	if jtd.InstanceType != "" {
13062		objectMap["instanceType"] = jtd.InstanceType
13063	}
13064	return json.Marshal(objectMap)
13065}
13066
13067// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13068func (jtd JobTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
13069	return nil, false
13070}
13071
13072// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13073func (jtd JobTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
13074	return nil, false
13075}
13076
13077// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13078func (jtd JobTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
13079	return nil, false
13080}
13081
13082// AsJobTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13083func (jtd JobTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
13084	return &jtd, true
13085}
13086
13087// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13088func (jtd JobTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
13089	return nil, false
13090}
13091
13092// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13093func (jtd JobTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
13094	return nil, false
13095}
13096
13097// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13098func (jtd JobTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
13099	return nil, false
13100}
13101
13102// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13103func (jtd JobTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
13104	return nil, false
13105}
13106
13107// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13108func (jtd JobTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
13109	return nil, false
13110}
13111
13112// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13113func (jtd JobTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
13114	return &jtd, true
13115}
13116
13117// KeyEncryptionKeyInfo key Encryption Key (KEK) information.
13118type KeyEncryptionKeyInfo struct {
13119	// KeyIdentifier - The key URL / identifier.
13120	KeyIdentifier *string `json:"keyIdentifier,omitempty"`
13121	// KeyVaultResourceArmID - The KeyVault resource ARM Id for key.
13122	KeyVaultResourceArmID *string `json:"keyVaultResourceArmId,omitempty"`
13123}
13124
13125// LogicalNetwork logical network data model.
13126type LogicalNetwork struct {
13127	autorest.Response `json:"-"`
13128	// Properties - The Logical Network Properties.
13129	Properties *LogicalNetworkProperties `json:"properties,omitempty"`
13130	// ID - READ-ONLY; Resource Id
13131	ID *string `json:"id,omitempty"`
13132	// Name - READ-ONLY; Resource Name
13133	Name *string `json:"name,omitempty"`
13134	// Type - READ-ONLY; Resource Type
13135	Type *string `json:"type,omitempty"`
13136	// Location - Resource Location
13137	Location *string `json:"location,omitempty"`
13138}
13139
13140// MarshalJSON is the custom marshaler for LogicalNetwork.
13141func (ln LogicalNetwork) MarshalJSON() ([]byte, error) {
13142	objectMap := make(map[string]interface{})
13143	if ln.Properties != nil {
13144		objectMap["properties"] = ln.Properties
13145	}
13146	if ln.Location != nil {
13147		objectMap["location"] = ln.Location
13148	}
13149	return json.Marshal(objectMap)
13150}
13151
13152// LogicalNetworkCollection list of logical networks.
13153type LogicalNetworkCollection struct {
13154	autorest.Response `json:"-"`
13155	// Value - The Logical Networks list details.
13156	Value *[]LogicalNetwork `json:"value,omitempty"`
13157	// NextLink - The value of next link.
13158	NextLink *string `json:"nextLink,omitempty"`
13159}
13160
13161// LogicalNetworkCollectionIterator provides access to a complete listing of LogicalNetwork values.
13162type LogicalNetworkCollectionIterator struct {
13163	i    int
13164	page LogicalNetworkCollectionPage
13165}
13166
13167// NextWithContext advances to the next value.  If there was an error making
13168// the request the iterator does not advance and the error is returned.
13169func (iter *LogicalNetworkCollectionIterator) NextWithContext(ctx context.Context) (err error) {
13170	if tracing.IsEnabled() {
13171		ctx = tracing.StartSpan(ctx, fqdn+"/LogicalNetworkCollectionIterator.NextWithContext")
13172		defer func() {
13173			sc := -1
13174			if iter.Response().Response.Response != nil {
13175				sc = iter.Response().Response.Response.StatusCode
13176			}
13177			tracing.EndSpan(ctx, sc, err)
13178		}()
13179	}
13180	iter.i++
13181	if iter.i < len(iter.page.Values()) {
13182		return nil
13183	}
13184	err = iter.page.NextWithContext(ctx)
13185	if err != nil {
13186		iter.i--
13187		return err
13188	}
13189	iter.i = 0
13190	return nil
13191}
13192
13193// Next advances to the next value.  If there was an error making
13194// the request the iterator does not advance and the error is returned.
13195// Deprecated: Use NextWithContext() instead.
13196func (iter *LogicalNetworkCollectionIterator) Next() error {
13197	return iter.NextWithContext(context.Background())
13198}
13199
13200// NotDone returns true if the enumeration should be started or is not yet complete.
13201func (iter LogicalNetworkCollectionIterator) NotDone() bool {
13202	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13203}
13204
13205// Response returns the raw server response from the last page request.
13206func (iter LogicalNetworkCollectionIterator) Response() LogicalNetworkCollection {
13207	return iter.page.Response()
13208}
13209
13210// Value returns the current value or a zero-initialized value if the
13211// iterator has advanced beyond the end of the collection.
13212func (iter LogicalNetworkCollectionIterator) Value() LogicalNetwork {
13213	if !iter.page.NotDone() {
13214		return LogicalNetwork{}
13215	}
13216	return iter.page.Values()[iter.i]
13217}
13218
13219// Creates a new instance of the LogicalNetworkCollectionIterator type.
13220func NewLogicalNetworkCollectionIterator(page LogicalNetworkCollectionPage) LogicalNetworkCollectionIterator {
13221	return LogicalNetworkCollectionIterator{page: page}
13222}
13223
13224// IsEmpty returns true if the ListResult contains no values.
13225func (lnc LogicalNetworkCollection) IsEmpty() bool {
13226	return lnc.Value == nil || len(*lnc.Value) == 0
13227}
13228
13229// hasNextLink returns true if the NextLink is not empty.
13230func (lnc LogicalNetworkCollection) hasNextLink() bool {
13231	return lnc.NextLink != nil && len(*lnc.NextLink) != 0
13232}
13233
13234// logicalNetworkCollectionPreparer prepares a request to retrieve the next set of results.
13235// It returns nil if no more results exist.
13236func (lnc LogicalNetworkCollection) logicalNetworkCollectionPreparer(ctx context.Context) (*http.Request, error) {
13237	if !lnc.hasNextLink() {
13238		return nil, nil
13239	}
13240	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13241		autorest.AsJSON(),
13242		autorest.AsGet(),
13243		autorest.WithBaseURL(to.String(lnc.NextLink)))
13244}
13245
13246// LogicalNetworkCollectionPage contains a page of LogicalNetwork values.
13247type LogicalNetworkCollectionPage struct {
13248	fn  func(context.Context, LogicalNetworkCollection) (LogicalNetworkCollection, error)
13249	lnc LogicalNetworkCollection
13250}
13251
13252// NextWithContext advances to the next page of values.  If there was an error making
13253// the request the page does not advance and the error is returned.
13254func (page *LogicalNetworkCollectionPage) NextWithContext(ctx context.Context) (err error) {
13255	if tracing.IsEnabled() {
13256		ctx = tracing.StartSpan(ctx, fqdn+"/LogicalNetworkCollectionPage.NextWithContext")
13257		defer func() {
13258			sc := -1
13259			if page.Response().Response.Response != nil {
13260				sc = page.Response().Response.Response.StatusCode
13261			}
13262			tracing.EndSpan(ctx, sc, err)
13263		}()
13264	}
13265	for {
13266		next, err := page.fn(ctx, page.lnc)
13267		if err != nil {
13268			return err
13269		}
13270		page.lnc = next
13271		if !next.hasNextLink() || !next.IsEmpty() {
13272			break
13273		}
13274	}
13275	return nil
13276}
13277
13278// Next advances to the next page of values.  If there was an error making
13279// the request the page does not advance and the error is returned.
13280// Deprecated: Use NextWithContext() instead.
13281func (page *LogicalNetworkCollectionPage) Next() error {
13282	return page.NextWithContext(context.Background())
13283}
13284
13285// NotDone returns true if the page enumeration should be started or is not yet complete.
13286func (page LogicalNetworkCollectionPage) NotDone() bool {
13287	return !page.lnc.IsEmpty()
13288}
13289
13290// Response returns the raw server response from the last page request.
13291func (page LogicalNetworkCollectionPage) Response() LogicalNetworkCollection {
13292	return page.lnc
13293}
13294
13295// Values returns the slice of values for the current page or nil if there are no values.
13296func (page LogicalNetworkCollectionPage) Values() []LogicalNetwork {
13297	if page.lnc.IsEmpty() {
13298		return nil
13299	}
13300	return *page.lnc.Value
13301}
13302
13303// Creates a new instance of the LogicalNetworkCollectionPage type.
13304func NewLogicalNetworkCollectionPage(cur LogicalNetworkCollection, getNextPage func(context.Context, LogicalNetworkCollection) (LogicalNetworkCollection, error)) LogicalNetworkCollectionPage {
13305	return LogicalNetworkCollectionPage{
13306		fn:  getNextPage,
13307		lnc: cur,
13308	}
13309}
13310
13311// LogicalNetworkProperties logical Network Properties.
13312type LogicalNetworkProperties struct {
13313	// FriendlyName - The Friendly Name.
13314	FriendlyName *string `json:"friendlyName,omitempty"`
13315	// NetworkVirtualizationStatus - A value indicating whether Network Virtualization is enabled for the logical network.
13316	NetworkVirtualizationStatus *string `json:"networkVirtualizationStatus,omitempty"`
13317	// LogicalNetworkUsage - A value indicating whether logical network is used as private test network by test failover.
13318	LogicalNetworkUsage *string `json:"logicalNetworkUsage,omitempty"`
13319	// LogicalNetworkDefinitionsStatus - A value indicating whether logical network definitions are isolated.
13320	LogicalNetworkDefinitionsStatus *string `json:"logicalNetworkDefinitionsStatus,omitempty"`
13321}
13322
13323// ManualActionTaskDetails this class represents the manual action task details.
13324type ManualActionTaskDetails struct {
13325	// Name - The name.
13326	Name *string `json:"name,omitempty"`
13327	// Instructions - The instructions.
13328	Instructions *string `json:"instructions,omitempty"`
13329	// Observation - The observation.
13330	Observation *string `json:"observation,omitempty"`
13331	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
13332	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
13333}
13334
13335// MarshalJSON is the custom marshaler for ManualActionTaskDetails.
13336func (matd ManualActionTaskDetails) MarshalJSON() ([]byte, error) {
13337	matd.InstanceType = InstanceTypeManualActionTaskDetails
13338	objectMap := make(map[string]interface{})
13339	if matd.Name != nil {
13340		objectMap["name"] = matd.Name
13341	}
13342	if matd.Instructions != nil {
13343		objectMap["instructions"] = matd.Instructions
13344	}
13345	if matd.Observation != nil {
13346		objectMap["observation"] = matd.Observation
13347	}
13348	if matd.InstanceType != "" {
13349		objectMap["instanceType"] = matd.InstanceType
13350	}
13351	return json.Marshal(objectMap)
13352}
13353
13354// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13355func (matd ManualActionTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
13356	return nil, false
13357}
13358
13359// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13360func (matd ManualActionTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
13361	return nil, false
13362}
13363
13364// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13365func (matd ManualActionTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
13366	return nil, false
13367}
13368
13369// AsJobTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13370func (matd ManualActionTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
13371	return nil, false
13372}
13373
13374// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13375func (matd ManualActionTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
13376	return &matd, true
13377}
13378
13379// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13380func (matd ManualActionTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
13381	return nil, false
13382}
13383
13384// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13385func (matd ManualActionTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
13386	return nil, false
13387}
13388
13389// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13390func (matd ManualActionTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
13391	return nil, false
13392}
13393
13394// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13395func (matd ManualActionTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
13396	return nil, false
13397}
13398
13399// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13400func (matd ManualActionTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
13401	return &matd, true
13402}
13403
13404// MasterTargetServer details of a Master Target Server.
13405type MasterTargetServer struct {
13406	// ID - The server Id.
13407	ID *string `json:"id,omitempty"`
13408	// IPAddress - The IP address of the server.
13409	IPAddress *string `json:"ipAddress,omitempty"`
13410	// Name - The server name.
13411	Name *string `json:"name,omitempty"`
13412	// OsType - The OS type of the server.
13413	OsType *string `json:"osType,omitempty"`
13414	// AgentVersion - The version of the scout component on the server.
13415	AgentVersion *string `json:"agentVersion,omitempty"`
13416	// LastHeartbeat - The last heartbeat received from the server.
13417	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
13418	// VersionStatus - Version status
13419	VersionStatus *string `json:"versionStatus,omitempty"`
13420	// RetentionVolumes - The retention volumes of Master target Server.
13421	RetentionVolumes *[]RetentionVolume `json:"retentionVolumes,omitempty"`
13422	// DataStores - The list of data stores in the fabric.
13423	DataStores *[]DataStore `json:"dataStores,omitempty"`
13424	// ValidationErrors - Validation errors.
13425	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
13426	// HealthErrors - Health errors.
13427	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
13428	// DiskCount - Disk count of the master target.
13429	DiskCount *int32 `json:"diskCount,omitempty"`
13430	// OsVersion - OS Version of the master target.
13431	OsVersion *string `json:"osVersion,omitempty"`
13432	// AgentExpiryDate - Agent expiry date.
13433	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
13434	// MarsAgentVersion - MARS agent version.
13435	MarsAgentVersion *string `json:"marsAgentVersion,omitempty"`
13436	// MarsAgentExpiryDate - MARS agent expiry date.
13437	MarsAgentExpiryDate *date.Time `json:"marsAgentExpiryDate,omitempty"`
13438	// AgentVersionDetails - Agent version details.
13439	AgentVersionDetails *VersionDetails `json:"agentVersionDetails,omitempty"`
13440	// MarsAgentVersionDetails - Mars agent version details.
13441	MarsAgentVersionDetails *VersionDetails `json:"marsAgentVersionDetails,omitempty"`
13442}
13443
13444// MigrateInput input for migrate.
13445type MigrateInput struct {
13446	// Properties - Migrate input properties.
13447	Properties *MigrateInputProperties `json:"properties,omitempty"`
13448}
13449
13450// MigrateInputProperties migrate input properties.
13451type MigrateInputProperties struct {
13452	// ProviderSpecificDetails - The provider specific details.
13453	ProviderSpecificDetails BasicMigrateProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
13454}
13455
13456// UnmarshalJSON is the custom unmarshaler for MigrateInputProperties struct.
13457func (mip *MigrateInputProperties) UnmarshalJSON(body []byte) error {
13458	var m map[string]*json.RawMessage
13459	err := json.Unmarshal(body, &m)
13460	if err != nil {
13461		return err
13462	}
13463	for k, v := range m {
13464		switch k {
13465		case "providerSpecificDetails":
13466			if v != nil {
13467				providerSpecificDetails, err := unmarshalBasicMigrateProviderSpecificInput(*v)
13468				if err != nil {
13469					return err
13470				}
13471				mip.ProviderSpecificDetails = providerSpecificDetails
13472			}
13473		}
13474	}
13475
13476	return nil
13477}
13478
13479// BasicMigrateProviderSpecificInput migrate provider specific input.
13480type BasicMigrateProviderSpecificInput interface {
13481	AsVMwareCbtMigrateInput() (*VMwareCbtMigrateInput, bool)
13482	AsMigrateProviderSpecificInput() (*MigrateProviderSpecificInput, bool)
13483}
13484
13485// MigrateProviderSpecificInput migrate provider specific input.
13486type MigrateProviderSpecificInput struct {
13487	// InstanceType - Possible values include: 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeMigrateProviderSpecificInput', 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt'
13488	InstanceType InstanceTypeBasicMigrateProviderSpecificInput `json:"instanceType,omitempty"`
13489}
13490
13491func unmarshalBasicMigrateProviderSpecificInput(body []byte) (BasicMigrateProviderSpecificInput, error) {
13492	var m map[string]interface{}
13493	err := json.Unmarshal(body, &m)
13494	if err != nil {
13495		return nil, err
13496	}
13497
13498	switch m["instanceType"] {
13499	case string(InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt):
13500		var vmcmi VMwareCbtMigrateInput
13501		err := json.Unmarshal(body, &vmcmi)
13502		return vmcmi, err
13503	default:
13504		var mpsi MigrateProviderSpecificInput
13505		err := json.Unmarshal(body, &mpsi)
13506		return mpsi, err
13507	}
13508}
13509func unmarshalBasicMigrateProviderSpecificInputArray(body []byte) ([]BasicMigrateProviderSpecificInput, error) {
13510	var rawMessages []*json.RawMessage
13511	err := json.Unmarshal(body, &rawMessages)
13512	if err != nil {
13513		return nil, err
13514	}
13515
13516	mpsiArray := make([]BasicMigrateProviderSpecificInput, len(rawMessages))
13517
13518	for index, rawMessage := range rawMessages {
13519		mpsi, err := unmarshalBasicMigrateProviderSpecificInput(*rawMessage)
13520		if err != nil {
13521			return nil, err
13522		}
13523		mpsiArray[index] = mpsi
13524	}
13525	return mpsiArray, nil
13526}
13527
13528// MarshalJSON is the custom marshaler for MigrateProviderSpecificInput.
13529func (mpsi MigrateProviderSpecificInput) MarshalJSON() ([]byte, error) {
13530	mpsi.InstanceType = InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeMigrateProviderSpecificInput
13531	objectMap := make(map[string]interface{})
13532	if mpsi.InstanceType != "" {
13533		objectMap["instanceType"] = mpsi.InstanceType
13534	}
13535	return json.Marshal(objectMap)
13536}
13537
13538// AsVMwareCbtMigrateInput is the BasicMigrateProviderSpecificInput implementation for MigrateProviderSpecificInput.
13539func (mpsi MigrateProviderSpecificInput) AsVMwareCbtMigrateInput() (*VMwareCbtMigrateInput, bool) {
13540	return nil, false
13541}
13542
13543// AsMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for MigrateProviderSpecificInput.
13544func (mpsi MigrateProviderSpecificInput) AsMigrateProviderSpecificInput() (*MigrateProviderSpecificInput, bool) {
13545	return &mpsi, true
13546}
13547
13548// AsBasicMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for MigrateProviderSpecificInput.
13549func (mpsi MigrateProviderSpecificInput) AsBasicMigrateProviderSpecificInput() (BasicMigrateProviderSpecificInput, bool) {
13550	return &mpsi, true
13551}
13552
13553// MigrationItem migration item.
13554type MigrationItem struct {
13555	autorest.Response `json:"-"`
13556	// Properties - The migration item properties.
13557	Properties *MigrationItemProperties `json:"properties,omitempty"`
13558	// ID - READ-ONLY; Resource Id
13559	ID *string `json:"id,omitempty"`
13560	// Name - READ-ONLY; Resource Name
13561	Name *string `json:"name,omitempty"`
13562	// Type - READ-ONLY; Resource Type
13563	Type *string `json:"type,omitempty"`
13564	// Location - Resource Location
13565	Location *string `json:"location,omitempty"`
13566}
13567
13568// MarshalJSON is the custom marshaler for MigrationItem.
13569func (mi MigrationItem) MarshalJSON() ([]byte, error) {
13570	objectMap := make(map[string]interface{})
13571	if mi.Properties != nil {
13572		objectMap["properties"] = mi.Properties
13573	}
13574	if mi.Location != nil {
13575		objectMap["location"] = mi.Location
13576	}
13577	return json.Marshal(objectMap)
13578}
13579
13580// MigrationItemCollection migration item collection.
13581type MigrationItemCollection struct {
13582	autorest.Response `json:"-"`
13583	// Value - The list of migration items.
13584	Value *[]MigrationItem `json:"value,omitempty"`
13585	// NextLink - The value of next link.
13586	NextLink *string `json:"nextLink,omitempty"`
13587}
13588
13589// MigrationItemCollectionIterator provides access to a complete listing of MigrationItem values.
13590type MigrationItemCollectionIterator struct {
13591	i    int
13592	page MigrationItemCollectionPage
13593}
13594
13595// NextWithContext advances to the next value.  If there was an error making
13596// the request the iterator does not advance and the error is returned.
13597func (iter *MigrationItemCollectionIterator) NextWithContext(ctx context.Context) (err error) {
13598	if tracing.IsEnabled() {
13599		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationItemCollectionIterator.NextWithContext")
13600		defer func() {
13601			sc := -1
13602			if iter.Response().Response.Response != nil {
13603				sc = iter.Response().Response.Response.StatusCode
13604			}
13605			tracing.EndSpan(ctx, sc, err)
13606		}()
13607	}
13608	iter.i++
13609	if iter.i < len(iter.page.Values()) {
13610		return nil
13611	}
13612	err = iter.page.NextWithContext(ctx)
13613	if err != nil {
13614		iter.i--
13615		return err
13616	}
13617	iter.i = 0
13618	return nil
13619}
13620
13621// Next advances to the next value.  If there was an error making
13622// the request the iterator does not advance and the error is returned.
13623// Deprecated: Use NextWithContext() instead.
13624func (iter *MigrationItemCollectionIterator) Next() error {
13625	return iter.NextWithContext(context.Background())
13626}
13627
13628// NotDone returns true if the enumeration should be started or is not yet complete.
13629func (iter MigrationItemCollectionIterator) NotDone() bool {
13630	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13631}
13632
13633// Response returns the raw server response from the last page request.
13634func (iter MigrationItemCollectionIterator) Response() MigrationItemCollection {
13635	return iter.page.Response()
13636}
13637
13638// Value returns the current value or a zero-initialized value if the
13639// iterator has advanced beyond the end of the collection.
13640func (iter MigrationItemCollectionIterator) Value() MigrationItem {
13641	if !iter.page.NotDone() {
13642		return MigrationItem{}
13643	}
13644	return iter.page.Values()[iter.i]
13645}
13646
13647// Creates a new instance of the MigrationItemCollectionIterator type.
13648func NewMigrationItemCollectionIterator(page MigrationItemCollectionPage) MigrationItemCollectionIterator {
13649	return MigrationItemCollectionIterator{page: page}
13650}
13651
13652// IsEmpty returns true if the ListResult contains no values.
13653func (mic MigrationItemCollection) IsEmpty() bool {
13654	return mic.Value == nil || len(*mic.Value) == 0
13655}
13656
13657// hasNextLink returns true if the NextLink is not empty.
13658func (mic MigrationItemCollection) hasNextLink() bool {
13659	return mic.NextLink != nil && len(*mic.NextLink) != 0
13660}
13661
13662// migrationItemCollectionPreparer prepares a request to retrieve the next set of results.
13663// It returns nil if no more results exist.
13664func (mic MigrationItemCollection) migrationItemCollectionPreparer(ctx context.Context) (*http.Request, error) {
13665	if !mic.hasNextLink() {
13666		return nil, nil
13667	}
13668	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13669		autorest.AsJSON(),
13670		autorest.AsGet(),
13671		autorest.WithBaseURL(to.String(mic.NextLink)))
13672}
13673
13674// MigrationItemCollectionPage contains a page of MigrationItem values.
13675type MigrationItemCollectionPage struct {
13676	fn  func(context.Context, MigrationItemCollection) (MigrationItemCollection, error)
13677	mic MigrationItemCollection
13678}
13679
13680// NextWithContext advances to the next page of values.  If there was an error making
13681// the request the page does not advance and the error is returned.
13682func (page *MigrationItemCollectionPage) NextWithContext(ctx context.Context) (err error) {
13683	if tracing.IsEnabled() {
13684		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationItemCollectionPage.NextWithContext")
13685		defer func() {
13686			sc := -1
13687			if page.Response().Response.Response != nil {
13688				sc = page.Response().Response.Response.StatusCode
13689			}
13690			tracing.EndSpan(ctx, sc, err)
13691		}()
13692	}
13693	for {
13694		next, err := page.fn(ctx, page.mic)
13695		if err != nil {
13696			return err
13697		}
13698		page.mic = next
13699		if !next.hasNextLink() || !next.IsEmpty() {
13700			break
13701		}
13702	}
13703	return nil
13704}
13705
13706// Next advances to the next page of values.  If there was an error making
13707// the request the page does not advance and the error is returned.
13708// Deprecated: Use NextWithContext() instead.
13709func (page *MigrationItemCollectionPage) Next() error {
13710	return page.NextWithContext(context.Background())
13711}
13712
13713// NotDone returns true if the page enumeration should be started or is not yet complete.
13714func (page MigrationItemCollectionPage) NotDone() bool {
13715	return !page.mic.IsEmpty()
13716}
13717
13718// Response returns the raw server response from the last page request.
13719func (page MigrationItemCollectionPage) Response() MigrationItemCollection {
13720	return page.mic
13721}
13722
13723// Values returns the slice of values for the current page or nil if there are no values.
13724func (page MigrationItemCollectionPage) Values() []MigrationItem {
13725	if page.mic.IsEmpty() {
13726		return nil
13727	}
13728	return *page.mic.Value
13729}
13730
13731// Creates a new instance of the MigrationItemCollectionPage type.
13732func NewMigrationItemCollectionPage(cur MigrationItemCollection, getNextPage func(context.Context, MigrationItemCollection) (MigrationItemCollection, error)) MigrationItemCollectionPage {
13733	return MigrationItemCollectionPage{
13734		fn:  getNextPage,
13735		mic: cur,
13736	}
13737}
13738
13739// MigrationItemProperties migration item properties.
13740type MigrationItemProperties struct {
13741	// MachineName - READ-ONLY; The on-premise virtual machine name.
13742	MachineName *string `json:"machineName,omitempty"`
13743	// PolicyID - READ-ONLY; The ARM Id of policy governing this item.
13744	PolicyID *string `json:"policyId,omitempty"`
13745	// PolicyFriendlyName - READ-ONLY; The name of policy governing this item.
13746	PolicyFriendlyName *string `json:"policyFriendlyName,omitempty"`
13747	// RecoveryServicesProviderID - READ-ONLY; The recovery services provider ARM Id.
13748	RecoveryServicesProviderID *string `json:"recoveryServicesProviderId,omitempty"`
13749	// MigrationState - READ-ONLY; The migration status. Possible values include: 'MigrationStateNone', 'MigrationStateEnableMigrationInProgress', 'MigrationStateEnableMigrationFailed', 'MigrationStateDisableMigrationInProgress', 'MigrationStateDisableMigrationFailed', 'MigrationStateInitialSeedingInProgress', 'MigrationStateInitialSeedingFailed', 'MigrationStateReplicating', 'MigrationStateMigrationInProgress', 'MigrationStateMigrationSucceeded', 'MigrationStateMigrationFailed'
13750	MigrationState MigrationState `json:"migrationState,omitempty"`
13751	// MigrationStateDescription - READ-ONLY; The migration state description.
13752	MigrationStateDescription *string `json:"migrationStateDescription,omitempty"`
13753	// TestMigrateState - READ-ONLY; The test migrate state. Possible values include: 'TestMigrationStateNone', 'TestMigrationStateTestMigrationInProgress', 'TestMigrationStateTestMigrationSucceeded', 'TestMigrationStateTestMigrationFailed', 'TestMigrationStateTestMigrationCleanupInProgress'
13754	TestMigrateState TestMigrationState `json:"testMigrateState,omitempty"`
13755	// TestMigrateStateDescription - READ-ONLY; The test migrate state description.
13756	TestMigrateStateDescription *string `json:"testMigrateStateDescription,omitempty"`
13757	// Health - READ-ONLY; The consolidated health.
13758	Health *string `json:"health,omitempty"`
13759	// HealthErrors - READ-ONLY; The list of health errors.
13760	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
13761	// AllowedOperations - READ-ONLY; The allowed operations on the migration item, based on the current migration state of the item.
13762	AllowedOperations *[]MigrationItemOperation `json:"allowedOperations,omitempty"`
13763	// CurrentJob - READ-ONLY; The current job details.
13764	CurrentJob *CurrentJobDetails `json:"currentJob,omitempty"`
13765	// ProviderSpecificDetails - The migration provider custom settings.
13766	ProviderSpecificDetails BasicMigrationProviderSpecificSettings `json:"providerSpecificDetails,omitempty"`
13767}
13768
13769// MarshalJSON is the custom marshaler for MigrationItemProperties.
13770func (mip MigrationItemProperties) MarshalJSON() ([]byte, error) {
13771	objectMap := make(map[string]interface{})
13772	objectMap["providerSpecificDetails"] = mip.ProviderSpecificDetails
13773	return json.Marshal(objectMap)
13774}
13775
13776// UnmarshalJSON is the custom unmarshaler for MigrationItemProperties struct.
13777func (mip *MigrationItemProperties) UnmarshalJSON(body []byte) error {
13778	var m map[string]*json.RawMessage
13779	err := json.Unmarshal(body, &m)
13780	if err != nil {
13781		return err
13782	}
13783	for k, v := range m {
13784		switch k {
13785		case "machineName":
13786			if v != nil {
13787				var machineName string
13788				err = json.Unmarshal(*v, &machineName)
13789				if err != nil {
13790					return err
13791				}
13792				mip.MachineName = &machineName
13793			}
13794		case "policyId":
13795			if v != nil {
13796				var policyID string
13797				err = json.Unmarshal(*v, &policyID)
13798				if err != nil {
13799					return err
13800				}
13801				mip.PolicyID = &policyID
13802			}
13803		case "policyFriendlyName":
13804			if v != nil {
13805				var policyFriendlyName string
13806				err = json.Unmarshal(*v, &policyFriendlyName)
13807				if err != nil {
13808					return err
13809				}
13810				mip.PolicyFriendlyName = &policyFriendlyName
13811			}
13812		case "recoveryServicesProviderId":
13813			if v != nil {
13814				var recoveryServicesProviderID string
13815				err = json.Unmarshal(*v, &recoveryServicesProviderID)
13816				if err != nil {
13817					return err
13818				}
13819				mip.RecoveryServicesProviderID = &recoveryServicesProviderID
13820			}
13821		case "migrationState":
13822			if v != nil {
13823				var migrationState MigrationState
13824				err = json.Unmarshal(*v, &migrationState)
13825				if err != nil {
13826					return err
13827				}
13828				mip.MigrationState = migrationState
13829			}
13830		case "migrationStateDescription":
13831			if v != nil {
13832				var migrationStateDescription string
13833				err = json.Unmarshal(*v, &migrationStateDescription)
13834				if err != nil {
13835					return err
13836				}
13837				mip.MigrationStateDescription = &migrationStateDescription
13838			}
13839		case "testMigrateState":
13840			if v != nil {
13841				var testMigrateState TestMigrationState
13842				err = json.Unmarshal(*v, &testMigrateState)
13843				if err != nil {
13844					return err
13845				}
13846				mip.TestMigrateState = testMigrateState
13847			}
13848		case "testMigrateStateDescription":
13849			if v != nil {
13850				var testMigrateStateDescription string
13851				err = json.Unmarshal(*v, &testMigrateStateDescription)
13852				if err != nil {
13853					return err
13854				}
13855				mip.TestMigrateStateDescription = &testMigrateStateDescription
13856			}
13857		case "health":
13858			if v != nil {
13859				var health string
13860				err = json.Unmarshal(*v, &health)
13861				if err != nil {
13862					return err
13863				}
13864				mip.Health = &health
13865			}
13866		case "healthErrors":
13867			if v != nil {
13868				var healthErrors []HealthError
13869				err = json.Unmarshal(*v, &healthErrors)
13870				if err != nil {
13871					return err
13872				}
13873				mip.HealthErrors = &healthErrors
13874			}
13875		case "allowedOperations":
13876			if v != nil {
13877				var allowedOperations []MigrationItemOperation
13878				err = json.Unmarshal(*v, &allowedOperations)
13879				if err != nil {
13880					return err
13881				}
13882				mip.AllowedOperations = &allowedOperations
13883			}
13884		case "currentJob":
13885			if v != nil {
13886				var currentJob CurrentJobDetails
13887				err = json.Unmarshal(*v, &currentJob)
13888				if err != nil {
13889					return err
13890				}
13891				mip.CurrentJob = &currentJob
13892			}
13893		case "providerSpecificDetails":
13894			if v != nil {
13895				providerSpecificDetails, err := unmarshalBasicMigrationProviderSpecificSettings(*v)
13896				if err != nil {
13897					return err
13898				}
13899				mip.ProviderSpecificDetails = providerSpecificDetails
13900			}
13901		}
13902	}
13903
13904	return nil
13905}
13906
13907// MigrationItemsQueryParameter query parameter to enumerate migration items.
13908type MigrationItemsQueryParameter struct {
13909	// SourceFabricName - The source fabric name filter.
13910	SourceFabricName *string `json:"sourceFabricName,omitempty"`
13911	// InstanceType - The replication provider type.
13912	InstanceType *string `json:"instanceType,omitempty"`
13913}
13914
13915// BasicMigrationProviderSpecificSettings migration provider specific settings.
13916type BasicMigrationProviderSpecificSettings interface {
13917	AsVMwareCbtMigrationDetails() (*VMwareCbtMigrationDetails, bool)
13918	AsMigrationProviderSpecificSettings() (*MigrationProviderSpecificSettings, bool)
13919}
13920
13921// MigrationProviderSpecificSettings migration provider specific settings.
13922type MigrationProviderSpecificSettings struct {
13923	// InstanceType - Possible values include: 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeMigrationProviderSpecificSettings', 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt'
13924	InstanceType InstanceTypeBasicMigrationProviderSpecificSettings `json:"instanceType,omitempty"`
13925}
13926
13927func unmarshalBasicMigrationProviderSpecificSettings(body []byte) (BasicMigrationProviderSpecificSettings, error) {
13928	var m map[string]interface{}
13929	err := json.Unmarshal(body, &m)
13930	if err != nil {
13931		return nil, err
13932	}
13933
13934	switch m["instanceType"] {
13935	case string(InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt):
13936		var vmcmd VMwareCbtMigrationDetails
13937		err := json.Unmarshal(body, &vmcmd)
13938		return vmcmd, err
13939	default:
13940		var mpss MigrationProviderSpecificSettings
13941		err := json.Unmarshal(body, &mpss)
13942		return mpss, err
13943	}
13944}
13945func unmarshalBasicMigrationProviderSpecificSettingsArray(body []byte) ([]BasicMigrationProviderSpecificSettings, error) {
13946	var rawMessages []*json.RawMessage
13947	err := json.Unmarshal(body, &rawMessages)
13948	if err != nil {
13949		return nil, err
13950	}
13951
13952	mpssArray := make([]BasicMigrationProviderSpecificSettings, len(rawMessages))
13953
13954	for index, rawMessage := range rawMessages {
13955		mpss, err := unmarshalBasicMigrationProviderSpecificSettings(*rawMessage)
13956		if err != nil {
13957			return nil, err
13958		}
13959		mpssArray[index] = mpss
13960	}
13961	return mpssArray, nil
13962}
13963
13964// MarshalJSON is the custom marshaler for MigrationProviderSpecificSettings.
13965func (mpss MigrationProviderSpecificSettings) MarshalJSON() ([]byte, error) {
13966	mpss.InstanceType = InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeMigrationProviderSpecificSettings
13967	objectMap := make(map[string]interface{})
13968	if mpss.InstanceType != "" {
13969		objectMap["instanceType"] = mpss.InstanceType
13970	}
13971	return json.Marshal(objectMap)
13972}
13973
13974// AsVMwareCbtMigrationDetails is the BasicMigrationProviderSpecificSettings implementation for MigrationProviderSpecificSettings.
13975func (mpss MigrationProviderSpecificSettings) AsVMwareCbtMigrationDetails() (*VMwareCbtMigrationDetails, bool) {
13976	return nil, false
13977}
13978
13979// AsMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for MigrationProviderSpecificSettings.
13980func (mpss MigrationProviderSpecificSettings) AsMigrationProviderSpecificSettings() (*MigrationProviderSpecificSettings, bool) {
13981	return &mpss, true
13982}
13983
13984// AsBasicMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for MigrationProviderSpecificSettings.
13985func (mpss MigrationProviderSpecificSettings) AsBasicMigrationProviderSpecificSettings() (BasicMigrationProviderSpecificSettings, bool) {
13986	return &mpss, true
13987}
13988
13989// MigrationRecoveryPoint recovery point for a migration item.
13990type MigrationRecoveryPoint struct {
13991	autorest.Response `json:"-"`
13992	// Properties - Recovery point properties.
13993	Properties *MigrationRecoveryPointProperties `json:"properties,omitempty"`
13994	// ID - READ-ONLY; Resource Id
13995	ID *string `json:"id,omitempty"`
13996	// Name - READ-ONLY; Resource Name
13997	Name *string `json:"name,omitempty"`
13998	// Type - READ-ONLY; Resource Type
13999	Type *string `json:"type,omitempty"`
14000	// Location - Resource Location
14001	Location *string `json:"location,omitempty"`
14002}
14003
14004// MarshalJSON is the custom marshaler for MigrationRecoveryPoint.
14005func (mrp MigrationRecoveryPoint) MarshalJSON() ([]byte, error) {
14006	objectMap := make(map[string]interface{})
14007	if mrp.Properties != nil {
14008		objectMap["properties"] = mrp.Properties
14009	}
14010	if mrp.Location != nil {
14011		objectMap["location"] = mrp.Location
14012	}
14013	return json.Marshal(objectMap)
14014}
14015
14016// MigrationRecoveryPointCollection collection of migration recovery points.
14017type MigrationRecoveryPointCollection struct {
14018	autorest.Response `json:"-"`
14019	// Value - The migration recovery point details.
14020	Value *[]MigrationRecoveryPoint `json:"value,omitempty"`
14021	// NextLink - The value of next link.
14022	NextLink *string `json:"nextLink,omitempty"`
14023}
14024
14025// MigrationRecoveryPointCollectionIterator provides access to a complete listing of MigrationRecoveryPoint
14026// values.
14027type MigrationRecoveryPointCollectionIterator struct {
14028	i    int
14029	page MigrationRecoveryPointCollectionPage
14030}
14031
14032// NextWithContext advances to the next value.  If there was an error making
14033// the request the iterator does not advance and the error is returned.
14034func (iter *MigrationRecoveryPointCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14035	if tracing.IsEnabled() {
14036		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationRecoveryPointCollectionIterator.NextWithContext")
14037		defer func() {
14038			sc := -1
14039			if iter.Response().Response.Response != nil {
14040				sc = iter.Response().Response.Response.StatusCode
14041			}
14042			tracing.EndSpan(ctx, sc, err)
14043		}()
14044	}
14045	iter.i++
14046	if iter.i < len(iter.page.Values()) {
14047		return nil
14048	}
14049	err = iter.page.NextWithContext(ctx)
14050	if err != nil {
14051		iter.i--
14052		return err
14053	}
14054	iter.i = 0
14055	return nil
14056}
14057
14058// Next advances to the next value.  If there was an error making
14059// the request the iterator does not advance and the error is returned.
14060// Deprecated: Use NextWithContext() instead.
14061func (iter *MigrationRecoveryPointCollectionIterator) Next() error {
14062	return iter.NextWithContext(context.Background())
14063}
14064
14065// NotDone returns true if the enumeration should be started or is not yet complete.
14066func (iter MigrationRecoveryPointCollectionIterator) NotDone() bool {
14067	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14068}
14069
14070// Response returns the raw server response from the last page request.
14071func (iter MigrationRecoveryPointCollectionIterator) Response() MigrationRecoveryPointCollection {
14072	return iter.page.Response()
14073}
14074
14075// Value returns the current value or a zero-initialized value if the
14076// iterator has advanced beyond the end of the collection.
14077func (iter MigrationRecoveryPointCollectionIterator) Value() MigrationRecoveryPoint {
14078	if !iter.page.NotDone() {
14079		return MigrationRecoveryPoint{}
14080	}
14081	return iter.page.Values()[iter.i]
14082}
14083
14084// Creates a new instance of the MigrationRecoveryPointCollectionIterator type.
14085func NewMigrationRecoveryPointCollectionIterator(page MigrationRecoveryPointCollectionPage) MigrationRecoveryPointCollectionIterator {
14086	return MigrationRecoveryPointCollectionIterator{page: page}
14087}
14088
14089// IsEmpty returns true if the ListResult contains no values.
14090func (mrpc MigrationRecoveryPointCollection) IsEmpty() bool {
14091	return mrpc.Value == nil || len(*mrpc.Value) == 0
14092}
14093
14094// hasNextLink returns true if the NextLink is not empty.
14095func (mrpc MigrationRecoveryPointCollection) hasNextLink() bool {
14096	return mrpc.NextLink != nil && len(*mrpc.NextLink) != 0
14097}
14098
14099// migrationRecoveryPointCollectionPreparer prepares a request to retrieve the next set of results.
14100// It returns nil if no more results exist.
14101func (mrpc MigrationRecoveryPointCollection) migrationRecoveryPointCollectionPreparer(ctx context.Context) (*http.Request, error) {
14102	if !mrpc.hasNextLink() {
14103		return nil, nil
14104	}
14105	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14106		autorest.AsJSON(),
14107		autorest.AsGet(),
14108		autorest.WithBaseURL(to.String(mrpc.NextLink)))
14109}
14110
14111// MigrationRecoveryPointCollectionPage contains a page of MigrationRecoveryPoint values.
14112type MigrationRecoveryPointCollectionPage struct {
14113	fn   func(context.Context, MigrationRecoveryPointCollection) (MigrationRecoveryPointCollection, error)
14114	mrpc MigrationRecoveryPointCollection
14115}
14116
14117// NextWithContext advances to the next page of values.  If there was an error making
14118// the request the page does not advance and the error is returned.
14119func (page *MigrationRecoveryPointCollectionPage) NextWithContext(ctx context.Context) (err error) {
14120	if tracing.IsEnabled() {
14121		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationRecoveryPointCollectionPage.NextWithContext")
14122		defer func() {
14123			sc := -1
14124			if page.Response().Response.Response != nil {
14125				sc = page.Response().Response.Response.StatusCode
14126			}
14127			tracing.EndSpan(ctx, sc, err)
14128		}()
14129	}
14130	for {
14131		next, err := page.fn(ctx, page.mrpc)
14132		if err != nil {
14133			return err
14134		}
14135		page.mrpc = next
14136		if !next.hasNextLink() || !next.IsEmpty() {
14137			break
14138		}
14139	}
14140	return nil
14141}
14142
14143// Next advances to the next page of values.  If there was an error making
14144// the request the page does not advance and the error is returned.
14145// Deprecated: Use NextWithContext() instead.
14146func (page *MigrationRecoveryPointCollectionPage) Next() error {
14147	return page.NextWithContext(context.Background())
14148}
14149
14150// NotDone returns true if the page enumeration should be started or is not yet complete.
14151func (page MigrationRecoveryPointCollectionPage) NotDone() bool {
14152	return !page.mrpc.IsEmpty()
14153}
14154
14155// Response returns the raw server response from the last page request.
14156func (page MigrationRecoveryPointCollectionPage) Response() MigrationRecoveryPointCollection {
14157	return page.mrpc
14158}
14159
14160// Values returns the slice of values for the current page or nil if there are no values.
14161func (page MigrationRecoveryPointCollectionPage) Values() []MigrationRecoveryPoint {
14162	if page.mrpc.IsEmpty() {
14163		return nil
14164	}
14165	return *page.mrpc.Value
14166}
14167
14168// Creates a new instance of the MigrationRecoveryPointCollectionPage type.
14169func NewMigrationRecoveryPointCollectionPage(cur MigrationRecoveryPointCollection, getNextPage func(context.Context, MigrationRecoveryPointCollection) (MigrationRecoveryPointCollection, error)) MigrationRecoveryPointCollectionPage {
14170	return MigrationRecoveryPointCollectionPage{
14171		fn:   getNextPage,
14172		mrpc: cur,
14173	}
14174}
14175
14176// MigrationRecoveryPointProperties migration item recovery point properties.
14177type MigrationRecoveryPointProperties struct {
14178	// RecoveryPointTime - READ-ONLY; The recovery point time.
14179	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
14180	// RecoveryPointType - READ-ONLY; The recovery point type. Possible values include: 'MigrationRecoveryPointTypeNotSpecified', 'MigrationRecoveryPointTypeApplicationConsistent', 'MigrationRecoveryPointTypeCrashConsistent'
14181	RecoveryPointType MigrationRecoveryPointType `json:"recoveryPointType,omitempty"`
14182}
14183
14184// MarshalJSON is the custom marshaler for MigrationRecoveryPointProperties.
14185func (mrpp MigrationRecoveryPointProperties) MarshalJSON() ([]byte, error) {
14186	objectMap := make(map[string]interface{})
14187	return json.Marshal(objectMap)
14188}
14189
14190// MobilityServiceUpdate the Mobility Service update details.
14191type MobilityServiceUpdate struct {
14192	// Version - The version of the latest update.
14193	Version *string `json:"version,omitempty"`
14194	// RebootStatus - The reboot status of the update - whether it is required or not.
14195	RebootStatus *string `json:"rebootStatus,omitempty"`
14196	// OsType - The OS type.
14197	OsType *string `json:"osType,omitempty"`
14198}
14199
14200// Network network model.
14201type Network struct {
14202	autorest.Response `json:"-"`
14203	// Properties - The Network Properties.
14204	Properties *NetworkProperties `json:"properties,omitempty"`
14205	// ID - READ-ONLY; Resource Id
14206	ID *string `json:"id,omitempty"`
14207	// Name - READ-ONLY; Resource Name
14208	Name *string `json:"name,omitempty"`
14209	// Type - READ-ONLY; Resource Type
14210	Type *string `json:"type,omitempty"`
14211	// Location - Resource Location
14212	Location *string `json:"location,omitempty"`
14213}
14214
14215// MarshalJSON is the custom marshaler for Network.
14216func (n Network) MarshalJSON() ([]byte, error) {
14217	objectMap := make(map[string]interface{})
14218	if n.Properties != nil {
14219		objectMap["properties"] = n.Properties
14220	}
14221	if n.Location != nil {
14222		objectMap["location"] = n.Location
14223	}
14224	return json.Marshal(objectMap)
14225}
14226
14227// NetworkCollection list of networks.
14228type NetworkCollection struct {
14229	autorest.Response `json:"-"`
14230	// Value - The Networks list details.
14231	Value *[]Network `json:"value,omitempty"`
14232	// NextLink - The value of next link.
14233	NextLink *string `json:"nextLink,omitempty"`
14234}
14235
14236// NetworkCollectionIterator provides access to a complete listing of Network values.
14237type NetworkCollectionIterator struct {
14238	i    int
14239	page NetworkCollectionPage
14240}
14241
14242// NextWithContext advances to the next value.  If there was an error making
14243// the request the iterator does not advance and the error is returned.
14244func (iter *NetworkCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14245	if tracing.IsEnabled() {
14246		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkCollectionIterator.NextWithContext")
14247		defer func() {
14248			sc := -1
14249			if iter.Response().Response.Response != nil {
14250				sc = iter.Response().Response.Response.StatusCode
14251			}
14252			tracing.EndSpan(ctx, sc, err)
14253		}()
14254	}
14255	iter.i++
14256	if iter.i < len(iter.page.Values()) {
14257		return nil
14258	}
14259	err = iter.page.NextWithContext(ctx)
14260	if err != nil {
14261		iter.i--
14262		return err
14263	}
14264	iter.i = 0
14265	return nil
14266}
14267
14268// Next advances to the next value.  If there was an error making
14269// the request the iterator does not advance and the error is returned.
14270// Deprecated: Use NextWithContext() instead.
14271func (iter *NetworkCollectionIterator) Next() error {
14272	return iter.NextWithContext(context.Background())
14273}
14274
14275// NotDone returns true if the enumeration should be started or is not yet complete.
14276func (iter NetworkCollectionIterator) NotDone() bool {
14277	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14278}
14279
14280// Response returns the raw server response from the last page request.
14281func (iter NetworkCollectionIterator) Response() NetworkCollection {
14282	return iter.page.Response()
14283}
14284
14285// Value returns the current value or a zero-initialized value if the
14286// iterator has advanced beyond the end of the collection.
14287func (iter NetworkCollectionIterator) Value() Network {
14288	if !iter.page.NotDone() {
14289		return Network{}
14290	}
14291	return iter.page.Values()[iter.i]
14292}
14293
14294// Creates a new instance of the NetworkCollectionIterator type.
14295func NewNetworkCollectionIterator(page NetworkCollectionPage) NetworkCollectionIterator {
14296	return NetworkCollectionIterator{page: page}
14297}
14298
14299// IsEmpty returns true if the ListResult contains no values.
14300func (nc NetworkCollection) IsEmpty() bool {
14301	return nc.Value == nil || len(*nc.Value) == 0
14302}
14303
14304// hasNextLink returns true if the NextLink is not empty.
14305func (nc NetworkCollection) hasNextLink() bool {
14306	return nc.NextLink != nil && len(*nc.NextLink) != 0
14307}
14308
14309// networkCollectionPreparer prepares a request to retrieve the next set of results.
14310// It returns nil if no more results exist.
14311func (nc NetworkCollection) networkCollectionPreparer(ctx context.Context) (*http.Request, error) {
14312	if !nc.hasNextLink() {
14313		return nil, nil
14314	}
14315	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14316		autorest.AsJSON(),
14317		autorest.AsGet(),
14318		autorest.WithBaseURL(to.String(nc.NextLink)))
14319}
14320
14321// NetworkCollectionPage contains a page of Network values.
14322type NetworkCollectionPage struct {
14323	fn func(context.Context, NetworkCollection) (NetworkCollection, error)
14324	nc NetworkCollection
14325}
14326
14327// NextWithContext advances to the next page of values.  If there was an error making
14328// the request the page does not advance and the error is returned.
14329func (page *NetworkCollectionPage) NextWithContext(ctx context.Context) (err error) {
14330	if tracing.IsEnabled() {
14331		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkCollectionPage.NextWithContext")
14332		defer func() {
14333			sc := -1
14334			if page.Response().Response.Response != nil {
14335				sc = page.Response().Response.Response.StatusCode
14336			}
14337			tracing.EndSpan(ctx, sc, err)
14338		}()
14339	}
14340	for {
14341		next, err := page.fn(ctx, page.nc)
14342		if err != nil {
14343			return err
14344		}
14345		page.nc = next
14346		if !next.hasNextLink() || !next.IsEmpty() {
14347			break
14348		}
14349	}
14350	return nil
14351}
14352
14353// Next advances to the next page of values.  If there was an error making
14354// the request the page does not advance and the error is returned.
14355// Deprecated: Use NextWithContext() instead.
14356func (page *NetworkCollectionPage) Next() error {
14357	return page.NextWithContext(context.Background())
14358}
14359
14360// NotDone returns true if the page enumeration should be started or is not yet complete.
14361func (page NetworkCollectionPage) NotDone() bool {
14362	return !page.nc.IsEmpty()
14363}
14364
14365// Response returns the raw server response from the last page request.
14366func (page NetworkCollectionPage) Response() NetworkCollection {
14367	return page.nc
14368}
14369
14370// Values returns the slice of values for the current page or nil if there are no values.
14371func (page NetworkCollectionPage) Values() []Network {
14372	if page.nc.IsEmpty() {
14373		return nil
14374	}
14375	return *page.nc.Value
14376}
14377
14378// Creates a new instance of the NetworkCollectionPage type.
14379func NewNetworkCollectionPage(cur NetworkCollection, getNextPage func(context.Context, NetworkCollection) (NetworkCollection, error)) NetworkCollectionPage {
14380	return NetworkCollectionPage{
14381		fn: getNextPage,
14382		nc: cur,
14383	}
14384}
14385
14386// NetworkMapping network Mapping model. Ideally it should have been possible to inherit this class from
14387// prev version in InheritedModels as long as there is no difference in structure or method signature.
14388// Since there were no base Models for certain fields and methods viz NetworkMappingProperties and Load
14389// with required return type, the class has been introduced in its entirety with references to base models
14390// to facilitate extensions in subsequent versions.
14391type NetworkMapping struct {
14392	autorest.Response `json:"-"`
14393	// Properties - The Network Mapping Properties.
14394	Properties *NetworkMappingProperties `json:"properties,omitempty"`
14395	// ID - READ-ONLY; Resource Id
14396	ID *string `json:"id,omitempty"`
14397	// Name - READ-ONLY; Resource Name
14398	Name *string `json:"name,omitempty"`
14399	// Type - READ-ONLY; Resource Type
14400	Type *string `json:"type,omitempty"`
14401	// Location - Resource Location
14402	Location *string `json:"location,omitempty"`
14403}
14404
14405// MarshalJSON is the custom marshaler for NetworkMapping.
14406func (nm NetworkMapping) MarshalJSON() ([]byte, error) {
14407	objectMap := make(map[string]interface{})
14408	if nm.Properties != nil {
14409		objectMap["properties"] = nm.Properties
14410	}
14411	if nm.Location != nil {
14412		objectMap["location"] = nm.Location
14413	}
14414	return json.Marshal(objectMap)
14415}
14416
14417// NetworkMappingCollection list of network mappings. As with NetworkMapping, it should be possible to
14418// reuse a prev version of this class. It doesn't seem likely this class could be anything more than a
14419// slightly bespoke collection of NetworkMapping. Hence it makes sense to override Load with
14420// Base.NetworkMapping instead of existing CurrentVersion.NetworkMapping.
14421type NetworkMappingCollection struct {
14422	autorest.Response `json:"-"`
14423	// Value - The Network Mappings list.
14424	Value *[]NetworkMapping `json:"value,omitempty"`
14425	// NextLink - The value of next link.
14426	NextLink *string `json:"nextLink,omitempty"`
14427}
14428
14429// NetworkMappingCollectionIterator provides access to a complete listing of NetworkMapping values.
14430type NetworkMappingCollectionIterator struct {
14431	i    int
14432	page NetworkMappingCollectionPage
14433}
14434
14435// NextWithContext advances to the next value.  If there was an error making
14436// the request the iterator does not advance and the error is returned.
14437func (iter *NetworkMappingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14438	if tracing.IsEnabled() {
14439		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkMappingCollectionIterator.NextWithContext")
14440		defer func() {
14441			sc := -1
14442			if iter.Response().Response.Response != nil {
14443				sc = iter.Response().Response.Response.StatusCode
14444			}
14445			tracing.EndSpan(ctx, sc, err)
14446		}()
14447	}
14448	iter.i++
14449	if iter.i < len(iter.page.Values()) {
14450		return nil
14451	}
14452	err = iter.page.NextWithContext(ctx)
14453	if err != nil {
14454		iter.i--
14455		return err
14456	}
14457	iter.i = 0
14458	return nil
14459}
14460
14461// Next advances to the next value.  If there was an error making
14462// the request the iterator does not advance and the error is returned.
14463// Deprecated: Use NextWithContext() instead.
14464func (iter *NetworkMappingCollectionIterator) Next() error {
14465	return iter.NextWithContext(context.Background())
14466}
14467
14468// NotDone returns true if the enumeration should be started or is not yet complete.
14469func (iter NetworkMappingCollectionIterator) NotDone() bool {
14470	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14471}
14472
14473// Response returns the raw server response from the last page request.
14474func (iter NetworkMappingCollectionIterator) Response() NetworkMappingCollection {
14475	return iter.page.Response()
14476}
14477
14478// Value returns the current value or a zero-initialized value if the
14479// iterator has advanced beyond the end of the collection.
14480func (iter NetworkMappingCollectionIterator) Value() NetworkMapping {
14481	if !iter.page.NotDone() {
14482		return NetworkMapping{}
14483	}
14484	return iter.page.Values()[iter.i]
14485}
14486
14487// Creates a new instance of the NetworkMappingCollectionIterator type.
14488func NewNetworkMappingCollectionIterator(page NetworkMappingCollectionPage) NetworkMappingCollectionIterator {
14489	return NetworkMappingCollectionIterator{page: page}
14490}
14491
14492// IsEmpty returns true if the ListResult contains no values.
14493func (nmc NetworkMappingCollection) IsEmpty() bool {
14494	return nmc.Value == nil || len(*nmc.Value) == 0
14495}
14496
14497// hasNextLink returns true if the NextLink is not empty.
14498func (nmc NetworkMappingCollection) hasNextLink() bool {
14499	return nmc.NextLink != nil && len(*nmc.NextLink) != 0
14500}
14501
14502// networkMappingCollectionPreparer prepares a request to retrieve the next set of results.
14503// It returns nil if no more results exist.
14504func (nmc NetworkMappingCollection) networkMappingCollectionPreparer(ctx context.Context) (*http.Request, error) {
14505	if !nmc.hasNextLink() {
14506		return nil, nil
14507	}
14508	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14509		autorest.AsJSON(),
14510		autorest.AsGet(),
14511		autorest.WithBaseURL(to.String(nmc.NextLink)))
14512}
14513
14514// NetworkMappingCollectionPage contains a page of NetworkMapping values.
14515type NetworkMappingCollectionPage struct {
14516	fn  func(context.Context, NetworkMappingCollection) (NetworkMappingCollection, error)
14517	nmc NetworkMappingCollection
14518}
14519
14520// NextWithContext advances to the next page of values.  If there was an error making
14521// the request the page does not advance and the error is returned.
14522func (page *NetworkMappingCollectionPage) NextWithContext(ctx context.Context) (err error) {
14523	if tracing.IsEnabled() {
14524		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkMappingCollectionPage.NextWithContext")
14525		defer func() {
14526			sc := -1
14527			if page.Response().Response.Response != nil {
14528				sc = page.Response().Response.Response.StatusCode
14529			}
14530			tracing.EndSpan(ctx, sc, err)
14531		}()
14532	}
14533	for {
14534		next, err := page.fn(ctx, page.nmc)
14535		if err != nil {
14536			return err
14537		}
14538		page.nmc = next
14539		if !next.hasNextLink() || !next.IsEmpty() {
14540			break
14541		}
14542	}
14543	return nil
14544}
14545
14546// Next advances to the next page of values.  If there was an error making
14547// the request the page does not advance and the error is returned.
14548// Deprecated: Use NextWithContext() instead.
14549func (page *NetworkMappingCollectionPage) Next() error {
14550	return page.NextWithContext(context.Background())
14551}
14552
14553// NotDone returns true if the page enumeration should be started or is not yet complete.
14554func (page NetworkMappingCollectionPage) NotDone() bool {
14555	return !page.nmc.IsEmpty()
14556}
14557
14558// Response returns the raw server response from the last page request.
14559func (page NetworkMappingCollectionPage) Response() NetworkMappingCollection {
14560	return page.nmc
14561}
14562
14563// Values returns the slice of values for the current page or nil if there are no values.
14564func (page NetworkMappingCollectionPage) Values() []NetworkMapping {
14565	if page.nmc.IsEmpty() {
14566		return nil
14567	}
14568	return *page.nmc.Value
14569}
14570
14571// Creates a new instance of the NetworkMappingCollectionPage type.
14572func NewNetworkMappingCollectionPage(cur NetworkMappingCollection, getNextPage func(context.Context, NetworkMappingCollection) (NetworkMappingCollection, error)) NetworkMappingCollectionPage {
14573	return NetworkMappingCollectionPage{
14574		fn:  getNextPage,
14575		nmc: cur,
14576	}
14577}
14578
14579// BasicNetworkMappingFabricSpecificSettings network Mapping fabric specific settings.
14580type BasicNetworkMappingFabricSpecificSettings interface {
14581	AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool)
14582	AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool)
14583	AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool)
14584	AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool)
14585}
14586
14587// NetworkMappingFabricSpecificSettings network Mapping fabric specific settings.
14588type NetworkMappingFabricSpecificSettings struct {
14589	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
14590	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
14591}
14592
14593func unmarshalBasicNetworkMappingFabricSpecificSettings(body []byte) (BasicNetworkMappingFabricSpecificSettings, error) {
14594	var m map[string]interface{}
14595	err := json.Unmarshal(body, &m)
14596	if err != nil {
14597		return nil, err
14598	}
14599
14600	switch m["instanceType"] {
14601	case string(InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure):
14602		var atanms AzureToAzureNetworkMappingSettings
14603		err := json.Unmarshal(body, &atanms)
14604		return atanms, err
14605	case string(InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure):
14606		var vtanms VmmToAzureNetworkMappingSettings
14607		err := json.Unmarshal(body, &vtanms)
14608		return vtanms, err
14609	case string(InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm):
14610		var vtvnms VmmToVmmNetworkMappingSettings
14611		err := json.Unmarshal(body, &vtvnms)
14612		return vtvnms, err
14613	default:
14614		var nmfss NetworkMappingFabricSpecificSettings
14615		err := json.Unmarshal(body, &nmfss)
14616		return nmfss, err
14617	}
14618}
14619func unmarshalBasicNetworkMappingFabricSpecificSettingsArray(body []byte) ([]BasicNetworkMappingFabricSpecificSettings, error) {
14620	var rawMessages []*json.RawMessage
14621	err := json.Unmarshal(body, &rawMessages)
14622	if err != nil {
14623		return nil, err
14624	}
14625
14626	nmfssArray := make([]BasicNetworkMappingFabricSpecificSettings, len(rawMessages))
14627
14628	for index, rawMessage := range rawMessages {
14629		nmfss, err := unmarshalBasicNetworkMappingFabricSpecificSettings(*rawMessage)
14630		if err != nil {
14631			return nil, err
14632		}
14633		nmfssArray[index] = nmfss
14634	}
14635	return nmfssArray, nil
14636}
14637
14638// MarshalJSON is the custom marshaler for NetworkMappingFabricSpecificSettings.
14639func (nmfss NetworkMappingFabricSpecificSettings) MarshalJSON() ([]byte, error) {
14640	nmfss.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings
14641	objectMap := make(map[string]interface{})
14642	if nmfss.InstanceType != "" {
14643		objectMap["instanceType"] = nmfss.InstanceType
14644	}
14645	return json.Marshal(objectMap)
14646}
14647
14648// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14649func (nmfss NetworkMappingFabricSpecificSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
14650	return nil, false
14651}
14652
14653// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14654func (nmfss NetworkMappingFabricSpecificSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
14655	return nil, false
14656}
14657
14658// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14659func (nmfss NetworkMappingFabricSpecificSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
14660	return nil, false
14661}
14662
14663// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14664func (nmfss NetworkMappingFabricSpecificSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
14665	return &nmfss, true
14666}
14667
14668// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14669func (nmfss NetworkMappingFabricSpecificSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
14670	return &nmfss, true
14671}
14672
14673// NetworkMappingProperties network Mapping Properties.
14674type NetworkMappingProperties struct {
14675	// State - The pairing state for network mapping.
14676	State *string `json:"state,omitempty"`
14677	// PrimaryNetworkFriendlyName - The primary network friendly name.
14678	PrimaryNetworkFriendlyName *string `json:"primaryNetworkFriendlyName,omitempty"`
14679	// PrimaryNetworkID - The primary network id for network mapping.
14680	PrimaryNetworkID *string `json:"primaryNetworkId,omitempty"`
14681	// PrimaryFabricFriendlyName - The primary fabric friendly name.
14682	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
14683	// RecoveryNetworkFriendlyName - The recovery network friendly name.
14684	RecoveryNetworkFriendlyName *string `json:"recoveryNetworkFriendlyName,omitempty"`
14685	// RecoveryNetworkID - The recovery network id for network mapping.
14686	RecoveryNetworkID *string `json:"recoveryNetworkId,omitempty"`
14687	// RecoveryFabricArmID - The recovery fabric ARM id.
14688	RecoveryFabricArmID *string `json:"recoveryFabricArmId,omitempty"`
14689	// RecoveryFabricFriendlyName - The recovery fabric friendly name.
14690	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
14691	// FabricSpecificSettings - The fabric specific settings.
14692	FabricSpecificSettings BasicNetworkMappingFabricSpecificSettings `json:"fabricSpecificSettings,omitempty"`
14693}
14694
14695// UnmarshalJSON is the custom unmarshaler for NetworkMappingProperties struct.
14696func (nmp *NetworkMappingProperties) UnmarshalJSON(body []byte) error {
14697	var m map[string]*json.RawMessage
14698	err := json.Unmarshal(body, &m)
14699	if err != nil {
14700		return err
14701	}
14702	for k, v := range m {
14703		switch k {
14704		case "state":
14705			if v != nil {
14706				var state string
14707				err = json.Unmarshal(*v, &state)
14708				if err != nil {
14709					return err
14710				}
14711				nmp.State = &state
14712			}
14713		case "primaryNetworkFriendlyName":
14714			if v != nil {
14715				var primaryNetworkFriendlyName string
14716				err = json.Unmarshal(*v, &primaryNetworkFriendlyName)
14717				if err != nil {
14718					return err
14719				}
14720				nmp.PrimaryNetworkFriendlyName = &primaryNetworkFriendlyName
14721			}
14722		case "primaryNetworkId":
14723			if v != nil {
14724				var primaryNetworkID string
14725				err = json.Unmarshal(*v, &primaryNetworkID)
14726				if err != nil {
14727					return err
14728				}
14729				nmp.PrimaryNetworkID = &primaryNetworkID
14730			}
14731		case "primaryFabricFriendlyName":
14732			if v != nil {
14733				var primaryFabricFriendlyName string
14734				err = json.Unmarshal(*v, &primaryFabricFriendlyName)
14735				if err != nil {
14736					return err
14737				}
14738				nmp.PrimaryFabricFriendlyName = &primaryFabricFriendlyName
14739			}
14740		case "recoveryNetworkFriendlyName":
14741			if v != nil {
14742				var recoveryNetworkFriendlyName string
14743				err = json.Unmarshal(*v, &recoveryNetworkFriendlyName)
14744				if err != nil {
14745					return err
14746				}
14747				nmp.RecoveryNetworkFriendlyName = &recoveryNetworkFriendlyName
14748			}
14749		case "recoveryNetworkId":
14750			if v != nil {
14751				var recoveryNetworkID string
14752				err = json.Unmarshal(*v, &recoveryNetworkID)
14753				if err != nil {
14754					return err
14755				}
14756				nmp.RecoveryNetworkID = &recoveryNetworkID
14757			}
14758		case "recoveryFabricArmId":
14759			if v != nil {
14760				var recoveryFabricArmID string
14761				err = json.Unmarshal(*v, &recoveryFabricArmID)
14762				if err != nil {
14763					return err
14764				}
14765				nmp.RecoveryFabricArmID = &recoveryFabricArmID
14766			}
14767		case "recoveryFabricFriendlyName":
14768			if v != nil {
14769				var recoveryFabricFriendlyName string
14770				err = json.Unmarshal(*v, &recoveryFabricFriendlyName)
14771				if err != nil {
14772					return err
14773				}
14774				nmp.RecoveryFabricFriendlyName = &recoveryFabricFriendlyName
14775			}
14776		case "fabricSpecificSettings":
14777			if v != nil {
14778				fabricSpecificSettings, err := unmarshalBasicNetworkMappingFabricSpecificSettings(*v)
14779				if err != nil {
14780					return err
14781				}
14782				nmp.FabricSpecificSettings = fabricSpecificSettings
14783			}
14784		}
14785	}
14786
14787	return nil
14788}
14789
14790// NetworkProperties network Properties
14791type NetworkProperties struct {
14792	// FabricType - The Fabric Type.
14793	FabricType *string `json:"fabricType,omitempty"`
14794	// Subnets - The List of subnets.
14795	Subnets *[]Subnet `json:"subnets,omitempty"`
14796	// FriendlyName - The Friendly Name.
14797	FriendlyName *string `json:"friendlyName,omitempty"`
14798	// NetworkType - The Network Type.
14799	NetworkType *string `json:"networkType,omitempty"`
14800}
14801
14802// NewProtectionProfile new Protection profile input.
14803type NewProtectionProfile struct {
14804	// PolicyName - The protection profile input.
14805	PolicyName *string `json:"policyName,omitempty"`
14806	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
14807	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
14808	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
14809	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
14810	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
14811	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
14812	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
14813	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
14814	// ResourceType - Possible values include: 'ResourceTypeProtectionProfileCustomDetails', 'ResourceTypeExisting', 'ResourceTypeNew'
14815	ResourceType ResourceType `json:"resourceType,omitempty"`
14816}
14817
14818// MarshalJSON is the custom marshaler for NewProtectionProfile.
14819func (npp NewProtectionProfile) MarshalJSON() ([]byte, error) {
14820	npp.ResourceType = ResourceTypeNew
14821	objectMap := make(map[string]interface{})
14822	if npp.PolicyName != nil {
14823		objectMap["policyName"] = npp.PolicyName
14824	}
14825	if npp.RecoveryPointHistory != nil {
14826		objectMap["recoveryPointHistory"] = npp.RecoveryPointHistory
14827	}
14828	if npp.CrashConsistentFrequencyInMinutes != nil {
14829		objectMap["crashConsistentFrequencyInMinutes"] = npp.CrashConsistentFrequencyInMinutes
14830	}
14831	if npp.AppConsistentFrequencyInMinutes != nil {
14832		objectMap["appConsistentFrequencyInMinutes"] = npp.AppConsistentFrequencyInMinutes
14833	}
14834	if npp.MultiVMSyncStatus != "" {
14835		objectMap["multiVmSyncStatus"] = npp.MultiVMSyncStatus
14836	}
14837	if npp.ResourceType != "" {
14838		objectMap["resourceType"] = npp.ResourceType
14839	}
14840	return json.Marshal(objectMap)
14841}
14842
14843// AsExistingProtectionProfile is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14844func (npp NewProtectionProfile) AsExistingProtectionProfile() (*ExistingProtectionProfile, bool) {
14845	return nil, false
14846}
14847
14848// AsNewProtectionProfile is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14849func (npp NewProtectionProfile) AsNewProtectionProfile() (*NewProtectionProfile, bool) {
14850	return &npp, true
14851}
14852
14853// AsProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14854func (npp NewProtectionProfile) AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool) {
14855	return nil, false
14856}
14857
14858// AsBasicProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14859func (npp NewProtectionProfile) AsBasicProtectionProfileCustomDetails() (BasicProtectionProfileCustomDetails, bool) {
14860	return &npp, true
14861}
14862
14863// OperationsDiscovery operations discovery class.
14864type OperationsDiscovery struct {
14865	// Name - Name of the API. The name of the operation being performed on this particular object. It should match the action name that appears in RBAC / the event service. Examples of operations include: * Microsoft.Compute/virtualMachine/capture/action * Microsoft.Compute/virtualMachine/restart/action * Microsoft.Compute/virtualMachine/write * Microsoft.Compute/virtualMachine/read * Microsoft.Compute/virtualMachine/delete Each action should include, in order: (1) Resource Provider Namespace (2) Type hierarchy for which the action applies (e.g. server/databases for a SQL Azure database) (3) Read, Write, Action or Delete indicating which type applies. If it is a PUT/PATCH on a collection or named value, Write should be used. If it is a GET, Read should be used. If it is a DELETE, Delete should be used. If it is a POST, Action should be used. As a note: all resource providers would need to include the "{Resource Provider Namespace}/register/action" operation in their response. This API is used to register for their service, and should include details about the operation (e.g. a localized name for the resource provider + any special considerations like PII release)
14866	Name *string `json:"name,omitempty"`
14867	// Display - Object type
14868	Display *Display `json:"display,omitempty"`
14869	// Origin - Origin. The intended executor of the operation; governs the display of the operation in the RBAC UX and the audit logs UX. Default value is "user,system"
14870	Origin *string `json:"origin,omitempty"`
14871	// Properties - Properties. Reserved for future use.
14872	Properties interface{} `json:"properties,omitempty"`
14873}
14874
14875// OperationsDiscoveryCollection collection of ClientDiscovery details.
14876type OperationsDiscoveryCollection struct {
14877	autorest.Response `json:"-"`
14878	// Value - The ClientDiscovery details.
14879	Value *[]OperationsDiscovery `json:"value,omitempty"`
14880	// NextLink - The value of next link.
14881	NextLink *string `json:"nextLink,omitempty"`
14882}
14883
14884// OperationsDiscoveryCollectionIterator provides access to a complete listing of OperationsDiscovery
14885// values.
14886type OperationsDiscoveryCollectionIterator struct {
14887	i    int
14888	page OperationsDiscoveryCollectionPage
14889}
14890
14891// NextWithContext advances to the next value.  If there was an error making
14892// the request the iterator does not advance and the error is returned.
14893func (iter *OperationsDiscoveryCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14894	if tracing.IsEnabled() {
14895		ctx = tracing.StartSpan(ctx, fqdn+"/OperationsDiscoveryCollectionIterator.NextWithContext")
14896		defer func() {
14897			sc := -1
14898			if iter.Response().Response.Response != nil {
14899				sc = iter.Response().Response.Response.StatusCode
14900			}
14901			tracing.EndSpan(ctx, sc, err)
14902		}()
14903	}
14904	iter.i++
14905	if iter.i < len(iter.page.Values()) {
14906		return nil
14907	}
14908	err = iter.page.NextWithContext(ctx)
14909	if err != nil {
14910		iter.i--
14911		return err
14912	}
14913	iter.i = 0
14914	return nil
14915}
14916
14917// Next advances to the next value.  If there was an error making
14918// the request the iterator does not advance and the error is returned.
14919// Deprecated: Use NextWithContext() instead.
14920func (iter *OperationsDiscoveryCollectionIterator) Next() error {
14921	return iter.NextWithContext(context.Background())
14922}
14923
14924// NotDone returns true if the enumeration should be started or is not yet complete.
14925func (iter OperationsDiscoveryCollectionIterator) NotDone() bool {
14926	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14927}
14928
14929// Response returns the raw server response from the last page request.
14930func (iter OperationsDiscoveryCollectionIterator) Response() OperationsDiscoveryCollection {
14931	return iter.page.Response()
14932}
14933
14934// Value returns the current value or a zero-initialized value if the
14935// iterator has advanced beyond the end of the collection.
14936func (iter OperationsDiscoveryCollectionIterator) Value() OperationsDiscovery {
14937	if !iter.page.NotDone() {
14938		return OperationsDiscovery{}
14939	}
14940	return iter.page.Values()[iter.i]
14941}
14942
14943// Creates a new instance of the OperationsDiscoveryCollectionIterator type.
14944func NewOperationsDiscoveryCollectionIterator(page OperationsDiscoveryCollectionPage) OperationsDiscoveryCollectionIterator {
14945	return OperationsDiscoveryCollectionIterator{page: page}
14946}
14947
14948// IsEmpty returns true if the ListResult contains no values.
14949func (odc OperationsDiscoveryCollection) IsEmpty() bool {
14950	return odc.Value == nil || len(*odc.Value) == 0
14951}
14952
14953// hasNextLink returns true if the NextLink is not empty.
14954func (odc OperationsDiscoveryCollection) hasNextLink() bool {
14955	return odc.NextLink != nil && len(*odc.NextLink) != 0
14956}
14957
14958// operationsDiscoveryCollectionPreparer prepares a request to retrieve the next set of results.
14959// It returns nil if no more results exist.
14960func (odc OperationsDiscoveryCollection) operationsDiscoveryCollectionPreparer(ctx context.Context) (*http.Request, error) {
14961	if !odc.hasNextLink() {
14962		return nil, nil
14963	}
14964	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14965		autorest.AsJSON(),
14966		autorest.AsGet(),
14967		autorest.WithBaseURL(to.String(odc.NextLink)))
14968}
14969
14970// OperationsDiscoveryCollectionPage contains a page of OperationsDiscovery values.
14971type OperationsDiscoveryCollectionPage struct {
14972	fn  func(context.Context, OperationsDiscoveryCollection) (OperationsDiscoveryCollection, error)
14973	odc OperationsDiscoveryCollection
14974}
14975
14976// NextWithContext advances to the next page of values.  If there was an error making
14977// the request the page does not advance and the error is returned.
14978func (page *OperationsDiscoveryCollectionPage) NextWithContext(ctx context.Context) (err error) {
14979	if tracing.IsEnabled() {
14980		ctx = tracing.StartSpan(ctx, fqdn+"/OperationsDiscoveryCollectionPage.NextWithContext")
14981		defer func() {
14982			sc := -1
14983			if page.Response().Response.Response != nil {
14984				sc = page.Response().Response.Response.StatusCode
14985			}
14986			tracing.EndSpan(ctx, sc, err)
14987		}()
14988	}
14989	for {
14990		next, err := page.fn(ctx, page.odc)
14991		if err != nil {
14992			return err
14993		}
14994		page.odc = next
14995		if !next.hasNextLink() || !next.IsEmpty() {
14996			break
14997		}
14998	}
14999	return nil
15000}
15001
15002// Next advances to the next page of values.  If there was an error making
15003// the request the page does not advance and the error is returned.
15004// Deprecated: Use NextWithContext() instead.
15005func (page *OperationsDiscoveryCollectionPage) Next() error {
15006	return page.NextWithContext(context.Background())
15007}
15008
15009// NotDone returns true if the page enumeration should be started or is not yet complete.
15010func (page OperationsDiscoveryCollectionPage) NotDone() bool {
15011	return !page.odc.IsEmpty()
15012}
15013
15014// Response returns the raw server response from the last page request.
15015func (page OperationsDiscoveryCollectionPage) Response() OperationsDiscoveryCollection {
15016	return page.odc
15017}
15018
15019// Values returns the slice of values for the current page or nil if there are no values.
15020func (page OperationsDiscoveryCollectionPage) Values() []OperationsDiscovery {
15021	if page.odc.IsEmpty() {
15022		return nil
15023	}
15024	return *page.odc.Value
15025}
15026
15027// Creates a new instance of the OperationsDiscoveryCollectionPage type.
15028func NewOperationsDiscoveryCollectionPage(cur OperationsDiscoveryCollection, getNextPage func(context.Context, OperationsDiscoveryCollection) (OperationsDiscoveryCollection, error)) OperationsDiscoveryCollectionPage {
15029	return OperationsDiscoveryCollectionPage{
15030		fn:  getNextPage,
15031		odc: cur,
15032	}
15033}
15034
15035// OSDetails disk Details.
15036type OSDetails struct {
15037	// OsType - VM Disk details.
15038	OsType *string `json:"osType,omitempty"`
15039	// ProductType - Product type.
15040	ProductType *string `json:"productType,omitempty"`
15041	// OsEdition - The OSEdition.
15042	OsEdition *string `json:"osEdition,omitempty"`
15043	// OSVersion - The OS Version.
15044	OSVersion *string `json:"oSVersion,omitempty"`
15045	// OSMajorVersion - The OS Major Version.
15046	OSMajorVersion *string `json:"oSMajorVersion,omitempty"`
15047	// OSMinorVersion - The OS Minor Version.
15048	OSMinorVersion *string `json:"oSMinorVersion,omitempty"`
15049}
15050
15051// OSDiskDetails details of the OS Disk.
15052type OSDiskDetails struct {
15053	// OsVhdID - The id of the disk containing the OS.
15054	OsVhdID *string `json:"osVhdId,omitempty"`
15055	// OsType - The type of the OS on the VM.
15056	OsType *string `json:"osType,omitempty"`
15057	// VhdName - The OS disk VHD name.
15058	VhdName *string `json:"vhdName,omitempty"`
15059}
15060
15061// OSVersionWrapper wrapper model for OSVersion to include version and service pack info.
15062type OSVersionWrapper struct {
15063	// Version - The version.
15064	Version *string `json:"version,omitempty"`
15065	// ServicePack - Service pack.
15066	ServicePack *string `json:"servicePack,omitempty"`
15067}
15068
15069// PlannedFailoverInput input definition for planned failover.
15070type PlannedFailoverInput struct {
15071	// Properties - Planned failover input properties
15072	Properties *PlannedFailoverInputProperties `json:"properties,omitempty"`
15073}
15074
15075// PlannedFailoverInputProperties input definition for planned failover input properties.
15076type PlannedFailoverInputProperties struct {
15077	// FailoverDirection - Failover direction.
15078	FailoverDirection *string `json:"failoverDirection,omitempty"`
15079	// ProviderSpecificDetails - Provider specific settings
15080	ProviderSpecificDetails BasicProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
15081}
15082
15083// UnmarshalJSON is the custom unmarshaler for PlannedFailoverInputProperties struct.
15084func (pfip *PlannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
15085	var m map[string]*json.RawMessage
15086	err := json.Unmarshal(body, &m)
15087	if err != nil {
15088		return err
15089	}
15090	for k, v := range m {
15091		switch k {
15092		case "failoverDirection":
15093			if v != nil {
15094				var failoverDirection string
15095				err = json.Unmarshal(*v, &failoverDirection)
15096				if err != nil {
15097					return err
15098				}
15099				pfip.FailoverDirection = &failoverDirection
15100			}
15101		case "providerSpecificDetails":
15102			if v != nil {
15103				providerSpecificDetails, err := unmarshalBasicProviderSpecificFailoverInput(*v)
15104				if err != nil {
15105					return err
15106				}
15107				pfip.ProviderSpecificDetails = providerSpecificDetails
15108			}
15109		}
15110	}
15111
15112	return nil
15113}
15114
15115// Policy protection profile details.
15116type Policy struct {
15117	autorest.Response `json:"-"`
15118	// Properties - The custom data.
15119	Properties *PolicyProperties `json:"properties,omitempty"`
15120	// ID - READ-ONLY; Resource Id
15121	ID *string `json:"id,omitempty"`
15122	// Name - READ-ONLY; Resource Name
15123	Name *string `json:"name,omitempty"`
15124	// Type - READ-ONLY; Resource Type
15125	Type *string `json:"type,omitempty"`
15126	// Location - Resource Location
15127	Location *string `json:"location,omitempty"`
15128}
15129
15130// MarshalJSON is the custom marshaler for Policy.
15131func (p Policy) MarshalJSON() ([]byte, error) {
15132	objectMap := make(map[string]interface{})
15133	if p.Properties != nil {
15134		objectMap["properties"] = p.Properties
15135	}
15136	if p.Location != nil {
15137		objectMap["location"] = p.Location
15138	}
15139	return json.Marshal(objectMap)
15140}
15141
15142// PolicyCollection protection Profile Collection details.
15143type PolicyCollection struct {
15144	autorest.Response `json:"-"`
15145	// Value - The policy details.
15146	Value *[]Policy `json:"value,omitempty"`
15147	// NextLink - The value of next link.
15148	NextLink *string `json:"nextLink,omitempty"`
15149}
15150
15151// PolicyCollectionIterator provides access to a complete listing of Policy values.
15152type PolicyCollectionIterator struct {
15153	i    int
15154	page PolicyCollectionPage
15155}
15156
15157// NextWithContext advances to the next value.  If there was an error making
15158// the request the iterator does not advance and the error is returned.
15159func (iter *PolicyCollectionIterator) NextWithContext(ctx context.Context) (err error) {
15160	if tracing.IsEnabled() {
15161		ctx = tracing.StartSpan(ctx, fqdn+"/PolicyCollectionIterator.NextWithContext")
15162		defer func() {
15163			sc := -1
15164			if iter.Response().Response.Response != nil {
15165				sc = iter.Response().Response.Response.StatusCode
15166			}
15167			tracing.EndSpan(ctx, sc, err)
15168		}()
15169	}
15170	iter.i++
15171	if iter.i < len(iter.page.Values()) {
15172		return nil
15173	}
15174	err = iter.page.NextWithContext(ctx)
15175	if err != nil {
15176		iter.i--
15177		return err
15178	}
15179	iter.i = 0
15180	return nil
15181}
15182
15183// Next advances to the next value.  If there was an error making
15184// the request the iterator does not advance and the error is returned.
15185// Deprecated: Use NextWithContext() instead.
15186func (iter *PolicyCollectionIterator) Next() error {
15187	return iter.NextWithContext(context.Background())
15188}
15189
15190// NotDone returns true if the enumeration should be started or is not yet complete.
15191func (iter PolicyCollectionIterator) NotDone() bool {
15192	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15193}
15194
15195// Response returns the raw server response from the last page request.
15196func (iter PolicyCollectionIterator) Response() PolicyCollection {
15197	return iter.page.Response()
15198}
15199
15200// Value returns the current value or a zero-initialized value if the
15201// iterator has advanced beyond the end of the collection.
15202func (iter PolicyCollectionIterator) Value() Policy {
15203	if !iter.page.NotDone() {
15204		return Policy{}
15205	}
15206	return iter.page.Values()[iter.i]
15207}
15208
15209// Creates a new instance of the PolicyCollectionIterator type.
15210func NewPolicyCollectionIterator(page PolicyCollectionPage) PolicyCollectionIterator {
15211	return PolicyCollectionIterator{page: page}
15212}
15213
15214// IsEmpty returns true if the ListResult contains no values.
15215func (pc PolicyCollection) IsEmpty() bool {
15216	return pc.Value == nil || len(*pc.Value) == 0
15217}
15218
15219// hasNextLink returns true if the NextLink is not empty.
15220func (pc PolicyCollection) hasNextLink() bool {
15221	return pc.NextLink != nil && len(*pc.NextLink) != 0
15222}
15223
15224// policyCollectionPreparer prepares a request to retrieve the next set of results.
15225// It returns nil if no more results exist.
15226func (pc PolicyCollection) policyCollectionPreparer(ctx context.Context) (*http.Request, error) {
15227	if !pc.hasNextLink() {
15228		return nil, nil
15229	}
15230	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15231		autorest.AsJSON(),
15232		autorest.AsGet(),
15233		autorest.WithBaseURL(to.String(pc.NextLink)))
15234}
15235
15236// PolicyCollectionPage contains a page of Policy values.
15237type PolicyCollectionPage struct {
15238	fn func(context.Context, PolicyCollection) (PolicyCollection, error)
15239	pc PolicyCollection
15240}
15241
15242// NextWithContext advances to the next page of values.  If there was an error making
15243// the request the page does not advance and the error is returned.
15244func (page *PolicyCollectionPage) NextWithContext(ctx context.Context) (err error) {
15245	if tracing.IsEnabled() {
15246		ctx = tracing.StartSpan(ctx, fqdn+"/PolicyCollectionPage.NextWithContext")
15247		defer func() {
15248			sc := -1
15249			if page.Response().Response.Response != nil {
15250				sc = page.Response().Response.Response.StatusCode
15251			}
15252			tracing.EndSpan(ctx, sc, err)
15253		}()
15254	}
15255	for {
15256		next, err := page.fn(ctx, page.pc)
15257		if err != nil {
15258			return err
15259		}
15260		page.pc = next
15261		if !next.hasNextLink() || !next.IsEmpty() {
15262			break
15263		}
15264	}
15265	return nil
15266}
15267
15268// Next advances to the next page of values.  If there was an error making
15269// the request the page does not advance and the error is returned.
15270// Deprecated: Use NextWithContext() instead.
15271func (page *PolicyCollectionPage) Next() error {
15272	return page.NextWithContext(context.Background())
15273}
15274
15275// NotDone returns true if the page enumeration should be started or is not yet complete.
15276func (page PolicyCollectionPage) NotDone() bool {
15277	return !page.pc.IsEmpty()
15278}
15279
15280// Response returns the raw server response from the last page request.
15281func (page PolicyCollectionPage) Response() PolicyCollection {
15282	return page.pc
15283}
15284
15285// Values returns the slice of values for the current page or nil if there are no values.
15286func (page PolicyCollectionPage) Values() []Policy {
15287	if page.pc.IsEmpty() {
15288		return nil
15289	}
15290	return *page.pc.Value
15291}
15292
15293// Creates a new instance of the PolicyCollectionPage type.
15294func NewPolicyCollectionPage(cur PolicyCollection, getNextPage func(context.Context, PolicyCollection) (PolicyCollection, error)) PolicyCollectionPage {
15295	return PolicyCollectionPage{
15296		fn: getNextPage,
15297		pc: cur,
15298	}
15299}
15300
15301// PolicyProperties protection profile custom data details.
15302type PolicyProperties struct {
15303	// FriendlyName - The FriendlyName.
15304	FriendlyName *string `json:"friendlyName,omitempty"`
15305	// ProviderSpecificDetails - The ReplicationChannelSetting.
15306	ProviderSpecificDetails BasicPolicyProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
15307}
15308
15309// UnmarshalJSON is the custom unmarshaler for PolicyProperties struct.
15310func (pp *PolicyProperties) UnmarshalJSON(body []byte) error {
15311	var m map[string]*json.RawMessage
15312	err := json.Unmarshal(body, &m)
15313	if err != nil {
15314		return err
15315	}
15316	for k, v := range m {
15317		switch k {
15318		case "friendlyName":
15319			if v != nil {
15320				var friendlyName string
15321				err = json.Unmarshal(*v, &friendlyName)
15322				if err != nil {
15323					return err
15324				}
15325				pp.FriendlyName = &friendlyName
15326			}
15327		case "providerSpecificDetails":
15328			if v != nil {
15329				providerSpecificDetails, err := unmarshalBasicPolicyProviderSpecificDetails(*v)
15330				if err != nil {
15331					return err
15332				}
15333				pp.ProviderSpecificDetails = providerSpecificDetails
15334			}
15335		}
15336	}
15337
15338	return nil
15339}
15340
15341// BasicPolicyProviderSpecificDetails base class for Provider specific details for policies.
15342type BasicPolicyProviderSpecificDetails interface {
15343	AsA2APolicyDetails() (*A2APolicyDetails, bool)
15344	AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool)
15345	AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool)
15346	AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool)
15347	AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool)
15348	AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool)
15349	AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool)
15350	AsInMagePolicyDetails() (*InMagePolicyDetails, bool)
15351	AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool)
15352	AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool)
15353	AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool)
15354	AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool)
15355}
15356
15357// PolicyProviderSpecificDetails base class for Provider specific details for policies.
15358type PolicyProviderSpecificDetails struct {
15359	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
15360	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
15361}
15362
15363func unmarshalBasicPolicyProviderSpecificDetails(body []byte) (BasicPolicyProviderSpecificDetails, error) {
15364	var m map[string]interface{}
15365	err := json.Unmarshal(body, &m)
15366	if err != nil {
15367		return nil, err
15368	}
15369
15370	switch m["instanceType"] {
15371	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A):
15372		var apd A2APolicyDetails
15373		err := json.Unmarshal(body, &apd)
15374		return apd, err
15375	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure):
15376		var hvrapd HyperVReplicaAzurePolicyDetails
15377		err := json.Unmarshal(body, &hvrapd)
15378		return hvrapd, err
15379	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails):
15380		var hvrbpd HyperVReplicaBasePolicyDetails
15381		err := json.Unmarshal(body, &hvrbpd)
15382		return hvrbpd, err
15383	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2):
15384		var hvrbpd HyperVReplicaBluePolicyDetails
15385		err := json.Unmarshal(body, &hvrbpd)
15386		return hvrbpd, err
15387	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012):
15388		var hvrpd HyperVReplicaPolicyDetails
15389		err := json.Unmarshal(body, &hvrpd)
15390		return hvrpd, err
15391	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2):
15392		var imavpd InMageAzureV2PolicyDetails
15393		err := json.Unmarshal(body, &imavpd)
15394		return imavpd, err
15395	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails):
15396		var imbpd InMageBasePolicyDetails
15397		err := json.Unmarshal(body, &imbpd)
15398		return imbpd, err
15399	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage):
15400		var impd InMagePolicyDetails
15401		err := json.Unmarshal(body, &impd)
15402		return impd, err
15403	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm):
15404		var imrpd InMageRcmPolicyDetails
15405		err := json.Unmarshal(body, &imrpd)
15406		return imrpd, err
15407	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration):
15408		var rampd RcmAzureMigrationPolicyDetails
15409		err := json.Unmarshal(body, &rampd)
15410		return rampd, err
15411	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt):
15412		var vcpd VmwareCbtPolicyDetails
15413		err := json.Unmarshal(body, &vcpd)
15414		return vcpd, err
15415	default:
15416		var ppsd PolicyProviderSpecificDetails
15417		err := json.Unmarshal(body, &ppsd)
15418		return ppsd, err
15419	}
15420}
15421func unmarshalBasicPolicyProviderSpecificDetailsArray(body []byte) ([]BasicPolicyProviderSpecificDetails, error) {
15422	var rawMessages []*json.RawMessage
15423	err := json.Unmarshal(body, &rawMessages)
15424	if err != nil {
15425		return nil, err
15426	}
15427
15428	ppsdArray := make([]BasicPolicyProviderSpecificDetails, len(rawMessages))
15429
15430	for index, rawMessage := range rawMessages {
15431		ppsd, err := unmarshalBasicPolicyProviderSpecificDetails(*rawMessage)
15432		if err != nil {
15433			return nil, err
15434		}
15435		ppsdArray[index] = ppsd
15436	}
15437	return ppsdArray, nil
15438}
15439
15440// MarshalJSON is the custom marshaler for PolicyProviderSpecificDetails.
15441func (ppsd PolicyProviderSpecificDetails) MarshalJSON() ([]byte, error) {
15442	ppsd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails
15443	objectMap := make(map[string]interface{})
15444	if ppsd.InstanceType != "" {
15445		objectMap["instanceType"] = ppsd.InstanceType
15446	}
15447	return json.Marshal(objectMap)
15448}
15449
15450// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15451func (ppsd PolicyProviderSpecificDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
15452	return nil, false
15453}
15454
15455// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15456func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
15457	return nil, false
15458}
15459
15460// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15461func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
15462	return nil, false
15463}
15464
15465// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15466func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
15467	return nil, false
15468}
15469
15470// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15471func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
15472	return nil, false
15473}
15474
15475// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15476func (ppsd PolicyProviderSpecificDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
15477	return nil, false
15478}
15479
15480// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15481func (ppsd PolicyProviderSpecificDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
15482	return nil, false
15483}
15484
15485// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15486func (ppsd PolicyProviderSpecificDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
15487	return nil, false
15488}
15489
15490// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15491func (ppsd PolicyProviderSpecificDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
15492	return nil, false
15493}
15494
15495// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15496func (ppsd PolicyProviderSpecificDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
15497	return nil, false
15498}
15499
15500// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15501func (ppsd PolicyProviderSpecificDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
15502	return nil, false
15503}
15504
15505// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15506func (ppsd PolicyProviderSpecificDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
15507	return &ppsd, true
15508}
15509
15510// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15511func (ppsd PolicyProviderSpecificDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
15512	return &ppsd, true
15513}
15514
15515// BasicPolicyProviderSpecificInput base class for provider specific input
15516type BasicPolicyProviderSpecificInput interface {
15517	AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool)
15518	AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool)
15519	AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool)
15520	AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool)
15521	AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool)
15522	AsInMagePolicyInput() (*InMagePolicyInput, bool)
15523	AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool)
15524	AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool)
15525	AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool)
15526}
15527
15528// PolicyProviderSpecificInput base class for provider specific input
15529type PolicyProviderSpecificInput struct {
15530	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
15531	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
15532}
15533
15534func unmarshalBasicPolicyProviderSpecificInput(body []byte) (BasicPolicyProviderSpecificInput, error) {
15535	var m map[string]interface{}
15536	err := json.Unmarshal(body, &m)
15537	if err != nil {
15538		return nil, err
15539	}
15540
15541	switch m["instanceType"] {
15542	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A):
15543		var apci A2APolicyCreationInput
15544		err := json.Unmarshal(body, &apci)
15545		return apci, err
15546	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure):
15547		var hvrapi HyperVReplicaAzurePolicyInput
15548		err := json.Unmarshal(body, &hvrapi)
15549		return hvrapi, err
15550	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2):
15551		var hvrbpi HyperVReplicaBluePolicyInput
15552		err := json.Unmarshal(body, &hvrbpi)
15553		return hvrbpi, err
15554	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012):
15555		var hvrpi HyperVReplicaPolicyInput
15556		err := json.Unmarshal(body, &hvrpi)
15557		return hvrpi, err
15558	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2):
15559		var imavpi InMageAzureV2PolicyInput
15560		err := json.Unmarshal(body, &imavpi)
15561		return imavpi, err
15562	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage):
15563		var impi InMagePolicyInput
15564		err := json.Unmarshal(body, &impi)
15565		return impi, err
15566	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm):
15567		var imrpci InMageRcmPolicyCreationInput
15568		err := json.Unmarshal(body, &imrpci)
15569		return imrpci, err
15570	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt):
15571		var vmcpci VMwareCbtPolicyCreationInput
15572		err := json.Unmarshal(body, &vmcpci)
15573		return vmcpci, err
15574	default:
15575		var ppsi PolicyProviderSpecificInput
15576		err := json.Unmarshal(body, &ppsi)
15577		return ppsi, err
15578	}
15579}
15580func unmarshalBasicPolicyProviderSpecificInputArray(body []byte) ([]BasicPolicyProviderSpecificInput, error) {
15581	var rawMessages []*json.RawMessage
15582	err := json.Unmarshal(body, &rawMessages)
15583	if err != nil {
15584		return nil, err
15585	}
15586
15587	ppsiArray := make([]BasicPolicyProviderSpecificInput, len(rawMessages))
15588
15589	for index, rawMessage := range rawMessages {
15590		ppsi, err := unmarshalBasicPolicyProviderSpecificInput(*rawMessage)
15591		if err != nil {
15592			return nil, err
15593		}
15594		ppsiArray[index] = ppsi
15595	}
15596	return ppsiArray, nil
15597}
15598
15599// MarshalJSON is the custom marshaler for PolicyProviderSpecificInput.
15600func (ppsi PolicyProviderSpecificInput) MarshalJSON() ([]byte, error) {
15601	ppsi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput
15602	objectMap := make(map[string]interface{})
15603	if ppsi.InstanceType != "" {
15604		objectMap["instanceType"] = ppsi.InstanceType
15605	}
15606	return json.Marshal(objectMap)
15607}
15608
15609// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15610func (ppsi PolicyProviderSpecificInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
15611	return nil, false
15612}
15613
15614// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15615func (ppsi PolicyProviderSpecificInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
15616	return nil, false
15617}
15618
15619// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15620func (ppsi PolicyProviderSpecificInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
15621	return nil, false
15622}
15623
15624// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15625func (ppsi PolicyProviderSpecificInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
15626	return nil, false
15627}
15628
15629// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15630func (ppsi PolicyProviderSpecificInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
15631	return nil, false
15632}
15633
15634// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15635func (ppsi PolicyProviderSpecificInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
15636	return nil, false
15637}
15638
15639// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15640func (ppsi PolicyProviderSpecificInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
15641	return nil, false
15642}
15643
15644// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15645func (ppsi PolicyProviderSpecificInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
15646	return nil, false
15647}
15648
15649// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15650func (ppsi PolicyProviderSpecificInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
15651	return &ppsi, true
15652}
15653
15654// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15655func (ppsi PolicyProviderSpecificInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
15656	return &ppsi, true
15657}
15658
15659// ProcessServer details of the Process Server.
15660type ProcessServer struct {
15661	// FriendlyName - The Process Server's friendly name.
15662	FriendlyName *string `json:"friendlyName,omitempty"`
15663	// ID - The Process Server Id.
15664	ID *string `json:"id,omitempty"`
15665	// IPAddress - The IP address of the server.
15666	IPAddress *string `json:"ipAddress,omitempty"`
15667	// OsType - The OS type of the server.
15668	OsType *string `json:"osType,omitempty"`
15669	// AgentVersion - The version of the scout component on the server.
15670	AgentVersion *string `json:"agentVersion,omitempty"`
15671	// LastHeartbeat - The last heartbeat received from the server.
15672	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
15673	// VersionStatus - Version status
15674	VersionStatus *string `json:"versionStatus,omitempty"`
15675	// MobilityServiceUpdates - The list of the mobility service updates available on the Process Server.
15676	MobilityServiceUpdates *[]MobilityServiceUpdate `json:"mobilityServiceUpdates,omitempty"`
15677	// HostID - The agent generated Id.
15678	HostID *string `json:"hostId,omitempty"`
15679	// MachineCount - The servers configured with this PS.
15680	MachineCount *string `json:"machineCount,omitempty"`
15681	// ReplicationPairCount - The number of replication pairs configured in this PS.
15682	ReplicationPairCount *string `json:"replicationPairCount,omitempty"`
15683	// SystemLoad - The percentage of the system load.
15684	SystemLoad *string `json:"systemLoad,omitempty"`
15685	// SystemLoadStatus - The system load status.
15686	SystemLoadStatus *string `json:"systemLoadStatus,omitempty"`
15687	// CPULoad - The percentage of the CPU load.
15688	CPULoad *string `json:"cpuLoad,omitempty"`
15689	// CPULoadStatus - The CPU load status.
15690	CPULoadStatus *string `json:"cpuLoadStatus,omitempty"`
15691	// TotalMemoryInBytes - The total memory.
15692	TotalMemoryInBytes *int64 `json:"totalMemoryInBytes,omitempty"`
15693	// AvailableMemoryInBytes - The available memory.
15694	AvailableMemoryInBytes *int64 `json:"availableMemoryInBytes,omitempty"`
15695	// MemoryUsageStatus - The memory usage status.
15696	MemoryUsageStatus *string `json:"memoryUsageStatus,omitempty"`
15697	// TotalSpaceInBytes - The total space.
15698	TotalSpaceInBytes *int64 `json:"totalSpaceInBytes,omitempty"`
15699	// AvailableSpaceInBytes - The available space.
15700	AvailableSpaceInBytes *int64 `json:"availableSpaceInBytes,omitempty"`
15701	// SpaceUsageStatus - The space usage status.
15702	SpaceUsageStatus *string `json:"spaceUsageStatus,omitempty"`
15703	// PsServiceStatus - The PS service status.
15704	PsServiceStatus *string `json:"psServiceStatus,omitempty"`
15705	// SslCertExpiryDate - The PS SSL cert expiry date.
15706	SslCertExpiryDate *date.Time `json:"sslCertExpiryDate,omitempty"`
15707	// SslCertExpiryRemainingDays - CS SSL cert expiry date.
15708	SslCertExpiryRemainingDays *int32 `json:"sslCertExpiryRemainingDays,omitempty"`
15709	// OsVersion - OS Version of the process server. Note: This will get populated if user has CS version greater than 9.12.0.0.
15710	OsVersion *string `json:"osVersion,omitempty"`
15711	// HealthErrors - Health errors.
15712	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
15713	// AgentExpiryDate - Agent expiry date.
15714	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
15715	// AgentVersionDetails - The agent version details.
15716	AgentVersionDetails *VersionDetails `json:"agentVersionDetails,omitempty"`
15717	// Health - READ-ONLY; The health of Process Server. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
15718	Health ProtectionHealth `json:"health,omitempty"`
15719	// PsStatsRefreshTime - READ-ONLY; The process server stats refresh time.
15720	PsStatsRefreshTime *date.Time `json:"psStatsRefreshTime,omitempty"`
15721	// ThroughputUploadPendingDataInBytes - READ-ONLY; The uploading pending data in bytes.
15722	ThroughputUploadPendingDataInBytes *int64 `json:"throughputUploadPendingDataInBytes,omitempty"`
15723	// ThroughputInMBps - READ-ONLY; The throughput in MBps.
15724	ThroughputInMBps *int64 `json:"throughputInMBps,omitempty"`
15725	// ThroughputInBytes - READ-ONLY; The throughput in bytes.
15726	ThroughputInBytes *int64 `json:"throughputInBytes,omitempty"`
15727	// ThroughputStatus - READ-ONLY; The throughput status.
15728	ThroughputStatus *string `json:"throughputStatus,omitempty"`
15729	// MarsCommunicationStatus - READ-ONLY; The MARS communication status.
15730	MarsCommunicationStatus *string `json:"marsCommunicationStatus,omitempty"`
15731	// MarsRegistrationStatus - READ-ONLY; The MARS registration status.
15732	MarsRegistrationStatus *string `json:"marsRegistrationStatus,omitempty"`
15733}
15734
15735// MarshalJSON is the custom marshaler for ProcessServer.
15736func (ps ProcessServer) MarshalJSON() ([]byte, error) {
15737	objectMap := make(map[string]interface{})
15738	if ps.FriendlyName != nil {
15739		objectMap["friendlyName"] = ps.FriendlyName
15740	}
15741	if ps.ID != nil {
15742		objectMap["id"] = ps.ID
15743	}
15744	if ps.IPAddress != nil {
15745		objectMap["ipAddress"] = ps.IPAddress
15746	}
15747	if ps.OsType != nil {
15748		objectMap["osType"] = ps.OsType
15749	}
15750	if ps.AgentVersion != nil {
15751		objectMap["agentVersion"] = ps.AgentVersion
15752	}
15753	if ps.LastHeartbeat != nil {
15754		objectMap["lastHeartbeat"] = ps.LastHeartbeat
15755	}
15756	if ps.VersionStatus != nil {
15757		objectMap["versionStatus"] = ps.VersionStatus
15758	}
15759	if ps.MobilityServiceUpdates != nil {
15760		objectMap["mobilityServiceUpdates"] = ps.MobilityServiceUpdates
15761	}
15762	if ps.HostID != nil {
15763		objectMap["hostId"] = ps.HostID
15764	}
15765	if ps.MachineCount != nil {
15766		objectMap["machineCount"] = ps.MachineCount
15767	}
15768	if ps.ReplicationPairCount != nil {
15769		objectMap["replicationPairCount"] = ps.ReplicationPairCount
15770	}
15771	if ps.SystemLoad != nil {
15772		objectMap["systemLoad"] = ps.SystemLoad
15773	}
15774	if ps.SystemLoadStatus != nil {
15775		objectMap["systemLoadStatus"] = ps.SystemLoadStatus
15776	}
15777	if ps.CPULoad != nil {
15778		objectMap["cpuLoad"] = ps.CPULoad
15779	}
15780	if ps.CPULoadStatus != nil {
15781		objectMap["cpuLoadStatus"] = ps.CPULoadStatus
15782	}
15783	if ps.TotalMemoryInBytes != nil {
15784		objectMap["totalMemoryInBytes"] = ps.TotalMemoryInBytes
15785	}
15786	if ps.AvailableMemoryInBytes != nil {
15787		objectMap["availableMemoryInBytes"] = ps.AvailableMemoryInBytes
15788	}
15789	if ps.MemoryUsageStatus != nil {
15790		objectMap["memoryUsageStatus"] = ps.MemoryUsageStatus
15791	}
15792	if ps.TotalSpaceInBytes != nil {
15793		objectMap["totalSpaceInBytes"] = ps.TotalSpaceInBytes
15794	}
15795	if ps.AvailableSpaceInBytes != nil {
15796		objectMap["availableSpaceInBytes"] = ps.AvailableSpaceInBytes
15797	}
15798	if ps.SpaceUsageStatus != nil {
15799		objectMap["spaceUsageStatus"] = ps.SpaceUsageStatus
15800	}
15801	if ps.PsServiceStatus != nil {
15802		objectMap["psServiceStatus"] = ps.PsServiceStatus
15803	}
15804	if ps.SslCertExpiryDate != nil {
15805		objectMap["sslCertExpiryDate"] = ps.SslCertExpiryDate
15806	}
15807	if ps.SslCertExpiryRemainingDays != nil {
15808		objectMap["sslCertExpiryRemainingDays"] = ps.SslCertExpiryRemainingDays
15809	}
15810	if ps.OsVersion != nil {
15811		objectMap["osVersion"] = ps.OsVersion
15812	}
15813	if ps.HealthErrors != nil {
15814		objectMap["healthErrors"] = ps.HealthErrors
15815	}
15816	if ps.AgentExpiryDate != nil {
15817		objectMap["agentExpiryDate"] = ps.AgentExpiryDate
15818	}
15819	if ps.AgentVersionDetails != nil {
15820		objectMap["agentVersionDetails"] = ps.AgentVersionDetails
15821	}
15822	return json.Marshal(objectMap)
15823}
15824
15825// ProcessServerDetails process server details.
15826type ProcessServerDetails struct {
15827	// ID - READ-ONLY; The process server Id.
15828	ID *string `json:"id,omitempty"`
15829	// Name - READ-ONLY; The process server name.
15830	Name *string `json:"name,omitempty"`
15831	// Version - READ-ONLY; The process server version.
15832	Version *string `json:"version,omitempty"`
15833	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the process server.
15834	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
15835	// TotalMemoryInBytes - READ-ONLY; The total memory.
15836	TotalMemoryInBytes *int64 `json:"totalMemoryInBytes,omitempty"`
15837	// AvailableMemoryInBytes - READ-ONLY; The available memory.
15838	AvailableMemoryInBytes *int64 `json:"availableMemoryInBytes,omitempty"`
15839	// UsedMemoryInBytes - READ-ONLY; The used memory.
15840	UsedMemoryInBytes *int64 `json:"usedMemoryInBytes,omitempty"`
15841	// MemoryUsagePercentage - READ-ONLY; The memory usage percentage.
15842	MemoryUsagePercentage *float64 `json:"memoryUsagePercentage,omitempty"`
15843	// TotalSpaceInBytes - READ-ONLY; The total disk space.
15844	TotalSpaceInBytes *int64 `json:"totalSpaceInBytes,omitempty"`
15845	// AvailableSpaceInBytes - READ-ONLY; The available disk space.
15846	AvailableSpaceInBytes *int64 `json:"availableSpaceInBytes,omitempty"`
15847	// UsedSpaceInBytes - READ-ONLY; The used disk space.
15848	UsedSpaceInBytes *int64 `json:"usedSpaceInBytes,omitempty"`
15849	// FreeSpacePercentage - READ-ONLY; The free disk space percentage.
15850	FreeSpacePercentage *float64 `json:"freeSpacePercentage,omitempty"`
15851	// ThroughputUploadPendingDataInBytes - READ-ONLY; The uploading pending data in bytes.
15852	ThroughputUploadPendingDataInBytes *int64 `json:"throughputUploadPendingDataInBytes,omitempty"`
15853	// ThroughputInBytes - READ-ONLY; The throughput in bytes.
15854	ThroughputInBytes *int64 `json:"throughputInBytes,omitempty"`
15855	// ProcessorUsagePercentage - READ-ONLY; The processor usage percentage.
15856	ProcessorUsagePercentage *float64 `json:"processorUsagePercentage,omitempty"`
15857	// Health - READ-ONLY; The health of the process server. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
15858	Health ProtectionHealth `json:"health,omitempty"`
15859	// HealthErrors - READ-ONLY; The health errors.
15860	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
15861	// HistoricHealth - READ-ONLY; The historic health of the process server based on the health in last 24 hours. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
15862	HistoricHealth ProtectionHealth `json:"historicHealth,omitempty"`
15863}
15864
15865// MarshalJSON is the custom marshaler for ProcessServerDetails.
15866func (psd ProcessServerDetails) MarshalJSON() ([]byte, error) {
15867	objectMap := make(map[string]interface{})
15868	return json.Marshal(objectMap)
15869}
15870
15871// ProtectableItem replication protected item
15872type ProtectableItem struct {
15873	autorest.Response `json:"-"`
15874	// Properties - The custom data.
15875	Properties *ProtectableItemProperties `json:"properties,omitempty"`
15876	// ID - READ-ONLY; Resource Id
15877	ID *string `json:"id,omitempty"`
15878	// Name - READ-ONLY; Resource Name
15879	Name *string `json:"name,omitempty"`
15880	// Type - READ-ONLY; Resource Type
15881	Type *string `json:"type,omitempty"`
15882	// Location - Resource Location
15883	Location *string `json:"location,omitempty"`
15884}
15885
15886// MarshalJSON is the custom marshaler for ProtectableItem.
15887func (pi ProtectableItem) MarshalJSON() ([]byte, error) {
15888	objectMap := make(map[string]interface{})
15889	if pi.Properties != nil {
15890		objectMap["properties"] = pi.Properties
15891	}
15892	if pi.Location != nil {
15893		objectMap["location"] = pi.Location
15894	}
15895	return json.Marshal(objectMap)
15896}
15897
15898// ProtectableItemCollection protectable item collection.
15899type ProtectableItemCollection struct {
15900	autorest.Response `json:"-"`
15901	// Value - The Protectable item details.
15902	Value *[]ProtectableItem `json:"value,omitempty"`
15903	// NextLink - The value of next link.
15904	NextLink *string `json:"nextLink,omitempty"`
15905}
15906
15907// ProtectableItemCollectionIterator provides access to a complete listing of ProtectableItem values.
15908type ProtectableItemCollectionIterator struct {
15909	i    int
15910	page ProtectableItemCollectionPage
15911}
15912
15913// NextWithContext advances to the next value.  If there was an error making
15914// the request the iterator does not advance and the error is returned.
15915func (iter *ProtectableItemCollectionIterator) NextWithContext(ctx context.Context) (err error) {
15916	if tracing.IsEnabled() {
15917		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectableItemCollectionIterator.NextWithContext")
15918		defer func() {
15919			sc := -1
15920			if iter.Response().Response.Response != nil {
15921				sc = iter.Response().Response.Response.StatusCode
15922			}
15923			tracing.EndSpan(ctx, sc, err)
15924		}()
15925	}
15926	iter.i++
15927	if iter.i < len(iter.page.Values()) {
15928		return nil
15929	}
15930	err = iter.page.NextWithContext(ctx)
15931	if err != nil {
15932		iter.i--
15933		return err
15934	}
15935	iter.i = 0
15936	return nil
15937}
15938
15939// Next advances to the next value.  If there was an error making
15940// the request the iterator does not advance and the error is returned.
15941// Deprecated: Use NextWithContext() instead.
15942func (iter *ProtectableItemCollectionIterator) Next() error {
15943	return iter.NextWithContext(context.Background())
15944}
15945
15946// NotDone returns true if the enumeration should be started or is not yet complete.
15947func (iter ProtectableItemCollectionIterator) NotDone() bool {
15948	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15949}
15950
15951// Response returns the raw server response from the last page request.
15952func (iter ProtectableItemCollectionIterator) Response() ProtectableItemCollection {
15953	return iter.page.Response()
15954}
15955
15956// Value returns the current value or a zero-initialized value if the
15957// iterator has advanced beyond the end of the collection.
15958func (iter ProtectableItemCollectionIterator) Value() ProtectableItem {
15959	if !iter.page.NotDone() {
15960		return ProtectableItem{}
15961	}
15962	return iter.page.Values()[iter.i]
15963}
15964
15965// Creates a new instance of the ProtectableItemCollectionIterator type.
15966func NewProtectableItemCollectionIterator(page ProtectableItemCollectionPage) ProtectableItemCollectionIterator {
15967	return ProtectableItemCollectionIterator{page: page}
15968}
15969
15970// IsEmpty returns true if the ListResult contains no values.
15971func (pic ProtectableItemCollection) IsEmpty() bool {
15972	return pic.Value == nil || len(*pic.Value) == 0
15973}
15974
15975// hasNextLink returns true if the NextLink is not empty.
15976func (pic ProtectableItemCollection) hasNextLink() bool {
15977	return pic.NextLink != nil && len(*pic.NextLink) != 0
15978}
15979
15980// protectableItemCollectionPreparer prepares a request to retrieve the next set of results.
15981// It returns nil if no more results exist.
15982func (pic ProtectableItemCollection) protectableItemCollectionPreparer(ctx context.Context) (*http.Request, error) {
15983	if !pic.hasNextLink() {
15984		return nil, nil
15985	}
15986	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15987		autorest.AsJSON(),
15988		autorest.AsGet(),
15989		autorest.WithBaseURL(to.String(pic.NextLink)))
15990}
15991
15992// ProtectableItemCollectionPage contains a page of ProtectableItem values.
15993type ProtectableItemCollectionPage struct {
15994	fn  func(context.Context, ProtectableItemCollection) (ProtectableItemCollection, error)
15995	pic ProtectableItemCollection
15996}
15997
15998// NextWithContext advances to the next page of values.  If there was an error making
15999// the request the page does not advance and the error is returned.
16000func (page *ProtectableItemCollectionPage) NextWithContext(ctx context.Context) (err error) {
16001	if tracing.IsEnabled() {
16002		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectableItemCollectionPage.NextWithContext")
16003		defer func() {
16004			sc := -1
16005			if page.Response().Response.Response != nil {
16006				sc = page.Response().Response.Response.StatusCode
16007			}
16008			tracing.EndSpan(ctx, sc, err)
16009		}()
16010	}
16011	for {
16012		next, err := page.fn(ctx, page.pic)
16013		if err != nil {
16014			return err
16015		}
16016		page.pic = next
16017		if !next.hasNextLink() || !next.IsEmpty() {
16018			break
16019		}
16020	}
16021	return nil
16022}
16023
16024// Next advances to the next page of values.  If there was an error making
16025// the request the page does not advance and the error is returned.
16026// Deprecated: Use NextWithContext() instead.
16027func (page *ProtectableItemCollectionPage) Next() error {
16028	return page.NextWithContext(context.Background())
16029}
16030
16031// NotDone returns true if the page enumeration should be started or is not yet complete.
16032func (page ProtectableItemCollectionPage) NotDone() bool {
16033	return !page.pic.IsEmpty()
16034}
16035
16036// Response returns the raw server response from the last page request.
16037func (page ProtectableItemCollectionPage) Response() ProtectableItemCollection {
16038	return page.pic
16039}
16040
16041// Values returns the slice of values for the current page or nil if there are no values.
16042func (page ProtectableItemCollectionPage) Values() []ProtectableItem {
16043	if page.pic.IsEmpty() {
16044		return nil
16045	}
16046	return *page.pic.Value
16047}
16048
16049// Creates a new instance of the ProtectableItemCollectionPage type.
16050func NewProtectableItemCollectionPage(cur ProtectableItemCollection, getNextPage func(context.Context, ProtectableItemCollection) (ProtectableItemCollection, error)) ProtectableItemCollectionPage {
16051	return ProtectableItemCollectionPage{
16052		fn:  getNextPage,
16053		pic: cur,
16054	}
16055}
16056
16057// ProtectableItemProperties replication protected item custom data details.
16058type ProtectableItemProperties struct {
16059	// FriendlyName - The name.
16060	FriendlyName *string `json:"friendlyName,omitempty"`
16061	// ProtectionStatus - The protection status.
16062	ProtectionStatus *string `json:"protectionStatus,omitempty"`
16063	// ReplicationProtectedItemID - The ARM resource of protected items.
16064	ReplicationProtectedItemID *string `json:"replicationProtectedItemId,omitempty"`
16065	// RecoveryServicesProviderID - The recovery provider ARM Id.
16066	RecoveryServicesProviderID *string `json:"recoveryServicesProviderId,omitempty"`
16067	// ProtectionReadinessErrors - The Current protection readiness errors.
16068	ProtectionReadinessErrors *[]string `json:"protectionReadinessErrors,omitempty"`
16069	// SupportedReplicationProviders - The list of replication providers supported for the protectable item.
16070	SupportedReplicationProviders *[]string `json:"supportedReplicationProviders,omitempty"`
16071	// CustomDetails - The Replication provider custom settings.
16072	CustomDetails BasicConfigurationSettings `json:"customDetails,omitempty"`
16073}
16074
16075// UnmarshalJSON is the custom unmarshaler for ProtectableItemProperties struct.
16076func (pip *ProtectableItemProperties) UnmarshalJSON(body []byte) error {
16077	var m map[string]*json.RawMessage
16078	err := json.Unmarshal(body, &m)
16079	if err != nil {
16080		return err
16081	}
16082	for k, v := range m {
16083		switch k {
16084		case "friendlyName":
16085			if v != nil {
16086				var friendlyName string
16087				err = json.Unmarshal(*v, &friendlyName)
16088				if err != nil {
16089					return err
16090				}
16091				pip.FriendlyName = &friendlyName
16092			}
16093		case "protectionStatus":
16094			if v != nil {
16095				var protectionStatus string
16096				err = json.Unmarshal(*v, &protectionStatus)
16097				if err != nil {
16098					return err
16099				}
16100				pip.ProtectionStatus = &protectionStatus
16101			}
16102		case "replicationProtectedItemId":
16103			if v != nil {
16104				var replicationProtectedItemID string
16105				err = json.Unmarshal(*v, &replicationProtectedItemID)
16106				if err != nil {
16107					return err
16108				}
16109				pip.ReplicationProtectedItemID = &replicationProtectedItemID
16110			}
16111		case "recoveryServicesProviderId":
16112			if v != nil {
16113				var recoveryServicesProviderID string
16114				err = json.Unmarshal(*v, &recoveryServicesProviderID)
16115				if err != nil {
16116					return err
16117				}
16118				pip.RecoveryServicesProviderID = &recoveryServicesProviderID
16119			}
16120		case "protectionReadinessErrors":
16121			if v != nil {
16122				var protectionReadinessErrors []string
16123				err = json.Unmarshal(*v, &protectionReadinessErrors)
16124				if err != nil {
16125					return err
16126				}
16127				pip.ProtectionReadinessErrors = &protectionReadinessErrors
16128			}
16129		case "supportedReplicationProviders":
16130			if v != nil {
16131				var supportedReplicationProviders []string
16132				err = json.Unmarshal(*v, &supportedReplicationProviders)
16133				if err != nil {
16134					return err
16135				}
16136				pip.SupportedReplicationProviders = &supportedReplicationProviders
16137			}
16138		case "customDetails":
16139			if v != nil {
16140				customDetails, err := unmarshalBasicConfigurationSettings(*v)
16141				if err != nil {
16142					return err
16143				}
16144				pip.CustomDetails = customDetails
16145			}
16146		}
16147	}
16148
16149	return nil
16150}
16151
16152// ProtectableItemQueryParameter query parameter to enumerate Protectable items.
16153type ProtectableItemQueryParameter struct {
16154	// State - State of the Protectable item query filter.
16155	State *string `json:"state,omitempty"`
16156}
16157
16158// ProtectedItemsQueryParameter query parameter to enumerate protected items.
16159type ProtectedItemsQueryParameter struct {
16160	// SourceFabricName - The source fabric name filter.
16161	SourceFabricName *string `json:"sourceFabricName,omitempty"`
16162	// RecoveryPlanName - The recovery plan filter.
16163	RecoveryPlanName *string `json:"recoveryPlanName,omitempty"`
16164	// VCenterName - The vCenter name filter.
16165	VCenterName *string `json:"vCenterName,omitempty"`
16166	// InstanceType - The replication provider type.
16167	InstanceType *string `json:"instanceType,omitempty"`
16168	// MultiVMGroupCreateOption - Whether Multi VM group is auto created or specified by user. Possible values include: 'AutoCreated', 'UserSpecified'
16169	MultiVMGroupCreateOption MultiVMGroupCreateOption `json:"multiVmGroupCreateOption,omitempty"`
16170}
16171
16172// ProtectionContainer protection container details.
16173type ProtectionContainer struct {
16174	autorest.Response `json:"-"`
16175	// Properties - The custom data.
16176	Properties *ProtectionContainerProperties `json:"properties,omitempty"`
16177	// ID - READ-ONLY; Resource Id
16178	ID *string `json:"id,omitempty"`
16179	// Name - READ-ONLY; Resource Name
16180	Name *string `json:"name,omitempty"`
16181	// Type - READ-ONLY; Resource Type
16182	Type *string `json:"type,omitempty"`
16183	// Location - Resource Location
16184	Location *string `json:"location,omitempty"`
16185}
16186
16187// MarshalJSON is the custom marshaler for ProtectionContainer.
16188func (pc ProtectionContainer) MarshalJSON() ([]byte, error) {
16189	objectMap := make(map[string]interface{})
16190	if pc.Properties != nil {
16191		objectMap["properties"] = pc.Properties
16192	}
16193	if pc.Location != nil {
16194		objectMap["location"] = pc.Location
16195	}
16196	return json.Marshal(objectMap)
16197}
16198
16199// ProtectionContainerCollection protection Container collection.
16200type ProtectionContainerCollection struct {
16201	autorest.Response `json:"-"`
16202	// Value - The Protection Container details.
16203	Value *[]ProtectionContainer `json:"value,omitempty"`
16204	// NextLink - The value of next link.
16205	NextLink *string `json:"nextLink,omitempty"`
16206}
16207
16208// ProtectionContainerCollectionIterator provides access to a complete listing of ProtectionContainer
16209// values.
16210type ProtectionContainerCollectionIterator struct {
16211	i    int
16212	page ProtectionContainerCollectionPage
16213}
16214
16215// NextWithContext advances to the next value.  If there was an error making
16216// the request the iterator does not advance and the error is returned.
16217func (iter *ProtectionContainerCollectionIterator) NextWithContext(ctx context.Context) (err error) {
16218	if tracing.IsEnabled() {
16219		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerCollectionIterator.NextWithContext")
16220		defer func() {
16221			sc := -1
16222			if iter.Response().Response.Response != nil {
16223				sc = iter.Response().Response.Response.StatusCode
16224			}
16225			tracing.EndSpan(ctx, sc, err)
16226		}()
16227	}
16228	iter.i++
16229	if iter.i < len(iter.page.Values()) {
16230		return nil
16231	}
16232	err = iter.page.NextWithContext(ctx)
16233	if err != nil {
16234		iter.i--
16235		return err
16236	}
16237	iter.i = 0
16238	return nil
16239}
16240
16241// Next advances to the next value.  If there was an error making
16242// the request the iterator does not advance and the error is returned.
16243// Deprecated: Use NextWithContext() instead.
16244func (iter *ProtectionContainerCollectionIterator) Next() error {
16245	return iter.NextWithContext(context.Background())
16246}
16247
16248// NotDone returns true if the enumeration should be started or is not yet complete.
16249func (iter ProtectionContainerCollectionIterator) NotDone() bool {
16250	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16251}
16252
16253// Response returns the raw server response from the last page request.
16254func (iter ProtectionContainerCollectionIterator) Response() ProtectionContainerCollection {
16255	return iter.page.Response()
16256}
16257
16258// Value returns the current value or a zero-initialized value if the
16259// iterator has advanced beyond the end of the collection.
16260func (iter ProtectionContainerCollectionIterator) Value() ProtectionContainer {
16261	if !iter.page.NotDone() {
16262		return ProtectionContainer{}
16263	}
16264	return iter.page.Values()[iter.i]
16265}
16266
16267// Creates a new instance of the ProtectionContainerCollectionIterator type.
16268func NewProtectionContainerCollectionIterator(page ProtectionContainerCollectionPage) ProtectionContainerCollectionIterator {
16269	return ProtectionContainerCollectionIterator{page: page}
16270}
16271
16272// IsEmpty returns true if the ListResult contains no values.
16273func (pcc ProtectionContainerCollection) IsEmpty() bool {
16274	return pcc.Value == nil || len(*pcc.Value) == 0
16275}
16276
16277// hasNextLink returns true if the NextLink is not empty.
16278func (pcc ProtectionContainerCollection) hasNextLink() bool {
16279	return pcc.NextLink != nil && len(*pcc.NextLink) != 0
16280}
16281
16282// protectionContainerCollectionPreparer prepares a request to retrieve the next set of results.
16283// It returns nil if no more results exist.
16284func (pcc ProtectionContainerCollection) protectionContainerCollectionPreparer(ctx context.Context) (*http.Request, error) {
16285	if !pcc.hasNextLink() {
16286		return nil, nil
16287	}
16288	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16289		autorest.AsJSON(),
16290		autorest.AsGet(),
16291		autorest.WithBaseURL(to.String(pcc.NextLink)))
16292}
16293
16294// ProtectionContainerCollectionPage contains a page of ProtectionContainer values.
16295type ProtectionContainerCollectionPage struct {
16296	fn  func(context.Context, ProtectionContainerCollection) (ProtectionContainerCollection, error)
16297	pcc ProtectionContainerCollection
16298}
16299
16300// NextWithContext advances to the next page of values.  If there was an error making
16301// the request the page does not advance and the error is returned.
16302func (page *ProtectionContainerCollectionPage) NextWithContext(ctx context.Context) (err error) {
16303	if tracing.IsEnabled() {
16304		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerCollectionPage.NextWithContext")
16305		defer func() {
16306			sc := -1
16307			if page.Response().Response.Response != nil {
16308				sc = page.Response().Response.Response.StatusCode
16309			}
16310			tracing.EndSpan(ctx, sc, err)
16311		}()
16312	}
16313	for {
16314		next, err := page.fn(ctx, page.pcc)
16315		if err != nil {
16316			return err
16317		}
16318		page.pcc = next
16319		if !next.hasNextLink() || !next.IsEmpty() {
16320			break
16321		}
16322	}
16323	return nil
16324}
16325
16326// Next advances to the next page of values.  If there was an error making
16327// the request the page does not advance and the error is returned.
16328// Deprecated: Use NextWithContext() instead.
16329func (page *ProtectionContainerCollectionPage) Next() error {
16330	return page.NextWithContext(context.Background())
16331}
16332
16333// NotDone returns true if the page enumeration should be started or is not yet complete.
16334func (page ProtectionContainerCollectionPage) NotDone() bool {
16335	return !page.pcc.IsEmpty()
16336}
16337
16338// Response returns the raw server response from the last page request.
16339func (page ProtectionContainerCollectionPage) Response() ProtectionContainerCollection {
16340	return page.pcc
16341}
16342
16343// Values returns the slice of values for the current page or nil if there are no values.
16344func (page ProtectionContainerCollectionPage) Values() []ProtectionContainer {
16345	if page.pcc.IsEmpty() {
16346		return nil
16347	}
16348	return *page.pcc.Value
16349}
16350
16351// Creates a new instance of the ProtectionContainerCollectionPage type.
16352func NewProtectionContainerCollectionPage(cur ProtectionContainerCollection, getNextPage func(context.Context, ProtectionContainerCollection) (ProtectionContainerCollection, error)) ProtectionContainerCollectionPage {
16353	return ProtectionContainerCollectionPage{
16354		fn:  getNextPage,
16355		pcc: cur,
16356	}
16357}
16358
16359// ProtectionContainerFabricSpecificDetails base class for fabric specific details of container.
16360type ProtectionContainerFabricSpecificDetails struct {
16361	// InstanceType - READ-ONLY; Gets the class type. Overridden in derived classes.
16362	InstanceType *string `json:"instanceType,omitempty"`
16363}
16364
16365// MarshalJSON is the custom marshaler for ProtectionContainerFabricSpecificDetails.
16366func (pcfsd ProtectionContainerFabricSpecificDetails) MarshalJSON() ([]byte, error) {
16367	objectMap := make(map[string]interface{})
16368	return json.Marshal(objectMap)
16369}
16370
16371// ProtectionContainerMapping protection container mapping object.
16372type ProtectionContainerMapping struct {
16373	autorest.Response `json:"-"`
16374	// Properties - The custom data.
16375	Properties *ProtectionContainerMappingProperties `json:"properties,omitempty"`
16376	// ID - READ-ONLY; Resource Id
16377	ID *string `json:"id,omitempty"`
16378	// Name - READ-ONLY; Resource Name
16379	Name *string `json:"name,omitempty"`
16380	// Type - READ-ONLY; Resource Type
16381	Type *string `json:"type,omitempty"`
16382	// Location - Resource Location
16383	Location *string `json:"location,omitempty"`
16384}
16385
16386// MarshalJSON is the custom marshaler for ProtectionContainerMapping.
16387func (pcm ProtectionContainerMapping) MarshalJSON() ([]byte, error) {
16388	objectMap := make(map[string]interface{})
16389	if pcm.Properties != nil {
16390		objectMap["properties"] = pcm.Properties
16391	}
16392	if pcm.Location != nil {
16393		objectMap["location"] = pcm.Location
16394	}
16395	return json.Marshal(objectMap)
16396}
16397
16398// ProtectionContainerMappingCollection protection container mapping collection class.
16399type ProtectionContainerMappingCollection struct {
16400	autorest.Response `json:"-"`
16401	// Value - List of container mappings.
16402	Value *[]ProtectionContainerMapping `json:"value,omitempty"`
16403	// NextLink - Link to fetch rest of the data.
16404	NextLink *string `json:"nextLink,omitempty"`
16405}
16406
16407// ProtectionContainerMappingCollectionIterator provides access to a complete listing of
16408// ProtectionContainerMapping values.
16409type ProtectionContainerMappingCollectionIterator struct {
16410	i    int
16411	page ProtectionContainerMappingCollectionPage
16412}
16413
16414// NextWithContext advances to the next value.  If there was an error making
16415// the request the iterator does not advance and the error is returned.
16416func (iter *ProtectionContainerMappingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
16417	if tracing.IsEnabled() {
16418		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerMappingCollectionIterator.NextWithContext")
16419		defer func() {
16420			sc := -1
16421			if iter.Response().Response.Response != nil {
16422				sc = iter.Response().Response.Response.StatusCode
16423			}
16424			tracing.EndSpan(ctx, sc, err)
16425		}()
16426	}
16427	iter.i++
16428	if iter.i < len(iter.page.Values()) {
16429		return nil
16430	}
16431	err = iter.page.NextWithContext(ctx)
16432	if err != nil {
16433		iter.i--
16434		return err
16435	}
16436	iter.i = 0
16437	return nil
16438}
16439
16440// Next advances to the next value.  If there was an error making
16441// the request the iterator does not advance and the error is returned.
16442// Deprecated: Use NextWithContext() instead.
16443func (iter *ProtectionContainerMappingCollectionIterator) Next() error {
16444	return iter.NextWithContext(context.Background())
16445}
16446
16447// NotDone returns true if the enumeration should be started or is not yet complete.
16448func (iter ProtectionContainerMappingCollectionIterator) NotDone() bool {
16449	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16450}
16451
16452// Response returns the raw server response from the last page request.
16453func (iter ProtectionContainerMappingCollectionIterator) Response() ProtectionContainerMappingCollection {
16454	return iter.page.Response()
16455}
16456
16457// Value returns the current value or a zero-initialized value if the
16458// iterator has advanced beyond the end of the collection.
16459func (iter ProtectionContainerMappingCollectionIterator) Value() ProtectionContainerMapping {
16460	if !iter.page.NotDone() {
16461		return ProtectionContainerMapping{}
16462	}
16463	return iter.page.Values()[iter.i]
16464}
16465
16466// Creates a new instance of the ProtectionContainerMappingCollectionIterator type.
16467func NewProtectionContainerMappingCollectionIterator(page ProtectionContainerMappingCollectionPage) ProtectionContainerMappingCollectionIterator {
16468	return ProtectionContainerMappingCollectionIterator{page: page}
16469}
16470
16471// IsEmpty returns true if the ListResult contains no values.
16472func (pcmc ProtectionContainerMappingCollection) IsEmpty() bool {
16473	return pcmc.Value == nil || len(*pcmc.Value) == 0
16474}
16475
16476// hasNextLink returns true if the NextLink is not empty.
16477func (pcmc ProtectionContainerMappingCollection) hasNextLink() bool {
16478	return pcmc.NextLink != nil && len(*pcmc.NextLink) != 0
16479}
16480
16481// protectionContainerMappingCollectionPreparer prepares a request to retrieve the next set of results.
16482// It returns nil if no more results exist.
16483func (pcmc ProtectionContainerMappingCollection) protectionContainerMappingCollectionPreparer(ctx context.Context) (*http.Request, error) {
16484	if !pcmc.hasNextLink() {
16485		return nil, nil
16486	}
16487	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16488		autorest.AsJSON(),
16489		autorest.AsGet(),
16490		autorest.WithBaseURL(to.String(pcmc.NextLink)))
16491}
16492
16493// ProtectionContainerMappingCollectionPage contains a page of ProtectionContainerMapping values.
16494type ProtectionContainerMappingCollectionPage struct {
16495	fn   func(context.Context, ProtectionContainerMappingCollection) (ProtectionContainerMappingCollection, error)
16496	pcmc ProtectionContainerMappingCollection
16497}
16498
16499// NextWithContext advances to the next page of values.  If there was an error making
16500// the request the page does not advance and the error is returned.
16501func (page *ProtectionContainerMappingCollectionPage) NextWithContext(ctx context.Context) (err error) {
16502	if tracing.IsEnabled() {
16503		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerMappingCollectionPage.NextWithContext")
16504		defer func() {
16505			sc := -1
16506			if page.Response().Response.Response != nil {
16507				sc = page.Response().Response.Response.StatusCode
16508			}
16509			tracing.EndSpan(ctx, sc, err)
16510		}()
16511	}
16512	for {
16513		next, err := page.fn(ctx, page.pcmc)
16514		if err != nil {
16515			return err
16516		}
16517		page.pcmc = next
16518		if !next.hasNextLink() || !next.IsEmpty() {
16519			break
16520		}
16521	}
16522	return nil
16523}
16524
16525// Next advances to the next page of values.  If there was an error making
16526// the request the page does not advance and the error is returned.
16527// Deprecated: Use NextWithContext() instead.
16528func (page *ProtectionContainerMappingCollectionPage) Next() error {
16529	return page.NextWithContext(context.Background())
16530}
16531
16532// NotDone returns true if the page enumeration should be started or is not yet complete.
16533func (page ProtectionContainerMappingCollectionPage) NotDone() bool {
16534	return !page.pcmc.IsEmpty()
16535}
16536
16537// Response returns the raw server response from the last page request.
16538func (page ProtectionContainerMappingCollectionPage) Response() ProtectionContainerMappingCollection {
16539	return page.pcmc
16540}
16541
16542// Values returns the slice of values for the current page or nil if there are no values.
16543func (page ProtectionContainerMappingCollectionPage) Values() []ProtectionContainerMapping {
16544	if page.pcmc.IsEmpty() {
16545		return nil
16546	}
16547	return *page.pcmc.Value
16548}
16549
16550// Creates a new instance of the ProtectionContainerMappingCollectionPage type.
16551func NewProtectionContainerMappingCollectionPage(cur ProtectionContainerMappingCollection, getNextPage func(context.Context, ProtectionContainerMappingCollection) (ProtectionContainerMappingCollection, error)) ProtectionContainerMappingCollectionPage {
16552	return ProtectionContainerMappingCollectionPage{
16553		fn:   getNextPage,
16554		pcmc: cur,
16555	}
16556}
16557
16558// ProtectionContainerMappingProperties protection container mapping properties.
16559type ProtectionContainerMappingProperties struct {
16560	// TargetProtectionContainerID - Paired protection container ARM ID.
16561	TargetProtectionContainerID *string `json:"targetProtectionContainerId,omitempty"`
16562	// TargetProtectionContainerFriendlyName - Friendly name of paired container.
16563	TargetProtectionContainerFriendlyName *string `json:"targetProtectionContainerFriendlyName,omitempty"`
16564	// ProviderSpecificDetails - Provider specific provider details.
16565	ProviderSpecificDetails BasicProtectionContainerMappingProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
16566	// Health - Health of pairing.
16567	Health *string `json:"health,omitempty"`
16568	// HealthErrorDetails - Health error.
16569	HealthErrorDetails *[]HealthError `json:"healthErrorDetails,omitempty"`
16570	// PolicyID - Policy ARM Id.
16571	PolicyID *string `json:"policyId,omitempty"`
16572	// State - Association Status
16573	State *string `json:"state,omitempty"`
16574	// SourceProtectionContainerFriendlyName - Friendly name of source protection container.
16575	SourceProtectionContainerFriendlyName *string `json:"sourceProtectionContainerFriendlyName,omitempty"`
16576	// SourceFabricFriendlyName - Friendly name of source fabric.
16577	SourceFabricFriendlyName *string `json:"sourceFabricFriendlyName,omitempty"`
16578	// TargetFabricFriendlyName - Friendly name of target fabric.
16579	TargetFabricFriendlyName *string `json:"targetFabricFriendlyName,omitempty"`
16580	// PolicyFriendlyName - Friendly name of replication policy.
16581	PolicyFriendlyName *string `json:"policyFriendlyName,omitempty"`
16582}
16583
16584// UnmarshalJSON is the custom unmarshaler for ProtectionContainerMappingProperties struct.
16585func (pcmp *ProtectionContainerMappingProperties) UnmarshalJSON(body []byte) error {
16586	var m map[string]*json.RawMessage
16587	err := json.Unmarshal(body, &m)
16588	if err != nil {
16589		return err
16590	}
16591	for k, v := range m {
16592		switch k {
16593		case "targetProtectionContainerId":
16594			if v != nil {
16595				var targetProtectionContainerID string
16596				err = json.Unmarshal(*v, &targetProtectionContainerID)
16597				if err != nil {
16598					return err
16599				}
16600				pcmp.TargetProtectionContainerID = &targetProtectionContainerID
16601			}
16602		case "targetProtectionContainerFriendlyName":
16603			if v != nil {
16604				var targetProtectionContainerFriendlyName string
16605				err = json.Unmarshal(*v, &targetProtectionContainerFriendlyName)
16606				if err != nil {
16607					return err
16608				}
16609				pcmp.TargetProtectionContainerFriendlyName = &targetProtectionContainerFriendlyName
16610			}
16611		case "providerSpecificDetails":
16612			if v != nil {
16613				providerSpecificDetails, err := unmarshalBasicProtectionContainerMappingProviderSpecificDetails(*v)
16614				if err != nil {
16615					return err
16616				}
16617				pcmp.ProviderSpecificDetails = providerSpecificDetails
16618			}
16619		case "health":
16620			if v != nil {
16621				var health string
16622				err = json.Unmarshal(*v, &health)
16623				if err != nil {
16624					return err
16625				}
16626				pcmp.Health = &health
16627			}
16628		case "healthErrorDetails":
16629			if v != nil {
16630				var healthErrorDetails []HealthError
16631				err = json.Unmarshal(*v, &healthErrorDetails)
16632				if err != nil {
16633					return err
16634				}
16635				pcmp.HealthErrorDetails = &healthErrorDetails
16636			}
16637		case "policyId":
16638			if v != nil {
16639				var policyID string
16640				err = json.Unmarshal(*v, &policyID)
16641				if err != nil {
16642					return err
16643				}
16644				pcmp.PolicyID = &policyID
16645			}
16646		case "state":
16647			if v != nil {
16648				var state string
16649				err = json.Unmarshal(*v, &state)
16650				if err != nil {
16651					return err
16652				}
16653				pcmp.State = &state
16654			}
16655		case "sourceProtectionContainerFriendlyName":
16656			if v != nil {
16657				var sourceProtectionContainerFriendlyName string
16658				err = json.Unmarshal(*v, &sourceProtectionContainerFriendlyName)
16659				if err != nil {
16660					return err
16661				}
16662				pcmp.SourceProtectionContainerFriendlyName = &sourceProtectionContainerFriendlyName
16663			}
16664		case "sourceFabricFriendlyName":
16665			if v != nil {
16666				var sourceFabricFriendlyName string
16667				err = json.Unmarshal(*v, &sourceFabricFriendlyName)
16668				if err != nil {
16669					return err
16670				}
16671				pcmp.SourceFabricFriendlyName = &sourceFabricFriendlyName
16672			}
16673		case "targetFabricFriendlyName":
16674			if v != nil {
16675				var targetFabricFriendlyName string
16676				err = json.Unmarshal(*v, &targetFabricFriendlyName)
16677				if err != nil {
16678					return err
16679				}
16680				pcmp.TargetFabricFriendlyName = &targetFabricFriendlyName
16681			}
16682		case "policyFriendlyName":
16683			if v != nil {
16684				var policyFriendlyName string
16685				err = json.Unmarshal(*v, &policyFriendlyName)
16686				if err != nil {
16687					return err
16688				}
16689				pcmp.PolicyFriendlyName = &policyFriendlyName
16690			}
16691		}
16692	}
16693
16694	return nil
16695}
16696
16697// BasicProtectionContainerMappingProviderSpecificDetails container mapping provider specific details.
16698type BasicProtectionContainerMappingProviderSpecificDetails interface {
16699	AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool)
16700	AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool)
16701	AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool)
16702}
16703
16704// ProtectionContainerMappingProviderSpecificDetails container mapping provider specific details.
16705type ProtectionContainerMappingProviderSpecificDetails struct {
16706	// InstanceType - Possible values include: 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt'
16707	InstanceType InstanceTypeBasicProtectionContainerMappingProviderSpecificDetails `json:"instanceType,omitempty"`
16708}
16709
16710func unmarshalBasicProtectionContainerMappingProviderSpecificDetails(body []byte) (BasicProtectionContainerMappingProviderSpecificDetails, error) {
16711	var m map[string]interface{}
16712	err := json.Unmarshal(body, &m)
16713	if err != nil {
16714		return nil, err
16715	}
16716
16717	switch m["instanceType"] {
16718	case string(InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A):
16719		var apcmd A2AProtectionContainerMappingDetails
16720		err := json.Unmarshal(body, &apcmd)
16721		return apcmd, err
16722	case string(InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt):
16723		var vmcpcmd VMwareCbtProtectionContainerMappingDetails
16724		err := json.Unmarshal(body, &vmcpcmd)
16725		return vmcpcmd, err
16726	default:
16727		var pcmpsd ProtectionContainerMappingProviderSpecificDetails
16728		err := json.Unmarshal(body, &pcmpsd)
16729		return pcmpsd, err
16730	}
16731}
16732func unmarshalBasicProtectionContainerMappingProviderSpecificDetailsArray(body []byte) ([]BasicProtectionContainerMappingProviderSpecificDetails, error) {
16733	var rawMessages []*json.RawMessage
16734	err := json.Unmarshal(body, &rawMessages)
16735	if err != nil {
16736		return nil, err
16737	}
16738
16739	pcmpsdArray := make([]BasicProtectionContainerMappingProviderSpecificDetails, len(rawMessages))
16740
16741	for index, rawMessage := range rawMessages {
16742		pcmpsd, err := unmarshalBasicProtectionContainerMappingProviderSpecificDetails(*rawMessage)
16743		if err != nil {
16744			return nil, err
16745		}
16746		pcmpsdArray[index] = pcmpsd
16747	}
16748	return pcmpsdArray, nil
16749}
16750
16751// MarshalJSON is the custom marshaler for ProtectionContainerMappingProviderSpecificDetails.
16752func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) MarshalJSON() ([]byte, error) {
16753	pcmpsd.InstanceType = InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails
16754	objectMap := make(map[string]interface{})
16755	if pcmpsd.InstanceType != "" {
16756		objectMap["instanceType"] = pcmpsd.InstanceType
16757	}
16758	return json.Marshal(objectMap)
16759}
16760
16761// AsA2AProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16762func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool) {
16763	return nil, false
16764}
16765
16766// AsVMwareCbtProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16767func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool) {
16768	return nil, false
16769}
16770
16771// AsProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16772func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool) {
16773	return &pcmpsd, true
16774}
16775
16776// AsBasicProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16777func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsBasicProtectionContainerMappingProviderSpecificDetails() (BasicProtectionContainerMappingProviderSpecificDetails, bool) {
16778	return &pcmpsd, true
16779}
16780
16781// ProtectionContainerProperties protection profile custom data details.
16782type ProtectionContainerProperties struct {
16783	// FabricFriendlyName - Fabric friendly name.
16784	FabricFriendlyName *string `json:"fabricFriendlyName,omitempty"`
16785	// FriendlyName - The name.
16786	FriendlyName *string `json:"friendlyName,omitempty"`
16787	// FabricType - The fabric type.
16788	FabricType *string `json:"fabricType,omitempty"`
16789	// ProtectedItemCount - Number of protected PEs
16790	ProtectedItemCount *int32 `json:"protectedItemCount,omitempty"`
16791	// PairingStatus - The pairing status of this cloud.
16792	PairingStatus *string `json:"pairingStatus,omitempty"`
16793	// Role - The role of this cloud.
16794	Role *string `json:"role,omitempty"`
16795	// FabricSpecificDetails - Fabric specific details.
16796	FabricSpecificDetails *ProtectionContainerFabricSpecificDetails `json:"fabricSpecificDetails,omitempty"`
16797}
16798
16799// BasicProtectionProfileCustomDetails protection Profile custom input.
16800type BasicProtectionProfileCustomDetails interface {
16801	AsExistingProtectionProfile() (*ExistingProtectionProfile, bool)
16802	AsNewProtectionProfile() (*NewProtectionProfile, bool)
16803	AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool)
16804}
16805
16806// ProtectionProfileCustomDetails protection Profile custom input.
16807type ProtectionProfileCustomDetails struct {
16808	// ResourceType - Possible values include: 'ResourceTypeProtectionProfileCustomDetails', 'ResourceTypeExisting', 'ResourceTypeNew'
16809	ResourceType ResourceType `json:"resourceType,omitempty"`
16810}
16811
16812func unmarshalBasicProtectionProfileCustomDetails(body []byte) (BasicProtectionProfileCustomDetails, error) {
16813	var m map[string]interface{}
16814	err := json.Unmarshal(body, &m)
16815	if err != nil {
16816		return nil, err
16817	}
16818
16819	switch m["resourceType"] {
16820	case string(ResourceTypeExisting):
16821		var epp ExistingProtectionProfile
16822		err := json.Unmarshal(body, &epp)
16823		return epp, err
16824	case string(ResourceTypeNew):
16825		var npp NewProtectionProfile
16826		err := json.Unmarshal(body, &npp)
16827		return npp, err
16828	default:
16829		var ppcd ProtectionProfileCustomDetails
16830		err := json.Unmarshal(body, &ppcd)
16831		return ppcd, err
16832	}
16833}
16834func unmarshalBasicProtectionProfileCustomDetailsArray(body []byte) ([]BasicProtectionProfileCustomDetails, error) {
16835	var rawMessages []*json.RawMessage
16836	err := json.Unmarshal(body, &rawMessages)
16837	if err != nil {
16838		return nil, err
16839	}
16840
16841	ppcdArray := make([]BasicProtectionProfileCustomDetails, len(rawMessages))
16842
16843	for index, rawMessage := range rawMessages {
16844		ppcd, err := unmarshalBasicProtectionProfileCustomDetails(*rawMessage)
16845		if err != nil {
16846			return nil, err
16847		}
16848		ppcdArray[index] = ppcd
16849	}
16850	return ppcdArray, nil
16851}
16852
16853// MarshalJSON is the custom marshaler for ProtectionProfileCustomDetails.
16854func (ppcd ProtectionProfileCustomDetails) MarshalJSON() ([]byte, error) {
16855	ppcd.ResourceType = ResourceTypeProtectionProfileCustomDetails
16856	objectMap := make(map[string]interface{})
16857	if ppcd.ResourceType != "" {
16858		objectMap["resourceType"] = ppcd.ResourceType
16859	}
16860	return json.Marshal(objectMap)
16861}
16862
16863// AsExistingProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16864func (ppcd ProtectionProfileCustomDetails) AsExistingProtectionProfile() (*ExistingProtectionProfile, bool) {
16865	return nil, false
16866}
16867
16868// AsNewProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16869func (ppcd ProtectionProfileCustomDetails) AsNewProtectionProfile() (*NewProtectionProfile, bool) {
16870	return nil, false
16871}
16872
16873// AsProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16874func (ppcd ProtectionProfileCustomDetails) AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool) {
16875	return &ppcd, true
16876}
16877
16878// AsBasicProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16879func (ppcd ProtectionProfileCustomDetails) AsBasicProtectionProfileCustomDetails() (BasicProtectionProfileCustomDetails, bool) {
16880	return &ppcd, true
16881}
16882
16883// ProviderError this class contains the error details per object.
16884type ProviderError struct {
16885	// ErrorCode - The Error code.
16886	ErrorCode *int32 `json:"errorCode,omitempty"`
16887	// ErrorMessage - The Error message.
16888	ErrorMessage *string `json:"errorMessage,omitempty"`
16889	// ErrorID - The Provider error Id.
16890	ErrorID *string `json:"errorId,omitempty"`
16891	// PossibleCauses - The possible causes for the error.
16892	PossibleCauses *string `json:"possibleCauses,omitempty"`
16893	// RecommendedAction - The recommended action to resolve the error.
16894	RecommendedAction *string `json:"recommendedAction,omitempty"`
16895}
16896
16897// BasicProviderSpecificFailoverInput provider specific failover input.
16898type BasicProviderSpecificFailoverInput interface {
16899	AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool)
16900	AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool)
16901	AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool)
16902	AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool)
16903	AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool)
16904	AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool)
16905}
16906
16907// ProviderSpecificFailoverInput provider specific failover input.
16908type ProviderSpecificFailoverInput struct {
16909	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
16910	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
16911}
16912
16913func unmarshalBasicProviderSpecificFailoverInput(body []byte) (BasicProviderSpecificFailoverInput, error) {
16914	var m map[string]interface{}
16915	err := json.Unmarshal(body, &m)
16916	if err != nil {
16917		return nil, err
16918	}
16919
16920	switch m["instanceType"] {
16921	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A):
16922		var afpi A2AFailoverProviderInput
16923		err := json.Unmarshal(body, &afpi)
16924		return afpi, err
16925	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback):
16926		var hvrafpi HyperVReplicaAzureFailbackProviderInput
16927		err := json.Unmarshal(body, &hvrafpi)
16928		return hvrafpi, err
16929	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure):
16930		var hvrafpi HyperVReplicaAzureFailoverProviderInput
16931		err := json.Unmarshal(body, &hvrafpi)
16932		return hvrafpi, err
16933	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2):
16934		var imavfpi InMageAzureV2FailoverProviderInput
16935		err := json.Unmarshal(body, &imavfpi)
16936		return imavfpi, err
16937	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage):
16938		var imfpi InMageFailoverProviderInput
16939		err := json.Unmarshal(body, &imfpi)
16940		return imfpi, err
16941	default:
16942		var psfi ProviderSpecificFailoverInput
16943		err := json.Unmarshal(body, &psfi)
16944		return psfi, err
16945	}
16946}
16947func unmarshalBasicProviderSpecificFailoverInputArray(body []byte) ([]BasicProviderSpecificFailoverInput, error) {
16948	var rawMessages []*json.RawMessage
16949	err := json.Unmarshal(body, &rawMessages)
16950	if err != nil {
16951		return nil, err
16952	}
16953
16954	psfiArray := make([]BasicProviderSpecificFailoverInput, len(rawMessages))
16955
16956	for index, rawMessage := range rawMessages {
16957		psfi, err := unmarshalBasicProviderSpecificFailoverInput(*rawMessage)
16958		if err != nil {
16959			return nil, err
16960		}
16961		psfiArray[index] = psfi
16962	}
16963	return psfiArray, nil
16964}
16965
16966// MarshalJSON is the custom marshaler for ProviderSpecificFailoverInput.
16967func (psfi ProviderSpecificFailoverInput) MarshalJSON() ([]byte, error) {
16968	psfi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput
16969	objectMap := make(map[string]interface{})
16970	if psfi.InstanceType != "" {
16971		objectMap["instanceType"] = psfi.InstanceType
16972	}
16973	return json.Marshal(objectMap)
16974}
16975
16976// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16977func (psfi ProviderSpecificFailoverInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
16978	return nil, false
16979}
16980
16981// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16982func (psfi ProviderSpecificFailoverInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
16983	return nil, false
16984}
16985
16986// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16987func (psfi ProviderSpecificFailoverInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
16988	return nil, false
16989}
16990
16991// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16992func (psfi ProviderSpecificFailoverInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
16993	return nil, false
16994}
16995
16996// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16997func (psfi ProviderSpecificFailoverInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
16998	return nil, false
16999}
17000
17001// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
17002func (psfi ProviderSpecificFailoverInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
17003	return &psfi, true
17004}
17005
17006// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
17007func (psfi ProviderSpecificFailoverInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
17008	return &psfi, true
17009}
17010
17011// BasicProviderSpecificRecoveryPointDetails replication provider specific recovery point details.
17012type BasicProviderSpecificRecoveryPointDetails interface {
17013	AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool)
17014	AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool)
17015	AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool)
17016	AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool)
17017}
17018
17019// ProviderSpecificRecoveryPointDetails replication provider specific recovery point details.
17020type ProviderSpecificRecoveryPointDetails struct {
17021	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
17022	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
17023}
17024
17025func unmarshalBasicProviderSpecificRecoveryPointDetails(body []byte) (BasicProviderSpecificRecoveryPointDetails, error) {
17026	var m map[string]interface{}
17027	err := json.Unmarshal(body, &m)
17028	if err != nil {
17029		return nil, err
17030	}
17031
17032	switch m["instanceType"] {
17033	case string(InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A):
17034		var arpd A2ARecoveryPointDetails
17035		err := json.Unmarshal(body, &arpd)
17036		return arpd, err
17037	case string(InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2):
17038		var imavrpd InMageAzureV2RecoveryPointDetails
17039		err := json.Unmarshal(body, &imavrpd)
17040		return imavrpd, err
17041	case string(InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm):
17042		var imrrpd InMageRcmRecoveryPointDetails
17043		err := json.Unmarshal(body, &imrrpd)
17044		return imrrpd, err
17045	default:
17046		var psrpd ProviderSpecificRecoveryPointDetails
17047		err := json.Unmarshal(body, &psrpd)
17048		return psrpd, err
17049	}
17050}
17051func unmarshalBasicProviderSpecificRecoveryPointDetailsArray(body []byte) ([]BasicProviderSpecificRecoveryPointDetails, error) {
17052	var rawMessages []*json.RawMessage
17053	err := json.Unmarshal(body, &rawMessages)
17054	if err != nil {
17055		return nil, err
17056	}
17057
17058	psrpdArray := make([]BasicProviderSpecificRecoveryPointDetails, len(rawMessages))
17059
17060	for index, rawMessage := range rawMessages {
17061		psrpd, err := unmarshalBasicProviderSpecificRecoveryPointDetails(*rawMessage)
17062		if err != nil {
17063			return nil, err
17064		}
17065		psrpdArray[index] = psrpd
17066	}
17067	return psrpdArray, nil
17068}
17069
17070// MarshalJSON is the custom marshaler for ProviderSpecificRecoveryPointDetails.
17071func (psrpd ProviderSpecificRecoveryPointDetails) MarshalJSON() ([]byte, error) {
17072	psrpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails
17073	objectMap := make(map[string]interface{})
17074	if psrpd.InstanceType != "" {
17075		objectMap["instanceType"] = psrpd.InstanceType
17076	}
17077	return json.Marshal(objectMap)
17078}
17079
17080// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17081func (psrpd ProviderSpecificRecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
17082	return nil, false
17083}
17084
17085// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17086func (psrpd ProviderSpecificRecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
17087	return nil, false
17088}
17089
17090// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17091func (psrpd ProviderSpecificRecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
17092	return nil, false
17093}
17094
17095// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17096func (psrpd ProviderSpecificRecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
17097	return &psrpd, true
17098}
17099
17100// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17101func (psrpd ProviderSpecificRecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
17102	return &psrpd, true
17103}
17104
17105// PushInstallerDetails push installer details.
17106type PushInstallerDetails struct {
17107	// ID - READ-ONLY; The push installer Id.
17108	ID *string `json:"id,omitempty"`
17109	// Name - READ-ONLY; The push installer name.
17110	Name *string `json:"name,omitempty"`
17111	// Version - READ-ONLY; The push installer version.
17112	Version *string `json:"version,omitempty"`
17113	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the push installer.
17114	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
17115	// Health - READ-ONLY; The health of the push installer. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
17116	Health ProtectionHealth `json:"health,omitempty"`
17117	// HealthErrors - READ-ONLY; The health errors.
17118	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
17119}
17120
17121// MarshalJSON is the custom marshaler for PushInstallerDetails.
17122func (pid PushInstallerDetails) MarshalJSON() ([]byte, error) {
17123	objectMap := make(map[string]interface{})
17124	return json.Marshal(objectMap)
17125}
17126
17127// RcmAzureMigrationPolicyDetails RCM based Azure migration specific policy details.
17128type RcmAzureMigrationPolicyDetails struct {
17129	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
17130	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
17131	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
17132	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
17133	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
17134	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
17135	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Possible values include: 'MultiVMSyncStatusEnabled', 'MultiVMSyncStatusDisabled'
17136	MultiVMSyncStatus MultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
17137	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
17138	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
17139	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
17140	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
17141}
17142
17143// MarshalJSON is the custom marshaler for RcmAzureMigrationPolicyDetails.
17144func (rampd RcmAzureMigrationPolicyDetails) MarshalJSON() ([]byte, error) {
17145	rampd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration
17146	objectMap := make(map[string]interface{})
17147	if rampd.RecoveryPointThresholdInMinutes != nil {
17148		objectMap["recoveryPointThresholdInMinutes"] = rampd.RecoveryPointThresholdInMinutes
17149	}
17150	if rampd.RecoveryPointHistory != nil {
17151		objectMap["recoveryPointHistory"] = rampd.RecoveryPointHistory
17152	}
17153	if rampd.AppConsistentFrequencyInMinutes != nil {
17154		objectMap["appConsistentFrequencyInMinutes"] = rampd.AppConsistentFrequencyInMinutes
17155	}
17156	if rampd.MultiVMSyncStatus != "" {
17157		objectMap["multiVmSyncStatus"] = rampd.MultiVMSyncStatus
17158	}
17159	if rampd.CrashConsistentFrequencyInMinutes != nil {
17160		objectMap["crashConsistentFrequencyInMinutes"] = rampd.CrashConsistentFrequencyInMinutes
17161	}
17162	if rampd.InstanceType != "" {
17163		objectMap["instanceType"] = rampd.InstanceType
17164	}
17165	return json.Marshal(objectMap)
17166}
17167
17168// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17169func (rampd RcmAzureMigrationPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
17170	return nil, false
17171}
17172
17173// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17174func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
17175	return nil, false
17176}
17177
17178// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17179func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
17180	return nil, false
17181}
17182
17183// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17184func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
17185	return nil, false
17186}
17187
17188// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17189func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
17190	return nil, false
17191}
17192
17193// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17194func (rampd RcmAzureMigrationPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
17195	return nil, false
17196}
17197
17198// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17199func (rampd RcmAzureMigrationPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
17200	return nil, false
17201}
17202
17203// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17204func (rampd RcmAzureMigrationPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
17205	return nil, false
17206}
17207
17208// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17209func (rampd RcmAzureMigrationPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
17210	return nil, false
17211}
17212
17213// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17214func (rampd RcmAzureMigrationPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
17215	return &rampd, true
17216}
17217
17218// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17219func (rampd RcmAzureMigrationPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
17220	return nil, false
17221}
17222
17223// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17224func (rampd RcmAzureMigrationPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
17225	return nil, false
17226}
17227
17228// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17229func (rampd RcmAzureMigrationPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
17230	return &rampd, true
17231}
17232
17233// RcmProxyDetails RCM proxy details.
17234type RcmProxyDetails struct {
17235	// ID - READ-ONLY; The RCM proxy Id.
17236	ID *string `json:"id,omitempty"`
17237	// Name - READ-ONLY; The RCM proxy name.
17238	Name *string `json:"name,omitempty"`
17239	// Version - READ-ONLY; The RCM proxy version.
17240	Version *string `json:"version,omitempty"`
17241	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the RCM proxy.
17242	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
17243	// Health - READ-ONLY; The health of the RCM proxy. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
17244	Health ProtectionHealth `json:"health,omitempty"`
17245	// HealthErrors - READ-ONLY; The health errors.
17246	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
17247}
17248
17249// MarshalJSON is the custom marshaler for RcmProxyDetails.
17250func (rpd RcmProxyDetails) MarshalJSON() ([]byte, error) {
17251	objectMap := make(map[string]interface{})
17252	return json.Marshal(objectMap)
17253}
17254
17255// BasicRecoveryAvailabilitySetCustomDetails recovery Availability Set custom input.
17256type BasicRecoveryAvailabilitySetCustomDetails interface {
17257	AsExistingRecoveryAvailabilitySet() (*ExistingRecoveryAvailabilitySet, bool)
17258	AsRecoveryAvailabilitySetCustomDetails() (*RecoveryAvailabilitySetCustomDetails, bool)
17259}
17260
17261// RecoveryAvailabilitySetCustomDetails recovery Availability Set custom input.
17262type RecoveryAvailabilitySetCustomDetails struct {
17263	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeRecoveryAvailabilitySetCustomDetails', 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting'
17264	ResourceType ResourceTypeBasicRecoveryAvailabilitySetCustomDetails `json:"resourceType,omitempty"`
17265}
17266
17267func unmarshalBasicRecoveryAvailabilitySetCustomDetails(body []byte) (BasicRecoveryAvailabilitySetCustomDetails, error) {
17268	var m map[string]interface{}
17269	err := json.Unmarshal(body, &m)
17270	if err != nil {
17271		return nil, err
17272	}
17273
17274	switch m["resourceType"] {
17275	case string(ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting):
17276		var eras ExistingRecoveryAvailabilitySet
17277		err := json.Unmarshal(body, &eras)
17278		return eras, err
17279	default:
17280		var rascd RecoveryAvailabilitySetCustomDetails
17281		err := json.Unmarshal(body, &rascd)
17282		return rascd, err
17283	}
17284}
17285func unmarshalBasicRecoveryAvailabilitySetCustomDetailsArray(body []byte) ([]BasicRecoveryAvailabilitySetCustomDetails, error) {
17286	var rawMessages []*json.RawMessage
17287	err := json.Unmarshal(body, &rawMessages)
17288	if err != nil {
17289		return nil, err
17290	}
17291
17292	rascdArray := make([]BasicRecoveryAvailabilitySetCustomDetails, len(rawMessages))
17293
17294	for index, rawMessage := range rawMessages {
17295		rascd, err := unmarshalBasicRecoveryAvailabilitySetCustomDetails(*rawMessage)
17296		if err != nil {
17297			return nil, err
17298		}
17299		rascdArray[index] = rascd
17300	}
17301	return rascdArray, nil
17302}
17303
17304// MarshalJSON is the custom marshaler for RecoveryAvailabilitySetCustomDetails.
17305func (rascd RecoveryAvailabilitySetCustomDetails) MarshalJSON() ([]byte, error) {
17306	rascd.ResourceType = ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeRecoveryAvailabilitySetCustomDetails
17307	objectMap := make(map[string]interface{})
17308	if rascd.ResourceType != "" {
17309		objectMap["resourceType"] = rascd.ResourceType
17310	}
17311	return json.Marshal(objectMap)
17312}
17313
17314// AsExistingRecoveryAvailabilitySet is the BasicRecoveryAvailabilitySetCustomDetails implementation for RecoveryAvailabilitySetCustomDetails.
17315func (rascd RecoveryAvailabilitySetCustomDetails) AsExistingRecoveryAvailabilitySet() (*ExistingRecoveryAvailabilitySet, bool) {
17316	return nil, false
17317}
17318
17319// AsRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for RecoveryAvailabilitySetCustomDetails.
17320func (rascd RecoveryAvailabilitySetCustomDetails) AsRecoveryAvailabilitySetCustomDetails() (*RecoveryAvailabilitySetCustomDetails, bool) {
17321	return &rascd, true
17322}
17323
17324// AsBasicRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for RecoveryAvailabilitySetCustomDetails.
17325func (rascd RecoveryAvailabilitySetCustomDetails) AsBasicRecoveryAvailabilitySetCustomDetails() (BasicRecoveryAvailabilitySetCustomDetails, bool) {
17326	return &rascd, true
17327}
17328
17329// RecoveryPlan recovery plan details.
17330type RecoveryPlan struct {
17331	autorest.Response `json:"-"`
17332	// Properties - The custom details.
17333	Properties *RecoveryPlanProperties `json:"properties,omitempty"`
17334	// ID - READ-ONLY; Resource Id
17335	ID *string `json:"id,omitempty"`
17336	// Name - READ-ONLY; Resource Name
17337	Name *string `json:"name,omitempty"`
17338	// Type - READ-ONLY; Resource Type
17339	Type *string `json:"type,omitempty"`
17340	// Location - Resource Location
17341	Location *string `json:"location,omitempty"`
17342}
17343
17344// MarshalJSON is the custom marshaler for RecoveryPlan.
17345func (rp RecoveryPlan) MarshalJSON() ([]byte, error) {
17346	objectMap := make(map[string]interface{})
17347	if rp.Properties != nil {
17348		objectMap["properties"] = rp.Properties
17349	}
17350	if rp.Location != nil {
17351		objectMap["location"] = rp.Location
17352	}
17353	return json.Marshal(objectMap)
17354}
17355
17356// RecoveryPlanA2ADetails recovery plan A2A specific details.
17357type RecoveryPlanA2ADetails struct {
17358	// PrimaryZone - The primary zone.
17359	PrimaryZone *string `json:"primaryZone,omitempty"`
17360	// RecoveryZone - The recovery zone.
17361	RecoveryZone *string `json:"recoveryZone,omitempty"`
17362	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeRecoveryPlanProviderSpecificDetails', 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A'
17363	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificDetails `json:"instanceType,omitempty"`
17364}
17365
17366// MarshalJSON is the custom marshaler for RecoveryPlanA2ADetails.
17367func (rpad RecoveryPlanA2ADetails) MarshalJSON() ([]byte, error) {
17368	rpad.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A
17369	objectMap := make(map[string]interface{})
17370	if rpad.PrimaryZone != nil {
17371		objectMap["primaryZone"] = rpad.PrimaryZone
17372	}
17373	if rpad.RecoveryZone != nil {
17374		objectMap["recoveryZone"] = rpad.RecoveryZone
17375	}
17376	if rpad.InstanceType != "" {
17377		objectMap["instanceType"] = rpad.InstanceType
17378	}
17379	return json.Marshal(objectMap)
17380}
17381
17382// AsRecoveryPlanA2ADetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanA2ADetails.
17383func (rpad RecoveryPlanA2ADetails) AsRecoveryPlanA2ADetails() (*RecoveryPlanA2ADetails, bool) {
17384	return &rpad, true
17385}
17386
17387// AsRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanA2ADetails.
17388func (rpad RecoveryPlanA2ADetails) AsRecoveryPlanProviderSpecificDetails() (*RecoveryPlanProviderSpecificDetails, bool) {
17389	return nil, false
17390}
17391
17392// AsBasicRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanA2ADetails.
17393func (rpad RecoveryPlanA2ADetails) AsBasicRecoveryPlanProviderSpecificDetails() (BasicRecoveryPlanProviderSpecificDetails, bool) {
17394	return &rpad, true
17395}
17396
17397// RecoveryPlanA2AFailoverInput recovery plan A2A failover input.
17398type RecoveryPlanA2AFailoverInput struct {
17399	// RecoveryPointType - The recovery point type. Possible values include: 'Latest', 'LatestApplicationConsistent', 'LatestCrashConsistent', 'LatestProcessed'
17400	RecoveryPointType A2ARpRecoveryPointType `json:"recoveryPointType,omitempty"`
17401	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for TFO or not.
17402	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
17403	// MultiVMSyncPointOption - A value indicating whether multi VM sync enabled VMs should use multi VM sync points for failover. Possible values include: 'UseMultiVMSyncRecoveryPoint', 'UsePerVMRecoveryPoint'
17404	MultiVMSyncPointOption MultiVMSyncPointOption `json:"multiVmSyncPointOption,omitempty"`
17405	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
17406	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
17407}
17408
17409// MarshalJSON is the custom marshaler for RecoveryPlanA2AFailoverInput.
17410func (rpafi RecoveryPlanA2AFailoverInput) MarshalJSON() ([]byte, error) {
17411	rpafi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A
17412	objectMap := make(map[string]interface{})
17413	if rpafi.RecoveryPointType != "" {
17414		objectMap["recoveryPointType"] = rpafi.RecoveryPointType
17415	}
17416	if rpafi.CloudServiceCreationOption != nil {
17417		objectMap["cloudServiceCreationOption"] = rpafi.CloudServiceCreationOption
17418	}
17419	if rpafi.MultiVMSyncPointOption != "" {
17420		objectMap["multiVmSyncPointOption"] = rpafi.MultiVMSyncPointOption
17421	}
17422	if rpafi.InstanceType != "" {
17423		objectMap["instanceType"] = rpafi.InstanceType
17424	}
17425	return json.Marshal(objectMap)
17426}
17427
17428// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17429func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
17430	return &rpafi, true
17431}
17432
17433// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17434func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
17435	return nil, false
17436}
17437
17438// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17439func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
17440	return nil, false
17441}
17442
17443// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17444func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
17445	return nil, false
17446}
17447
17448// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17449func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
17450	return nil, false
17451}
17452
17453// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17454func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
17455	return nil, false
17456}
17457
17458// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17459func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
17460	return nil, false
17461}
17462
17463// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17464func (rpafi RecoveryPlanA2AFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
17465	return &rpafi, true
17466}
17467
17468// RecoveryPlanA2AInput recovery plan A2A input.
17469type RecoveryPlanA2AInput struct {
17470	// PrimaryZone - The primary zone.
17471	PrimaryZone *string `json:"primaryZone,omitempty"`
17472	// RecoveryZone - The recovery zone.
17473	RecoveryZone *string `json:"recoveryZone,omitempty"`
17474	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeRecoveryPlanProviderSpecificInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A'
17475	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificInput `json:"instanceType,omitempty"`
17476}
17477
17478// MarshalJSON is the custom marshaler for RecoveryPlanA2AInput.
17479func (rpai RecoveryPlanA2AInput) MarshalJSON() ([]byte, error) {
17480	rpai.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A
17481	objectMap := make(map[string]interface{})
17482	if rpai.PrimaryZone != nil {
17483		objectMap["primaryZone"] = rpai.PrimaryZone
17484	}
17485	if rpai.RecoveryZone != nil {
17486		objectMap["recoveryZone"] = rpai.RecoveryZone
17487	}
17488	if rpai.InstanceType != "" {
17489		objectMap["instanceType"] = rpai.InstanceType
17490	}
17491	return json.Marshal(objectMap)
17492}
17493
17494// AsRecoveryPlanA2AInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanA2AInput.
17495func (rpai RecoveryPlanA2AInput) AsRecoveryPlanA2AInput() (*RecoveryPlanA2AInput, bool) {
17496	return &rpai, true
17497}
17498
17499// AsRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanA2AInput.
17500func (rpai RecoveryPlanA2AInput) AsRecoveryPlanProviderSpecificInput() (*RecoveryPlanProviderSpecificInput, bool) {
17501	return nil, false
17502}
17503
17504// AsBasicRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanA2AInput.
17505func (rpai RecoveryPlanA2AInput) AsBasicRecoveryPlanProviderSpecificInput() (BasicRecoveryPlanProviderSpecificInput, bool) {
17506	return &rpai, true
17507}
17508
17509// RecoveryPlanAction recovery plan action details.
17510type RecoveryPlanAction struct {
17511	// ActionName - The action name.
17512	ActionName *string `json:"actionName,omitempty"`
17513	// FailoverTypes - The list of failover types.
17514	FailoverTypes *[]ReplicationProtectedItemOperation `json:"failoverTypes,omitempty"`
17515	// FailoverDirections - The list of failover directions.
17516	FailoverDirections *[]PossibleOperationsDirections `json:"failoverDirections,omitempty"`
17517	// CustomDetails - The custom details.
17518	CustomDetails BasicRecoveryPlanActionDetails `json:"customDetails,omitempty"`
17519}
17520
17521// UnmarshalJSON is the custom unmarshaler for RecoveryPlanAction struct.
17522func (rpa *RecoveryPlanAction) UnmarshalJSON(body []byte) error {
17523	var m map[string]*json.RawMessage
17524	err := json.Unmarshal(body, &m)
17525	if err != nil {
17526		return err
17527	}
17528	for k, v := range m {
17529		switch k {
17530		case "actionName":
17531			if v != nil {
17532				var actionName string
17533				err = json.Unmarshal(*v, &actionName)
17534				if err != nil {
17535					return err
17536				}
17537				rpa.ActionName = &actionName
17538			}
17539		case "failoverTypes":
17540			if v != nil {
17541				var failoverTypes []ReplicationProtectedItemOperation
17542				err = json.Unmarshal(*v, &failoverTypes)
17543				if err != nil {
17544					return err
17545				}
17546				rpa.FailoverTypes = &failoverTypes
17547			}
17548		case "failoverDirections":
17549			if v != nil {
17550				var failoverDirections []PossibleOperationsDirections
17551				err = json.Unmarshal(*v, &failoverDirections)
17552				if err != nil {
17553					return err
17554				}
17555				rpa.FailoverDirections = &failoverDirections
17556			}
17557		case "customDetails":
17558			if v != nil {
17559				customDetails, err := unmarshalBasicRecoveryPlanActionDetails(*v)
17560				if err != nil {
17561					return err
17562				}
17563				rpa.CustomDetails = customDetails
17564			}
17565		}
17566	}
17567
17568	return nil
17569}
17570
17571// BasicRecoveryPlanActionDetails recovery plan action custom details.
17572type BasicRecoveryPlanActionDetails interface {
17573	AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool)
17574	AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool)
17575	AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool)
17576	AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool)
17577}
17578
17579// RecoveryPlanActionDetails recovery plan action custom details.
17580type RecoveryPlanActionDetails struct {
17581	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
17582	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
17583}
17584
17585func unmarshalBasicRecoveryPlanActionDetails(body []byte) (BasicRecoveryPlanActionDetails, error) {
17586	var m map[string]interface{}
17587	err := json.Unmarshal(body, &m)
17588	if err != nil {
17589		return nil, err
17590	}
17591
17592	switch m["instanceType"] {
17593	case string(InstanceTypeAutomationRunbookActionDetails):
17594		var rparad RecoveryPlanAutomationRunbookActionDetails
17595		err := json.Unmarshal(body, &rparad)
17596		return rparad, err
17597	case string(InstanceTypeManualActionDetails):
17598		var rpmad RecoveryPlanManualActionDetails
17599		err := json.Unmarshal(body, &rpmad)
17600		return rpmad, err
17601	case string(InstanceTypeScriptActionDetails):
17602		var rpsad RecoveryPlanScriptActionDetails
17603		err := json.Unmarshal(body, &rpsad)
17604		return rpsad, err
17605	default:
17606		var rpad RecoveryPlanActionDetails
17607		err := json.Unmarshal(body, &rpad)
17608		return rpad, err
17609	}
17610}
17611func unmarshalBasicRecoveryPlanActionDetailsArray(body []byte) ([]BasicRecoveryPlanActionDetails, error) {
17612	var rawMessages []*json.RawMessage
17613	err := json.Unmarshal(body, &rawMessages)
17614	if err != nil {
17615		return nil, err
17616	}
17617
17618	rpadArray := make([]BasicRecoveryPlanActionDetails, len(rawMessages))
17619
17620	for index, rawMessage := range rawMessages {
17621		rpad, err := unmarshalBasicRecoveryPlanActionDetails(*rawMessage)
17622		if err != nil {
17623			return nil, err
17624		}
17625		rpadArray[index] = rpad
17626	}
17627	return rpadArray, nil
17628}
17629
17630// MarshalJSON is the custom marshaler for RecoveryPlanActionDetails.
17631func (rpad RecoveryPlanActionDetails) MarshalJSON() ([]byte, error) {
17632	rpad.InstanceType = InstanceTypeRecoveryPlanActionDetails
17633	objectMap := make(map[string]interface{})
17634	if rpad.InstanceType != "" {
17635		objectMap["instanceType"] = rpad.InstanceType
17636	}
17637	return json.Marshal(objectMap)
17638}
17639
17640// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17641func (rpad RecoveryPlanActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
17642	return nil, false
17643}
17644
17645// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17646func (rpad RecoveryPlanActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
17647	return nil, false
17648}
17649
17650// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17651func (rpad RecoveryPlanActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
17652	return nil, false
17653}
17654
17655// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17656func (rpad RecoveryPlanActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
17657	return &rpad, true
17658}
17659
17660// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17661func (rpad RecoveryPlanActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
17662	return &rpad, true
17663}
17664
17665// RecoveryPlanAutomationRunbookActionDetails recovery plan Automation runbook action details.
17666type RecoveryPlanAutomationRunbookActionDetails struct {
17667	// RunbookID - The runbook ARM Id.
17668	RunbookID *string `json:"runbookId,omitempty"`
17669	// Timeout - The runbook timeout.
17670	Timeout *string `json:"timeout,omitempty"`
17671	// FabricLocation - The fabric location. Possible values include: 'Primary', 'Recovery'
17672	FabricLocation RecoveryPlanActionLocation `json:"fabricLocation,omitempty"`
17673	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
17674	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
17675}
17676
17677// MarshalJSON is the custom marshaler for RecoveryPlanAutomationRunbookActionDetails.
17678func (rparad RecoveryPlanAutomationRunbookActionDetails) MarshalJSON() ([]byte, error) {
17679	rparad.InstanceType = InstanceTypeAutomationRunbookActionDetails
17680	objectMap := make(map[string]interface{})
17681	if rparad.RunbookID != nil {
17682		objectMap["runbookId"] = rparad.RunbookID
17683	}
17684	if rparad.Timeout != nil {
17685		objectMap["timeout"] = rparad.Timeout
17686	}
17687	if rparad.FabricLocation != "" {
17688		objectMap["fabricLocation"] = rparad.FabricLocation
17689	}
17690	if rparad.InstanceType != "" {
17691		objectMap["instanceType"] = rparad.InstanceType
17692	}
17693	return json.Marshal(objectMap)
17694}
17695
17696// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17697func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
17698	return &rparad, true
17699}
17700
17701// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17702func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
17703	return nil, false
17704}
17705
17706// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17707func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
17708	return nil, false
17709}
17710
17711// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17712func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
17713	return nil, false
17714}
17715
17716// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17717func (rparad RecoveryPlanAutomationRunbookActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
17718	return &rparad, true
17719}
17720
17721// RecoveryPlanCollection recovery plan collection details.
17722type RecoveryPlanCollection struct {
17723	autorest.Response `json:"-"`
17724	// Value - The list of recovery plans.
17725	Value *[]RecoveryPlan `json:"value,omitempty"`
17726	// NextLink - The value of next link.
17727	NextLink *string `json:"nextLink,omitempty"`
17728}
17729
17730// RecoveryPlanCollectionIterator provides access to a complete listing of RecoveryPlan values.
17731type RecoveryPlanCollectionIterator struct {
17732	i    int
17733	page RecoveryPlanCollectionPage
17734}
17735
17736// NextWithContext advances to the next value.  If there was an error making
17737// the request the iterator does not advance and the error is returned.
17738func (iter *RecoveryPlanCollectionIterator) NextWithContext(ctx context.Context) (err error) {
17739	if tracing.IsEnabled() {
17740		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPlanCollectionIterator.NextWithContext")
17741		defer func() {
17742			sc := -1
17743			if iter.Response().Response.Response != nil {
17744				sc = iter.Response().Response.Response.StatusCode
17745			}
17746			tracing.EndSpan(ctx, sc, err)
17747		}()
17748	}
17749	iter.i++
17750	if iter.i < len(iter.page.Values()) {
17751		return nil
17752	}
17753	err = iter.page.NextWithContext(ctx)
17754	if err != nil {
17755		iter.i--
17756		return err
17757	}
17758	iter.i = 0
17759	return nil
17760}
17761
17762// Next advances to the next value.  If there was an error making
17763// the request the iterator does not advance and the error is returned.
17764// Deprecated: Use NextWithContext() instead.
17765func (iter *RecoveryPlanCollectionIterator) Next() error {
17766	return iter.NextWithContext(context.Background())
17767}
17768
17769// NotDone returns true if the enumeration should be started or is not yet complete.
17770func (iter RecoveryPlanCollectionIterator) NotDone() bool {
17771	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17772}
17773
17774// Response returns the raw server response from the last page request.
17775func (iter RecoveryPlanCollectionIterator) Response() RecoveryPlanCollection {
17776	return iter.page.Response()
17777}
17778
17779// Value returns the current value or a zero-initialized value if the
17780// iterator has advanced beyond the end of the collection.
17781func (iter RecoveryPlanCollectionIterator) Value() RecoveryPlan {
17782	if !iter.page.NotDone() {
17783		return RecoveryPlan{}
17784	}
17785	return iter.page.Values()[iter.i]
17786}
17787
17788// Creates a new instance of the RecoveryPlanCollectionIterator type.
17789func NewRecoveryPlanCollectionIterator(page RecoveryPlanCollectionPage) RecoveryPlanCollectionIterator {
17790	return RecoveryPlanCollectionIterator{page: page}
17791}
17792
17793// IsEmpty returns true if the ListResult contains no values.
17794func (RPCVar RecoveryPlanCollection) IsEmpty() bool {
17795	return RPCVar.Value == nil || len(*RPCVar.Value) == 0
17796}
17797
17798// hasNextLink returns true if the NextLink is not empty.
17799func (RPCVar RecoveryPlanCollection) hasNextLink() bool {
17800	return RPCVar.NextLink != nil && len(*RPCVar.NextLink) != 0
17801}
17802
17803// recoveryPlanCollectionPreparer prepares a request to retrieve the next set of results.
17804// It returns nil if no more results exist.
17805func (RPCVar RecoveryPlanCollection) recoveryPlanCollectionPreparer(ctx context.Context) (*http.Request, error) {
17806	if !RPCVar.hasNextLink() {
17807		return nil, nil
17808	}
17809	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17810		autorest.AsJSON(),
17811		autorest.AsGet(),
17812		autorest.WithBaseURL(to.String(RPCVar.NextLink)))
17813}
17814
17815// RecoveryPlanCollectionPage contains a page of RecoveryPlan values.
17816type RecoveryPlanCollectionPage struct {
17817	fn     func(context.Context, RecoveryPlanCollection) (RecoveryPlanCollection, error)
17818	RPCVar RecoveryPlanCollection
17819}
17820
17821// NextWithContext advances to the next page of values.  If there was an error making
17822// the request the page does not advance and the error is returned.
17823func (page *RecoveryPlanCollectionPage) NextWithContext(ctx context.Context) (err error) {
17824	if tracing.IsEnabled() {
17825		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPlanCollectionPage.NextWithContext")
17826		defer func() {
17827			sc := -1
17828			if page.Response().Response.Response != nil {
17829				sc = page.Response().Response.Response.StatusCode
17830			}
17831			tracing.EndSpan(ctx, sc, err)
17832		}()
17833	}
17834	for {
17835		next, err := page.fn(ctx, page.RPCVar)
17836		if err != nil {
17837			return err
17838		}
17839		page.RPCVar = next
17840		if !next.hasNextLink() || !next.IsEmpty() {
17841			break
17842		}
17843	}
17844	return nil
17845}
17846
17847// Next advances to the next page of values.  If there was an error making
17848// the request the page does not advance and the error is returned.
17849// Deprecated: Use NextWithContext() instead.
17850func (page *RecoveryPlanCollectionPage) Next() error {
17851	return page.NextWithContext(context.Background())
17852}
17853
17854// NotDone returns true if the page enumeration should be started or is not yet complete.
17855func (page RecoveryPlanCollectionPage) NotDone() bool {
17856	return !page.RPCVar.IsEmpty()
17857}
17858
17859// Response returns the raw server response from the last page request.
17860func (page RecoveryPlanCollectionPage) Response() RecoveryPlanCollection {
17861	return page.RPCVar
17862}
17863
17864// Values returns the slice of values for the current page or nil if there are no values.
17865func (page RecoveryPlanCollectionPage) Values() []RecoveryPlan {
17866	if page.RPCVar.IsEmpty() {
17867		return nil
17868	}
17869	return *page.RPCVar.Value
17870}
17871
17872// Creates a new instance of the RecoveryPlanCollectionPage type.
17873func NewRecoveryPlanCollectionPage(cur RecoveryPlanCollection, getNextPage func(context.Context, RecoveryPlanCollection) (RecoveryPlanCollection, error)) RecoveryPlanCollectionPage {
17874	return RecoveryPlanCollectionPage{
17875		fn:     getNextPage,
17876		RPCVar: cur,
17877	}
17878}
17879
17880// RecoveryPlanGroup recovery plan group details.
17881type RecoveryPlanGroup struct {
17882	// GroupType - The group type. Possible values include: 'Shutdown', 'Boot', 'Failover'
17883	GroupType RecoveryPlanGroupType `json:"groupType,omitempty"`
17884	// ReplicationProtectedItems - The list of protected items.
17885	ReplicationProtectedItems *[]RecoveryPlanProtectedItem `json:"replicationProtectedItems,omitempty"`
17886	// StartGroupActions - The start group actions.
17887	StartGroupActions *[]RecoveryPlanAction `json:"startGroupActions,omitempty"`
17888	// EndGroupActions - The end group actions.
17889	EndGroupActions *[]RecoveryPlanAction `json:"endGroupActions,omitempty"`
17890}
17891
17892// RecoveryPlanGroupTaskDetails this class represents the recovery plan group task.
17893type RecoveryPlanGroupTaskDetails struct {
17894	// Name - The name.
17895	Name *string `json:"name,omitempty"`
17896	// GroupID - The group identifier.
17897	GroupID *string `json:"groupId,omitempty"`
17898	// RpGroupType - The group type.
17899	RpGroupType *string `json:"rpGroupType,omitempty"`
17900	// ChildTasks - The child tasks.
17901	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
17902	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
17903	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
17904}
17905
17906// MarshalJSON is the custom marshaler for RecoveryPlanGroupTaskDetails.
17907func (rpgtd RecoveryPlanGroupTaskDetails) MarshalJSON() ([]byte, error) {
17908	rpgtd.InstanceType = InstanceTypeRecoveryPlanGroupTaskDetails
17909	objectMap := make(map[string]interface{})
17910	if rpgtd.Name != nil {
17911		objectMap["name"] = rpgtd.Name
17912	}
17913	if rpgtd.GroupID != nil {
17914		objectMap["groupId"] = rpgtd.GroupID
17915	}
17916	if rpgtd.RpGroupType != nil {
17917		objectMap["rpGroupType"] = rpgtd.RpGroupType
17918	}
17919	if rpgtd.ChildTasks != nil {
17920		objectMap["childTasks"] = rpgtd.ChildTasks
17921	}
17922	if rpgtd.InstanceType != "" {
17923		objectMap["instanceType"] = rpgtd.InstanceType
17924	}
17925	return json.Marshal(objectMap)
17926}
17927
17928// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17929func (rpgtd RecoveryPlanGroupTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
17930	return nil, false
17931}
17932
17933// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17934func (rpgtd RecoveryPlanGroupTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
17935	return &rpgtd, true
17936}
17937
17938// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17939func (rpgtd RecoveryPlanGroupTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
17940	return nil, false
17941}
17942
17943// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17944func (rpgtd RecoveryPlanGroupTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
17945	return nil, false
17946}
17947
17948// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17949func (rpgtd RecoveryPlanGroupTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
17950	return &rpgtd, true
17951}
17952
17953// RecoveryPlanHyperVReplicaAzureFailbackInput recovery plan HVR Azure failback input.
17954type RecoveryPlanHyperVReplicaAzureFailbackInput struct {
17955	// DataSyncOption - The data sync option. Possible values include: 'ForDownTime', 'ForSynchronization'
17956	DataSyncOption DataSyncStatus `json:"dataSyncOption,omitempty"`
17957	// RecoveryVMCreationOption - The ALR option. Possible values include: 'CreateVMIfNotFound', 'NoAction'
17958	RecoveryVMCreationOption AlternateLocationRecoveryOption `json:"recoveryVmCreationOption,omitempty"`
17959	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
17960	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
17961}
17962
17963// MarshalJSON is the custom marshaler for RecoveryPlanHyperVReplicaAzureFailbackInput.
17964func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) MarshalJSON() ([]byte, error) {
17965	rphvrafi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback
17966	objectMap := make(map[string]interface{})
17967	if rphvrafi.DataSyncOption != "" {
17968		objectMap["dataSyncOption"] = rphvrafi.DataSyncOption
17969	}
17970	if rphvrafi.RecoveryVMCreationOption != "" {
17971		objectMap["recoveryVmCreationOption"] = rphvrafi.RecoveryVMCreationOption
17972	}
17973	if rphvrafi.InstanceType != "" {
17974		objectMap["instanceType"] = rphvrafi.InstanceType
17975	}
17976	return json.Marshal(objectMap)
17977}
17978
17979// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17980func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
17981	return nil, false
17982}
17983
17984// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17985func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
17986	return &rphvrafi, true
17987}
17988
17989// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17990func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
17991	return nil, false
17992}
17993
17994// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17995func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
17996	return nil, false
17997}
17998
17999// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
18000func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18001	return nil, false
18002}
18003
18004// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
18005func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18006	return nil, false
18007}
18008
18009// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
18010func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18011	return nil, false
18012}
18013
18014// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
18015func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18016	return &rphvrafi, true
18017}
18018
18019// RecoveryPlanHyperVReplicaAzureFailoverInput recovery plan HVR Azure failover input.
18020type RecoveryPlanHyperVReplicaAzureFailoverInput struct {
18021	// VaultLocation - The vault location.
18022	VaultLocation *string `json:"vaultLocation,omitempty"`
18023	// PrimaryKekCertificatePfx - The primary KEK certificate PFX.
18024	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
18025	// SecondaryKekCertificatePfx - The secondary KEK certificate PFX.
18026	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
18027	// RecoveryPointType - The recovery point type. Possible values include: 'HyperVReplicaAzureRpRecoveryPointTypeLatest', 'HyperVReplicaAzureRpRecoveryPointTypeLatestApplicationConsistent', 'HyperVReplicaAzureRpRecoveryPointTypeLatestProcessed'
18028	RecoveryPointType HyperVReplicaAzureRpRecoveryPointType `json:"recoveryPointType,omitempty"`
18029	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18030	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18031}
18032
18033// MarshalJSON is the custom marshaler for RecoveryPlanHyperVReplicaAzureFailoverInput.
18034func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) MarshalJSON() ([]byte, error) {
18035	rphvrafi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure
18036	objectMap := make(map[string]interface{})
18037	if rphvrafi.VaultLocation != nil {
18038		objectMap["vaultLocation"] = rphvrafi.VaultLocation
18039	}
18040	if rphvrafi.PrimaryKekCertificatePfx != nil {
18041		objectMap["primaryKekCertificatePfx"] = rphvrafi.PrimaryKekCertificatePfx
18042	}
18043	if rphvrafi.SecondaryKekCertificatePfx != nil {
18044		objectMap["secondaryKekCertificatePfx"] = rphvrafi.SecondaryKekCertificatePfx
18045	}
18046	if rphvrafi.RecoveryPointType != "" {
18047		objectMap["recoveryPointType"] = rphvrafi.RecoveryPointType
18048	}
18049	if rphvrafi.InstanceType != "" {
18050		objectMap["instanceType"] = rphvrafi.InstanceType
18051	}
18052	return json.Marshal(objectMap)
18053}
18054
18055// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18056func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18057	return nil, false
18058}
18059
18060// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18061func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18062	return nil, false
18063}
18064
18065// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18066func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18067	return &rphvrafi, true
18068}
18069
18070// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18071func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18072	return nil, false
18073}
18074
18075// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18076func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18077	return nil, false
18078}
18079
18080// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18081func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18082	return nil, false
18083}
18084
18085// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18086func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18087	return nil, false
18088}
18089
18090// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18091func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18092	return &rphvrafi, true
18093}
18094
18095// RecoveryPlanInMageAzureV2FailoverInput recovery plan InMageAzureV2 failover input.
18096type RecoveryPlanInMageAzureV2FailoverInput struct {
18097	// VaultLocation - The vault location.
18098	VaultLocation *string `json:"vaultLocation,omitempty"`
18099	// RecoveryPointType - The recovery point type. Possible values include: 'InMageV2RpRecoveryPointTypeLatest', 'InMageV2RpRecoveryPointTypeLatestApplicationConsistent', 'InMageV2RpRecoveryPointTypeLatestCrashConsistent', 'InMageV2RpRecoveryPointTypeLatestProcessed'
18100	RecoveryPointType InMageV2RpRecoveryPointType `json:"recoveryPointType,omitempty"`
18101	// UseMultiVMSyncPoint - A value indicating whether multi VM sync enabled VMs should use multi VM sync points for failover.
18102	UseMultiVMSyncPoint *string `json:"useMultiVmSyncPoint,omitempty"`
18103	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18104	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18105}
18106
18107// MarshalJSON is the custom marshaler for RecoveryPlanInMageAzureV2FailoverInput.
18108func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) MarshalJSON() ([]byte, error) {
18109	rpimavfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2
18110	objectMap := make(map[string]interface{})
18111	if rpimavfi.VaultLocation != nil {
18112		objectMap["vaultLocation"] = rpimavfi.VaultLocation
18113	}
18114	if rpimavfi.RecoveryPointType != "" {
18115		objectMap["recoveryPointType"] = rpimavfi.RecoveryPointType
18116	}
18117	if rpimavfi.UseMultiVMSyncPoint != nil {
18118		objectMap["useMultiVmSyncPoint"] = rpimavfi.UseMultiVMSyncPoint
18119	}
18120	if rpimavfi.InstanceType != "" {
18121		objectMap["instanceType"] = rpimavfi.InstanceType
18122	}
18123	return json.Marshal(objectMap)
18124}
18125
18126// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18127func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18128	return nil, false
18129}
18130
18131// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18132func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18133	return nil, false
18134}
18135
18136// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18137func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18138	return nil, false
18139}
18140
18141// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18142func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18143	return &rpimavfi, true
18144}
18145
18146// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18147func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18148	return nil, false
18149}
18150
18151// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18152func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18153	return nil, false
18154}
18155
18156// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18157func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18158	return nil, false
18159}
18160
18161// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18162func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18163	return &rpimavfi, true
18164}
18165
18166// RecoveryPlanInMageFailoverInput recovery plan InMage failover input.
18167type RecoveryPlanInMageFailoverInput struct {
18168	// RecoveryPointType - The recovery point type. Possible values include: 'RpInMageRecoveryPointTypeLatestTime', 'RpInMageRecoveryPointTypeLatestTag', 'RpInMageRecoveryPointTypeCustom'
18169	RecoveryPointType RpInMageRecoveryPointType `json:"recoveryPointType,omitempty"`
18170	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18171	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18172}
18173
18174// MarshalJSON is the custom marshaler for RecoveryPlanInMageFailoverInput.
18175func (rpimfi RecoveryPlanInMageFailoverInput) MarshalJSON() ([]byte, error) {
18176	rpimfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage
18177	objectMap := make(map[string]interface{})
18178	if rpimfi.RecoveryPointType != "" {
18179		objectMap["recoveryPointType"] = rpimfi.RecoveryPointType
18180	}
18181	if rpimfi.InstanceType != "" {
18182		objectMap["instanceType"] = rpimfi.InstanceType
18183	}
18184	return json.Marshal(objectMap)
18185}
18186
18187// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18188func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18189	return nil, false
18190}
18191
18192// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18193func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18194	return nil, false
18195}
18196
18197// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18198func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18199	return nil, false
18200}
18201
18202// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18203func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18204	return nil, false
18205}
18206
18207// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18208func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18209	return &rpimfi, true
18210}
18211
18212// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18213func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18214	return nil, false
18215}
18216
18217// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18218func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18219	return nil, false
18220}
18221
18222// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18223func (rpimfi RecoveryPlanInMageFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18224	return &rpimfi, true
18225}
18226
18227// RecoveryPlanInMageRcmFailoverInput recovery plan InMageRcm failover input.
18228type RecoveryPlanInMageRcmFailoverInput struct {
18229	// RecoveryPointType - The recovery point type. Possible values include: 'RecoveryPlanPointTypeLatest', 'RecoveryPlanPointTypeLatestApplicationConsistent', 'RecoveryPlanPointTypeLatestCrashConsistent', 'RecoveryPlanPointTypeLatestProcessed'
18230	RecoveryPointType RecoveryPlanPointType `json:"recoveryPointType,omitempty"`
18231	// UseMultiVMSyncPoint - A value indicating whether multi VM sync enabled VMs should use multi VM sync points for failover.
18232	UseMultiVMSyncPoint *string `json:"useMultiVmSyncPoint,omitempty"`
18233	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18234	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18235}
18236
18237// MarshalJSON is the custom marshaler for RecoveryPlanInMageRcmFailoverInput.
18238func (rpimrfi RecoveryPlanInMageRcmFailoverInput) MarshalJSON() ([]byte, error) {
18239	rpimrfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm
18240	objectMap := make(map[string]interface{})
18241	if rpimrfi.RecoveryPointType != "" {
18242		objectMap["recoveryPointType"] = rpimrfi.RecoveryPointType
18243	}
18244	if rpimrfi.UseMultiVMSyncPoint != nil {
18245		objectMap["useMultiVmSyncPoint"] = rpimrfi.UseMultiVMSyncPoint
18246	}
18247	if rpimrfi.InstanceType != "" {
18248		objectMap["instanceType"] = rpimrfi.InstanceType
18249	}
18250	return json.Marshal(objectMap)
18251}
18252
18253// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18254func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18255	return nil, false
18256}
18257
18258// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18259func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18260	return nil, false
18261}
18262
18263// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18264func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18265	return nil, false
18266}
18267
18268// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18269func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18270	return nil, false
18271}
18272
18273// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18274func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18275	return nil, false
18276}
18277
18278// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18279func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18280	return &rpimrfi, true
18281}
18282
18283// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18284func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18285	return nil, false
18286}
18287
18288// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18289func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18290	return &rpimrfi, true
18291}
18292
18293// RecoveryPlanManualActionDetails recovery plan manual action details.
18294type RecoveryPlanManualActionDetails struct {
18295	// Description - The manual action description.
18296	Description *string `json:"description,omitempty"`
18297	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
18298	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
18299}
18300
18301// MarshalJSON is the custom marshaler for RecoveryPlanManualActionDetails.
18302func (rpmad RecoveryPlanManualActionDetails) MarshalJSON() ([]byte, error) {
18303	rpmad.InstanceType = InstanceTypeManualActionDetails
18304	objectMap := make(map[string]interface{})
18305	if rpmad.Description != nil {
18306		objectMap["description"] = rpmad.Description
18307	}
18308	if rpmad.InstanceType != "" {
18309		objectMap["instanceType"] = rpmad.InstanceType
18310	}
18311	return json.Marshal(objectMap)
18312}
18313
18314// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18315func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
18316	return nil, false
18317}
18318
18319// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18320func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
18321	return &rpmad, true
18322}
18323
18324// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18325func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
18326	return nil, false
18327}
18328
18329// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18330func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
18331	return nil, false
18332}
18333
18334// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18335func (rpmad RecoveryPlanManualActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
18336	return &rpmad, true
18337}
18338
18339// RecoveryPlanPlannedFailoverInput recovery plan planned failover input.
18340type RecoveryPlanPlannedFailoverInput struct {
18341	// Properties - The recovery plan planned failover input properties.
18342	Properties *RecoveryPlanPlannedFailoverInputProperties `json:"properties,omitempty"`
18343}
18344
18345// RecoveryPlanPlannedFailoverInputProperties recovery plan planned failover input properties.
18346type RecoveryPlanPlannedFailoverInputProperties struct {
18347	// FailoverDirection - The failover direction. Possible values include: 'PrimaryToRecovery', 'RecoveryToPrimary'
18348	FailoverDirection PossibleOperationsDirections `json:"failoverDirection,omitempty"`
18349	// ProviderSpecificDetails - The provider specific properties.
18350	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
18351}
18352
18353// UnmarshalJSON is the custom unmarshaler for RecoveryPlanPlannedFailoverInputProperties struct.
18354func (rppfip *RecoveryPlanPlannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
18355	var m map[string]*json.RawMessage
18356	err := json.Unmarshal(body, &m)
18357	if err != nil {
18358		return err
18359	}
18360	for k, v := range m {
18361		switch k {
18362		case "failoverDirection":
18363			if v != nil {
18364				var failoverDirection PossibleOperationsDirections
18365				err = json.Unmarshal(*v, &failoverDirection)
18366				if err != nil {
18367					return err
18368				}
18369				rppfip.FailoverDirection = failoverDirection
18370			}
18371		case "providerSpecificDetails":
18372			if v != nil {
18373				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(*v)
18374				if err != nil {
18375					return err
18376				}
18377				rppfip.ProviderSpecificDetails = &providerSpecificDetails
18378			}
18379		}
18380	}
18381
18382	return nil
18383}
18384
18385// RecoveryPlanProperties recovery plan custom details.
18386type RecoveryPlanProperties struct {
18387	// FriendlyName - The friendly name.
18388	FriendlyName *string `json:"friendlyName,omitempty"`
18389	// PrimaryFabricID - The primary fabric Id.
18390	PrimaryFabricID *string `json:"primaryFabricId,omitempty"`
18391	// PrimaryFabricFriendlyName - The primary fabric friendly name.
18392	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
18393	// RecoveryFabricID - The recovery fabric Id.
18394	RecoveryFabricID *string `json:"recoveryFabricId,omitempty"`
18395	// RecoveryFabricFriendlyName - The recovery fabric friendly name.
18396	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
18397	// FailoverDeploymentModel - The failover deployment model.
18398	FailoverDeploymentModel *string `json:"failoverDeploymentModel,omitempty"`
18399	// ReplicationProviders - The list of replication providers.
18400	ReplicationProviders *[]string `json:"replicationProviders,omitempty"`
18401	// AllowedOperations - The list of allowed operations.
18402	AllowedOperations *[]string `json:"allowedOperations,omitempty"`
18403	// LastPlannedFailoverTime - The start time of the last planned failover.
18404	LastPlannedFailoverTime *date.Time `json:"lastPlannedFailoverTime,omitempty"`
18405	// LastUnplannedFailoverTime - The start time of the last unplanned failover.
18406	LastUnplannedFailoverTime *date.Time `json:"lastUnplannedFailoverTime,omitempty"`
18407	// LastTestFailoverTime - The start time of the last test failover.
18408	LastTestFailoverTime *date.Time `json:"lastTestFailoverTime,omitempty"`
18409	// CurrentScenario - The current scenario details.
18410	CurrentScenario *CurrentScenarioDetails `json:"currentScenario,omitempty"`
18411	// CurrentScenarioStatus - The recovery plan status.
18412	CurrentScenarioStatus *string `json:"currentScenarioStatus,omitempty"`
18413	// CurrentScenarioStatusDescription - The recovery plan status description.
18414	CurrentScenarioStatusDescription *string `json:"currentScenarioStatusDescription,omitempty"`
18415	// Groups - The recovery plan groups.
18416	Groups *[]RecoveryPlanGroup `json:"groups,omitempty"`
18417	// ProviderSpecificDetails - READ-ONLY; The provider id and provider specific details.
18418	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
18419}
18420
18421// MarshalJSON is the custom marshaler for RecoveryPlanProperties.
18422func (rpp RecoveryPlanProperties) MarshalJSON() ([]byte, error) {
18423	objectMap := make(map[string]interface{})
18424	if rpp.FriendlyName != nil {
18425		objectMap["friendlyName"] = rpp.FriendlyName
18426	}
18427	if rpp.PrimaryFabricID != nil {
18428		objectMap["primaryFabricId"] = rpp.PrimaryFabricID
18429	}
18430	if rpp.PrimaryFabricFriendlyName != nil {
18431		objectMap["primaryFabricFriendlyName"] = rpp.PrimaryFabricFriendlyName
18432	}
18433	if rpp.RecoveryFabricID != nil {
18434		objectMap["recoveryFabricId"] = rpp.RecoveryFabricID
18435	}
18436	if rpp.RecoveryFabricFriendlyName != nil {
18437		objectMap["recoveryFabricFriendlyName"] = rpp.RecoveryFabricFriendlyName
18438	}
18439	if rpp.FailoverDeploymentModel != nil {
18440		objectMap["failoverDeploymentModel"] = rpp.FailoverDeploymentModel
18441	}
18442	if rpp.ReplicationProviders != nil {
18443		objectMap["replicationProviders"] = rpp.ReplicationProviders
18444	}
18445	if rpp.AllowedOperations != nil {
18446		objectMap["allowedOperations"] = rpp.AllowedOperations
18447	}
18448	if rpp.LastPlannedFailoverTime != nil {
18449		objectMap["lastPlannedFailoverTime"] = rpp.LastPlannedFailoverTime
18450	}
18451	if rpp.LastUnplannedFailoverTime != nil {
18452		objectMap["lastUnplannedFailoverTime"] = rpp.LastUnplannedFailoverTime
18453	}
18454	if rpp.LastTestFailoverTime != nil {
18455		objectMap["lastTestFailoverTime"] = rpp.LastTestFailoverTime
18456	}
18457	if rpp.CurrentScenario != nil {
18458		objectMap["currentScenario"] = rpp.CurrentScenario
18459	}
18460	if rpp.CurrentScenarioStatus != nil {
18461		objectMap["currentScenarioStatus"] = rpp.CurrentScenarioStatus
18462	}
18463	if rpp.CurrentScenarioStatusDescription != nil {
18464		objectMap["currentScenarioStatusDescription"] = rpp.CurrentScenarioStatusDescription
18465	}
18466	if rpp.Groups != nil {
18467		objectMap["groups"] = rpp.Groups
18468	}
18469	return json.Marshal(objectMap)
18470}
18471
18472// UnmarshalJSON is the custom unmarshaler for RecoveryPlanProperties struct.
18473func (rpp *RecoveryPlanProperties) UnmarshalJSON(body []byte) error {
18474	var m map[string]*json.RawMessage
18475	err := json.Unmarshal(body, &m)
18476	if err != nil {
18477		return err
18478	}
18479	for k, v := range m {
18480		switch k {
18481		case "friendlyName":
18482			if v != nil {
18483				var friendlyName string
18484				err = json.Unmarshal(*v, &friendlyName)
18485				if err != nil {
18486					return err
18487				}
18488				rpp.FriendlyName = &friendlyName
18489			}
18490		case "primaryFabricId":
18491			if v != nil {
18492				var primaryFabricID string
18493				err = json.Unmarshal(*v, &primaryFabricID)
18494				if err != nil {
18495					return err
18496				}
18497				rpp.PrimaryFabricID = &primaryFabricID
18498			}
18499		case "primaryFabricFriendlyName":
18500			if v != nil {
18501				var primaryFabricFriendlyName string
18502				err = json.Unmarshal(*v, &primaryFabricFriendlyName)
18503				if err != nil {
18504					return err
18505				}
18506				rpp.PrimaryFabricFriendlyName = &primaryFabricFriendlyName
18507			}
18508		case "recoveryFabricId":
18509			if v != nil {
18510				var recoveryFabricID string
18511				err = json.Unmarshal(*v, &recoveryFabricID)
18512				if err != nil {
18513					return err
18514				}
18515				rpp.RecoveryFabricID = &recoveryFabricID
18516			}
18517		case "recoveryFabricFriendlyName":
18518			if v != nil {
18519				var recoveryFabricFriendlyName string
18520				err = json.Unmarshal(*v, &recoveryFabricFriendlyName)
18521				if err != nil {
18522					return err
18523				}
18524				rpp.RecoveryFabricFriendlyName = &recoveryFabricFriendlyName
18525			}
18526		case "failoverDeploymentModel":
18527			if v != nil {
18528				var failoverDeploymentModel string
18529				err = json.Unmarshal(*v, &failoverDeploymentModel)
18530				if err != nil {
18531					return err
18532				}
18533				rpp.FailoverDeploymentModel = &failoverDeploymentModel
18534			}
18535		case "replicationProviders":
18536			if v != nil {
18537				var replicationProviders []string
18538				err = json.Unmarshal(*v, &replicationProviders)
18539				if err != nil {
18540					return err
18541				}
18542				rpp.ReplicationProviders = &replicationProviders
18543			}
18544		case "allowedOperations":
18545			if v != nil {
18546				var allowedOperations []string
18547				err = json.Unmarshal(*v, &allowedOperations)
18548				if err != nil {
18549					return err
18550				}
18551				rpp.AllowedOperations = &allowedOperations
18552			}
18553		case "lastPlannedFailoverTime":
18554			if v != nil {
18555				var lastPlannedFailoverTime date.Time
18556				err = json.Unmarshal(*v, &lastPlannedFailoverTime)
18557				if err != nil {
18558					return err
18559				}
18560				rpp.LastPlannedFailoverTime = &lastPlannedFailoverTime
18561			}
18562		case "lastUnplannedFailoverTime":
18563			if v != nil {
18564				var lastUnplannedFailoverTime date.Time
18565				err = json.Unmarshal(*v, &lastUnplannedFailoverTime)
18566				if err != nil {
18567					return err
18568				}
18569				rpp.LastUnplannedFailoverTime = &lastUnplannedFailoverTime
18570			}
18571		case "lastTestFailoverTime":
18572			if v != nil {
18573				var lastTestFailoverTime date.Time
18574				err = json.Unmarshal(*v, &lastTestFailoverTime)
18575				if err != nil {
18576					return err
18577				}
18578				rpp.LastTestFailoverTime = &lastTestFailoverTime
18579			}
18580		case "currentScenario":
18581			if v != nil {
18582				var currentScenario CurrentScenarioDetails
18583				err = json.Unmarshal(*v, &currentScenario)
18584				if err != nil {
18585					return err
18586				}
18587				rpp.CurrentScenario = &currentScenario
18588			}
18589		case "currentScenarioStatus":
18590			if v != nil {
18591				var currentScenarioStatus string
18592				err = json.Unmarshal(*v, &currentScenarioStatus)
18593				if err != nil {
18594					return err
18595				}
18596				rpp.CurrentScenarioStatus = &currentScenarioStatus
18597			}
18598		case "currentScenarioStatusDescription":
18599			if v != nil {
18600				var currentScenarioStatusDescription string
18601				err = json.Unmarshal(*v, &currentScenarioStatusDescription)
18602				if err != nil {
18603					return err
18604				}
18605				rpp.CurrentScenarioStatusDescription = &currentScenarioStatusDescription
18606			}
18607		case "groups":
18608			if v != nil {
18609				var groups []RecoveryPlanGroup
18610				err = json.Unmarshal(*v, &groups)
18611				if err != nil {
18612					return err
18613				}
18614				rpp.Groups = &groups
18615			}
18616		case "providerSpecificDetails":
18617			if v != nil {
18618				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificDetailsArray(*v)
18619				if err != nil {
18620					return err
18621				}
18622				rpp.ProviderSpecificDetails = &providerSpecificDetails
18623			}
18624		}
18625	}
18626
18627	return nil
18628}
18629
18630// RecoveryPlanProtectedItem recovery plan protected item.
18631type RecoveryPlanProtectedItem struct {
18632	// ID - The ARM Id of the recovery plan protected item.
18633	ID *string `json:"id,omitempty"`
18634	// VirtualMachineID - The virtual machine Id.
18635	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
18636}
18637
18638// BasicRecoveryPlanProviderSpecificDetails recovery plan provider specific details.
18639type BasicRecoveryPlanProviderSpecificDetails interface {
18640	AsRecoveryPlanA2ADetails() (*RecoveryPlanA2ADetails, bool)
18641	AsRecoveryPlanProviderSpecificDetails() (*RecoveryPlanProviderSpecificDetails, bool)
18642}
18643
18644// RecoveryPlanProviderSpecificDetails recovery plan provider specific details.
18645type RecoveryPlanProviderSpecificDetails struct {
18646	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeRecoveryPlanProviderSpecificDetails', 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A'
18647	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificDetails `json:"instanceType,omitempty"`
18648}
18649
18650func unmarshalBasicRecoveryPlanProviderSpecificDetails(body []byte) (BasicRecoveryPlanProviderSpecificDetails, error) {
18651	var m map[string]interface{}
18652	err := json.Unmarshal(body, &m)
18653	if err != nil {
18654		return nil, err
18655	}
18656
18657	switch m["instanceType"] {
18658	case string(InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A):
18659		var rpad RecoveryPlanA2ADetails
18660		err := json.Unmarshal(body, &rpad)
18661		return rpad, err
18662	default:
18663		var rppsd RecoveryPlanProviderSpecificDetails
18664		err := json.Unmarshal(body, &rppsd)
18665		return rppsd, err
18666	}
18667}
18668func unmarshalBasicRecoveryPlanProviderSpecificDetailsArray(body []byte) ([]BasicRecoveryPlanProviderSpecificDetails, error) {
18669	var rawMessages []*json.RawMessage
18670	err := json.Unmarshal(body, &rawMessages)
18671	if err != nil {
18672		return nil, err
18673	}
18674
18675	rppsdArray := make([]BasicRecoveryPlanProviderSpecificDetails, len(rawMessages))
18676
18677	for index, rawMessage := range rawMessages {
18678		rppsd, err := unmarshalBasicRecoveryPlanProviderSpecificDetails(*rawMessage)
18679		if err != nil {
18680			return nil, err
18681		}
18682		rppsdArray[index] = rppsd
18683	}
18684	return rppsdArray, nil
18685}
18686
18687// MarshalJSON is the custom marshaler for RecoveryPlanProviderSpecificDetails.
18688func (rppsd RecoveryPlanProviderSpecificDetails) MarshalJSON() ([]byte, error) {
18689	rppsd.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeRecoveryPlanProviderSpecificDetails
18690	objectMap := make(map[string]interface{})
18691	if rppsd.InstanceType != "" {
18692		objectMap["instanceType"] = rppsd.InstanceType
18693	}
18694	return json.Marshal(objectMap)
18695}
18696
18697// AsRecoveryPlanA2ADetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanProviderSpecificDetails.
18698func (rppsd RecoveryPlanProviderSpecificDetails) AsRecoveryPlanA2ADetails() (*RecoveryPlanA2ADetails, bool) {
18699	return nil, false
18700}
18701
18702// AsRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanProviderSpecificDetails.
18703func (rppsd RecoveryPlanProviderSpecificDetails) AsRecoveryPlanProviderSpecificDetails() (*RecoveryPlanProviderSpecificDetails, bool) {
18704	return &rppsd, true
18705}
18706
18707// AsBasicRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanProviderSpecificDetails.
18708func (rppsd RecoveryPlanProviderSpecificDetails) AsBasicRecoveryPlanProviderSpecificDetails() (BasicRecoveryPlanProviderSpecificDetails, bool) {
18709	return &rppsd, true
18710}
18711
18712// BasicRecoveryPlanProviderSpecificFailoverInput recovery plan provider specific failover input base class.
18713type BasicRecoveryPlanProviderSpecificFailoverInput interface {
18714	AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool)
18715	AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool)
18716	AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool)
18717	AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool)
18718	AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool)
18719	AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool)
18720	AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool)
18721}
18722
18723// RecoveryPlanProviderSpecificFailoverInput recovery plan provider specific failover input base class.
18724type RecoveryPlanProviderSpecificFailoverInput struct {
18725	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18726	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18727}
18728
18729func unmarshalBasicRecoveryPlanProviderSpecificFailoverInput(body []byte) (BasicRecoveryPlanProviderSpecificFailoverInput, error) {
18730	var m map[string]interface{}
18731	err := json.Unmarshal(body, &m)
18732	if err != nil {
18733		return nil, err
18734	}
18735
18736	switch m["instanceType"] {
18737	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A):
18738		var rpafi RecoveryPlanA2AFailoverInput
18739		err := json.Unmarshal(body, &rpafi)
18740		return rpafi, err
18741	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback):
18742		var rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput
18743		err := json.Unmarshal(body, &rphvrafi)
18744		return rphvrafi, err
18745	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure):
18746		var rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput
18747		err := json.Unmarshal(body, &rphvrafi)
18748		return rphvrafi, err
18749	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2):
18750		var rpimavfi RecoveryPlanInMageAzureV2FailoverInput
18751		err := json.Unmarshal(body, &rpimavfi)
18752		return rpimavfi, err
18753	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage):
18754		var rpimfi RecoveryPlanInMageFailoverInput
18755		err := json.Unmarshal(body, &rpimfi)
18756		return rpimfi, err
18757	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm):
18758		var rpimrfi RecoveryPlanInMageRcmFailoverInput
18759		err := json.Unmarshal(body, &rpimrfi)
18760		return rpimrfi, err
18761	default:
18762		var rppsfi RecoveryPlanProviderSpecificFailoverInput
18763		err := json.Unmarshal(body, &rppsfi)
18764		return rppsfi, err
18765	}
18766}
18767func unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(body []byte) ([]BasicRecoveryPlanProviderSpecificFailoverInput, error) {
18768	var rawMessages []*json.RawMessage
18769	err := json.Unmarshal(body, &rawMessages)
18770	if err != nil {
18771		return nil, err
18772	}
18773
18774	rppsfiArray := make([]BasicRecoveryPlanProviderSpecificFailoverInput, len(rawMessages))
18775
18776	for index, rawMessage := range rawMessages {
18777		rppsfi, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInput(*rawMessage)
18778		if err != nil {
18779			return nil, err
18780		}
18781		rppsfiArray[index] = rppsfi
18782	}
18783	return rppsfiArray, nil
18784}
18785
18786// MarshalJSON is the custom marshaler for RecoveryPlanProviderSpecificFailoverInput.
18787func (rppsfi RecoveryPlanProviderSpecificFailoverInput) MarshalJSON() ([]byte, error) {
18788	rppsfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput
18789	objectMap := make(map[string]interface{})
18790	if rppsfi.InstanceType != "" {
18791		objectMap["instanceType"] = rppsfi.InstanceType
18792	}
18793	return json.Marshal(objectMap)
18794}
18795
18796// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18797func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18798	return nil, false
18799}
18800
18801// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18802func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18803	return nil, false
18804}
18805
18806// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18807func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18808	return nil, false
18809}
18810
18811// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18812func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18813	return nil, false
18814}
18815
18816// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18817func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18818	return nil, false
18819}
18820
18821// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18822func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18823	return nil, false
18824}
18825
18826// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18827func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18828	return &rppsfi, true
18829}
18830
18831// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18832func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18833	return &rppsfi, true
18834}
18835
18836// BasicRecoveryPlanProviderSpecificInput recovery plan provider specific input base class.
18837type BasicRecoveryPlanProviderSpecificInput interface {
18838	AsRecoveryPlanA2AInput() (*RecoveryPlanA2AInput, bool)
18839	AsRecoveryPlanProviderSpecificInput() (*RecoveryPlanProviderSpecificInput, bool)
18840}
18841
18842// RecoveryPlanProviderSpecificInput recovery plan provider specific input base class.
18843type RecoveryPlanProviderSpecificInput struct {
18844	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeRecoveryPlanProviderSpecificInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A'
18845	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificInput `json:"instanceType,omitempty"`
18846}
18847
18848func unmarshalBasicRecoveryPlanProviderSpecificInput(body []byte) (BasicRecoveryPlanProviderSpecificInput, error) {
18849	var m map[string]interface{}
18850	err := json.Unmarshal(body, &m)
18851	if err != nil {
18852		return nil, err
18853	}
18854
18855	switch m["instanceType"] {
18856	case string(InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A):
18857		var rpai RecoveryPlanA2AInput
18858		err := json.Unmarshal(body, &rpai)
18859		return rpai, err
18860	default:
18861		var rppsi RecoveryPlanProviderSpecificInput
18862		err := json.Unmarshal(body, &rppsi)
18863		return rppsi, err
18864	}
18865}
18866func unmarshalBasicRecoveryPlanProviderSpecificInputArray(body []byte) ([]BasicRecoveryPlanProviderSpecificInput, error) {
18867	var rawMessages []*json.RawMessage
18868	err := json.Unmarshal(body, &rawMessages)
18869	if err != nil {
18870		return nil, err
18871	}
18872
18873	rppsiArray := make([]BasicRecoveryPlanProviderSpecificInput, len(rawMessages))
18874
18875	for index, rawMessage := range rawMessages {
18876		rppsi, err := unmarshalBasicRecoveryPlanProviderSpecificInput(*rawMessage)
18877		if err != nil {
18878			return nil, err
18879		}
18880		rppsiArray[index] = rppsi
18881	}
18882	return rppsiArray, nil
18883}
18884
18885// MarshalJSON is the custom marshaler for RecoveryPlanProviderSpecificInput.
18886func (rppsi RecoveryPlanProviderSpecificInput) MarshalJSON() ([]byte, error) {
18887	rppsi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeRecoveryPlanProviderSpecificInput
18888	objectMap := make(map[string]interface{})
18889	if rppsi.InstanceType != "" {
18890		objectMap["instanceType"] = rppsi.InstanceType
18891	}
18892	return json.Marshal(objectMap)
18893}
18894
18895// AsRecoveryPlanA2AInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanProviderSpecificInput.
18896func (rppsi RecoveryPlanProviderSpecificInput) AsRecoveryPlanA2AInput() (*RecoveryPlanA2AInput, bool) {
18897	return nil, false
18898}
18899
18900// AsRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanProviderSpecificInput.
18901func (rppsi RecoveryPlanProviderSpecificInput) AsRecoveryPlanProviderSpecificInput() (*RecoveryPlanProviderSpecificInput, bool) {
18902	return &rppsi, true
18903}
18904
18905// AsBasicRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanProviderSpecificInput.
18906func (rppsi RecoveryPlanProviderSpecificInput) AsBasicRecoveryPlanProviderSpecificInput() (BasicRecoveryPlanProviderSpecificInput, bool) {
18907	return &rppsi, true
18908}
18909
18910// RecoveryPlanScriptActionDetails recovery plan script action details.
18911type RecoveryPlanScriptActionDetails struct {
18912	// Path - The script path.
18913	Path *string `json:"path,omitempty"`
18914	// Timeout - The script timeout.
18915	Timeout *string `json:"timeout,omitempty"`
18916	// FabricLocation - The fabric location. Possible values include: 'Primary', 'Recovery'
18917	FabricLocation RecoveryPlanActionLocation `json:"fabricLocation,omitempty"`
18918	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
18919	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
18920}
18921
18922// MarshalJSON is the custom marshaler for RecoveryPlanScriptActionDetails.
18923func (rpsad RecoveryPlanScriptActionDetails) MarshalJSON() ([]byte, error) {
18924	rpsad.InstanceType = InstanceTypeScriptActionDetails
18925	objectMap := make(map[string]interface{})
18926	if rpsad.Path != nil {
18927		objectMap["path"] = rpsad.Path
18928	}
18929	if rpsad.Timeout != nil {
18930		objectMap["timeout"] = rpsad.Timeout
18931	}
18932	if rpsad.FabricLocation != "" {
18933		objectMap["fabricLocation"] = rpsad.FabricLocation
18934	}
18935	if rpsad.InstanceType != "" {
18936		objectMap["instanceType"] = rpsad.InstanceType
18937	}
18938	return json.Marshal(objectMap)
18939}
18940
18941// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18942func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
18943	return nil, false
18944}
18945
18946// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18947func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
18948	return nil, false
18949}
18950
18951// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18952func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
18953	return &rpsad, true
18954}
18955
18956// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18957func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
18958	return nil, false
18959}
18960
18961// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18962func (rpsad RecoveryPlanScriptActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
18963	return &rpsad, true
18964}
18965
18966// RecoveryPlanShutdownGroupTaskDetails this class represents the recovery plan shutdown group task
18967// details.
18968type RecoveryPlanShutdownGroupTaskDetails struct {
18969	// Name - The name.
18970	Name *string `json:"name,omitempty"`
18971	// GroupID - The group identifier.
18972	GroupID *string `json:"groupId,omitempty"`
18973	// RpGroupType - The group type.
18974	RpGroupType *string `json:"rpGroupType,omitempty"`
18975	// ChildTasks - The child tasks.
18976	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
18977	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
18978	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
18979}
18980
18981// MarshalJSON is the custom marshaler for RecoveryPlanShutdownGroupTaskDetails.
18982func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) MarshalJSON() ([]byte, error) {
18983	rpsgtd.InstanceType = InstanceTypeRecoveryPlanShutdownGroupTaskDetails
18984	objectMap := make(map[string]interface{})
18985	if rpsgtd.Name != nil {
18986		objectMap["name"] = rpsgtd.Name
18987	}
18988	if rpsgtd.GroupID != nil {
18989		objectMap["groupId"] = rpsgtd.GroupID
18990	}
18991	if rpsgtd.RpGroupType != nil {
18992		objectMap["rpGroupType"] = rpsgtd.RpGroupType
18993	}
18994	if rpsgtd.ChildTasks != nil {
18995		objectMap["childTasks"] = rpsgtd.ChildTasks
18996	}
18997	if rpsgtd.InstanceType != "" {
18998		objectMap["instanceType"] = rpsgtd.InstanceType
18999	}
19000	return json.Marshal(objectMap)
19001}
19002
19003// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
19004func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
19005	return nil, false
19006}
19007
19008// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
19009func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
19010	return nil, false
19011}
19012
19013// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
19014func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
19015	return &rpsgtd, true
19016}
19017
19018// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
19019func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
19020	return nil, false
19021}
19022
19023// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
19024func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
19025	return &rpsgtd, true
19026}
19027
19028// RecoveryPlanTestFailoverCleanupInput recovery plan test failover cleanup input.
19029type RecoveryPlanTestFailoverCleanupInput struct {
19030	// Properties - The recovery plan test failover cleanup input properties.
19031	Properties *RecoveryPlanTestFailoverCleanupInputProperties `json:"properties,omitempty"`
19032}
19033
19034// RecoveryPlanTestFailoverCleanupInputProperties recovery plan test failover cleanup input properties.
19035type RecoveryPlanTestFailoverCleanupInputProperties struct {
19036	// Comments - The test failover cleanup comments.
19037	Comments *string `json:"comments,omitempty"`
19038}
19039
19040// RecoveryPlanTestFailoverInput recovery plan test failover input.
19041type RecoveryPlanTestFailoverInput struct {
19042	// Properties - The recovery plan test failover input properties.
19043	Properties *RecoveryPlanTestFailoverInputProperties `json:"properties,omitempty"`
19044}
19045
19046// RecoveryPlanTestFailoverInputProperties recovery plan test failover input properties.
19047type RecoveryPlanTestFailoverInputProperties struct {
19048	// FailoverDirection - The failover direction. Possible values include: 'PrimaryToRecovery', 'RecoveryToPrimary'
19049	FailoverDirection PossibleOperationsDirections `json:"failoverDirection,omitempty"`
19050	// NetworkType - The network type to be used for test failover.
19051	NetworkType *string `json:"networkType,omitempty"`
19052	// NetworkID - The Id of the network to be used for test failover.
19053	NetworkID *string `json:"networkId,omitempty"`
19054	// SkipTestFailoverCleanup - A value indicating whether the test failover cleanup is to be skipped.
19055	SkipTestFailoverCleanup *string `json:"skipTestFailoverCleanup,omitempty"`
19056	// ProviderSpecificDetails - The provider specific properties.
19057	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
19058}
19059
19060// UnmarshalJSON is the custom unmarshaler for RecoveryPlanTestFailoverInputProperties struct.
19061func (rptfip *RecoveryPlanTestFailoverInputProperties) UnmarshalJSON(body []byte) error {
19062	var m map[string]*json.RawMessage
19063	err := json.Unmarshal(body, &m)
19064	if err != nil {
19065		return err
19066	}
19067	for k, v := range m {
19068		switch k {
19069		case "failoverDirection":
19070			if v != nil {
19071				var failoverDirection PossibleOperationsDirections
19072				err = json.Unmarshal(*v, &failoverDirection)
19073				if err != nil {
19074					return err
19075				}
19076				rptfip.FailoverDirection = failoverDirection
19077			}
19078		case "networkType":
19079			if v != nil {
19080				var networkType string
19081				err = json.Unmarshal(*v, &networkType)
19082				if err != nil {
19083					return err
19084				}
19085				rptfip.NetworkType = &networkType
19086			}
19087		case "networkId":
19088			if v != nil {
19089				var networkID string
19090				err = json.Unmarshal(*v, &networkID)
19091				if err != nil {
19092					return err
19093				}
19094				rptfip.NetworkID = &networkID
19095			}
19096		case "skipTestFailoverCleanup":
19097			if v != nil {
19098				var skipTestFailoverCleanup string
19099				err = json.Unmarshal(*v, &skipTestFailoverCleanup)
19100				if err != nil {
19101					return err
19102				}
19103				rptfip.SkipTestFailoverCleanup = &skipTestFailoverCleanup
19104			}
19105		case "providerSpecificDetails":
19106			if v != nil {
19107				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(*v)
19108				if err != nil {
19109					return err
19110				}
19111				rptfip.ProviderSpecificDetails = &providerSpecificDetails
19112			}
19113		}
19114	}
19115
19116	return nil
19117}
19118
19119// RecoveryPlanUnplannedFailoverInput recovery plan unplanned failover input.
19120type RecoveryPlanUnplannedFailoverInput struct {
19121	// Properties - The recovery plan unplanned failover input properties.
19122	Properties *RecoveryPlanUnplannedFailoverInputProperties `json:"properties,omitempty"`
19123}
19124
19125// RecoveryPlanUnplannedFailoverInputProperties recovery plan unplanned failover input properties.
19126type RecoveryPlanUnplannedFailoverInputProperties struct {
19127	// FailoverDirection - The failover direction. Possible values include: 'PrimaryToRecovery', 'RecoveryToPrimary'
19128	FailoverDirection PossibleOperationsDirections `json:"failoverDirection,omitempty"`
19129	// SourceSiteOperations - A value indicating whether source site operations are required. Possible values include: 'Required', 'NotRequired'
19130	SourceSiteOperations SourceSiteOperations `json:"sourceSiteOperations,omitempty"`
19131	// ProviderSpecificDetails - The provider specific properties.
19132	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
19133}
19134
19135// UnmarshalJSON is the custom unmarshaler for RecoveryPlanUnplannedFailoverInputProperties struct.
19136func (rpufip *RecoveryPlanUnplannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
19137	var m map[string]*json.RawMessage
19138	err := json.Unmarshal(body, &m)
19139	if err != nil {
19140		return err
19141	}
19142	for k, v := range m {
19143		switch k {
19144		case "failoverDirection":
19145			if v != nil {
19146				var failoverDirection PossibleOperationsDirections
19147				err = json.Unmarshal(*v, &failoverDirection)
19148				if err != nil {
19149					return err
19150				}
19151				rpufip.FailoverDirection = failoverDirection
19152			}
19153		case "sourceSiteOperations":
19154			if v != nil {
19155				var sourceSiteOperations SourceSiteOperations
19156				err = json.Unmarshal(*v, &sourceSiteOperations)
19157				if err != nil {
19158					return err
19159				}
19160				rpufip.SourceSiteOperations = sourceSiteOperations
19161			}
19162		case "providerSpecificDetails":
19163			if v != nil {
19164				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(*v)
19165				if err != nil {
19166					return err
19167				}
19168				rpufip.ProviderSpecificDetails = &providerSpecificDetails
19169			}
19170		}
19171	}
19172
19173	return nil
19174}
19175
19176// RecoveryPoint base class representing a recovery point.
19177type RecoveryPoint struct {
19178	autorest.Response `json:"-"`
19179	// Properties - Recovery point related data.
19180	Properties *RecoveryPointProperties `json:"properties,omitempty"`
19181	// ID - READ-ONLY; Resource Id
19182	ID *string `json:"id,omitempty"`
19183	// Name - READ-ONLY; Resource Name
19184	Name *string `json:"name,omitempty"`
19185	// Type - READ-ONLY; Resource Type
19186	Type *string `json:"type,omitempty"`
19187	// Location - Resource Location
19188	Location *string `json:"location,omitempty"`
19189}
19190
19191// MarshalJSON is the custom marshaler for RecoveryPoint.
19192func (rp RecoveryPoint) MarshalJSON() ([]byte, error) {
19193	objectMap := make(map[string]interface{})
19194	if rp.Properties != nil {
19195		objectMap["properties"] = rp.Properties
19196	}
19197	if rp.Location != nil {
19198		objectMap["location"] = rp.Location
19199	}
19200	return json.Marshal(objectMap)
19201}
19202
19203// RecoveryPointCollection collection of recovery point details.
19204type RecoveryPointCollection struct {
19205	autorest.Response `json:"-"`
19206	// Value - The recovery point details.
19207	Value *[]RecoveryPoint `json:"value,omitempty"`
19208	// NextLink - The value of next link.
19209	NextLink *string `json:"nextLink,omitempty"`
19210}
19211
19212// RecoveryPointCollectionIterator provides access to a complete listing of RecoveryPoint values.
19213type RecoveryPointCollectionIterator struct {
19214	i    int
19215	page RecoveryPointCollectionPage
19216}
19217
19218// NextWithContext advances to the next value.  If there was an error making
19219// the request the iterator does not advance and the error is returned.
19220func (iter *RecoveryPointCollectionIterator) NextWithContext(ctx context.Context) (err error) {
19221	if tracing.IsEnabled() {
19222		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointCollectionIterator.NextWithContext")
19223		defer func() {
19224			sc := -1
19225			if iter.Response().Response.Response != nil {
19226				sc = iter.Response().Response.Response.StatusCode
19227			}
19228			tracing.EndSpan(ctx, sc, err)
19229		}()
19230	}
19231	iter.i++
19232	if iter.i < len(iter.page.Values()) {
19233		return nil
19234	}
19235	err = iter.page.NextWithContext(ctx)
19236	if err != nil {
19237		iter.i--
19238		return err
19239	}
19240	iter.i = 0
19241	return nil
19242}
19243
19244// Next advances to the next value.  If there was an error making
19245// the request the iterator does not advance and the error is returned.
19246// Deprecated: Use NextWithContext() instead.
19247func (iter *RecoveryPointCollectionIterator) Next() error {
19248	return iter.NextWithContext(context.Background())
19249}
19250
19251// NotDone returns true if the enumeration should be started or is not yet complete.
19252func (iter RecoveryPointCollectionIterator) NotDone() bool {
19253	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19254}
19255
19256// Response returns the raw server response from the last page request.
19257func (iter RecoveryPointCollectionIterator) Response() RecoveryPointCollection {
19258	return iter.page.Response()
19259}
19260
19261// Value returns the current value or a zero-initialized value if the
19262// iterator has advanced beyond the end of the collection.
19263func (iter RecoveryPointCollectionIterator) Value() RecoveryPoint {
19264	if !iter.page.NotDone() {
19265		return RecoveryPoint{}
19266	}
19267	return iter.page.Values()[iter.i]
19268}
19269
19270// Creates a new instance of the RecoveryPointCollectionIterator type.
19271func NewRecoveryPointCollectionIterator(page RecoveryPointCollectionPage) RecoveryPointCollectionIterator {
19272	return RecoveryPointCollectionIterator{page: page}
19273}
19274
19275// IsEmpty returns true if the ListResult contains no values.
19276func (RPCVar RecoveryPointCollection) IsEmpty() bool {
19277	return RPCVar.Value == nil || len(*RPCVar.Value) == 0
19278}
19279
19280// hasNextLink returns true if the NextLink is not empty.
19281func (RPCVar RecoveryPointCollection) hasNextLink() bool {
19282	return RPCVar.NextLink != nil && len(*RPCVar.NextLink) != 0
19283}
19284
19285// recoveryPointCollectionPreparer prepares a request to retrieve the next set of results.
19286// It returns nil if no more results exist.
19287func (RPCVar RecoveryPointCollection) recoveryPointCollectionPreparer(ctx context.Context) (*http.Request, error) {
19288	if !RPCVar.hasNextLink() {
19289		return nil, nil
19290	}
19291	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19292		autorest.AsJSON(),
19293		autorest.AsGet(),
19294		autorest.WithBaseURL(to.String(RPCVar.NextLink)))
19295}
19296
19297// RecoveryPointCollectionPage contains a page of RecoveryPoint values.
19298type RecoveryPointCollectionPage struct {
19299	fn     func(context.Context, RecoveryPointCollection) (RecoveryPointCollection, error)
19300	RPCVar RecoveryPointCollection
19301}
19302
19303// NextWithContext advances to the next page of values.  If there was an error making
19304// the request the page does not advance and the error is returned.
19305func (page *RecoveryPointCollectionPage) NextWithContext(ctx context.Context) (err error) {
19306	if tracing.IsEnabled() {
19307		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointCollectionPage.NextWithContext")
19308		defer func() {
19309			sc := -1
19310			if page.Response().Response.Response != nil {
19311				sc = page.Response().Response.Response.StatusCode
19312			}
19313			tracing.EndSpan(ctx, sc, err)
19314		}()
19315	}
19316	for {
19317		next, err := page.fn(ctx, page.RPCVar)
19318		if err != nil {
19319			return err
19320		}
19321		page.RPCVar = next
19322		if !next.hasNextLink() || !next.IsEmpty() {
19323			break
19324		}
19325	}
19326	return nil
19327}
19328
19329// Next advances to the next page of values.  If there was an error making
19330// the request the page does not advance and the error is returned.
19331// Deprecated: Use NextWithContext() instead.
19332func (page *RecoveryPointCollectionPage) Next() error {
19333	return page.NextWithContext(context.Background())
19334}
19335
19336// NotDone returns true if the page enumeration should be started or is not yet complete.
19337func (page RecoveryPointCollectionPage) NotDone() bool {
19338	return !page.RPCVar.IsEmpty()
19339}
19340
19341// Response returns the raw server response from the last page request.
19342func (page RecoveryPointCollectionPage) Response() RecoveryPointCollection {
19343	return page.RPCVar
19344}
19345
19346// Values returns the slice of values for the current page or nil if there are no values.
19347func (page RecoveryPointCollectionPage) Values() []RecoveryPoint {
19348	if page.RPCVar.IsEmpty() {
19349		return nil
19350	}
19351	return *page.RPCVar.Value
19352}
19353
19354// Creates a new instance of the RecoveryPointCollectionPage type.
19355func NewRecoveryPointCollectionPage(cur RecoveryPointCollection, getNextPage func(context.Context, RecoveryPointCollection) (RecoveryPointCollection, error)) RecoveryPointCollectionPage {
19356	return RecoveryPointCollectionPage{
19357		fn:     getNextPage,
19358		RPCVar: cur,
19359	}
19360}
19361
19362// RecoveryPointProperties recovery point properties.
19363type RecoveryPointProperties struct {
19364	// RecoveryPointTime - The recovery point time.
19365	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
19366	// RecoveryPointType - The recovery point type: ApplicationConsistent, CrashConsistent.
19367	RecoveryPointType *string `json:"recoveryPointType,omitempty"`
19368	// ProviderSpecificDetails - The provider specific details for the recovery point.
19369	ProviderSpecificDetails BasicProviderSpecificRecoveryPointDetails `json:"providerSpecificDetails,omitempty"`
19370}
19371
19372// UnmarshalJSON is the custom unmarshaler for RecoveryPointProperties struct.
19373func (rpp *RecoveryPointProperties) UnmarshalJSON(body []byte) error {
19374	var m map[string]*json.RawMessage
19375	err := json.Unmarshal(body, &m)
19376	if err != nil {
19377		return err
19378	}
19379	for k, v := range m {
19380		switch k {
19381		case "recoveryPointTime":
19382			if v != nil {
19383				var recoveryPointTime date.Time
19384				err = json.Unmarshal(*v, &recoveryPointTime)
19385				if err != nil {
19386					return err
19387				}
19388				rpp.RecoveryPointTime = &recoveryPointTime
19389			}
19390		case "recoveryPointType":
19391			if v != nil {
19392				var recoveryPointType string
19393				err = json.Unmarshal(*v, &recoveryPointType)
19394				if err != nil {
19395					return err
19396				}
19397				rpp.RecoveryPointType = &recoveryPointType
19398			}
19399		case "providerSpecificDetails":
19400			if v != nil {
19401				providerSpecificDetails, err := unmarshalBasicProviderSpecificRecoveryPointDetails(*v)
19402				if err != nil {
19403					return err
19404				}
19405				rpp.ProviderSpecificDetails = providerSpecificDetails
19406			}
19407		}
19408	}
19409
19410	return nil
19411}
19412
19413// BasicRecoveryProximityPlacementGroupCustomDetails recovery Proximity placement group custom input.
19414type BasicRecoveryProximityPlacementGroupCustomDetails interface {
19415	AsExistingRecoveryProximityPlacementGroup() (*ExistingRecoveryProximityPlacementGroup, bool)
19416	AsRecoveryProximityPlacementGroupCustomDetails() (*RecoveryProximityPlacementGroupCustomDetails, bool)
19417}
19418
19419// RecoveryProximityPlacementGroupCustomDetails recovery Proximity placement group custom input.
19420type RecoveryProximityPlacementGroupCustomDetails struct {
19421	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeRecoveryProximityPlacementGroupCustomDetails', 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting'
19422	ResourceType ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetails `json:"resourceType,omitempty"`
19423}
19424
19425func unmarshalBasicRecoveryProximityPlacementGroupCustomDetails(body []byte) (BasicRecoveryProximityPlacementGroupCustomDetails, error) {
19426	var m map[string]interface{}
19427	err := json.Unmarshal(body, &m)
19428	if err != nil {
19429		return nil, err
19430	}
19431
19432	switch m["resourceType"] {
19433	case string(ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting):
19434		var erppg ExistingRecoveryProximityPlacementGroup
19435		err := json.Unmarshal(body, &erppg)
19436		return erppg, err
19437	default:
19438		var rppgcd RecoveryProximityPlacementGroupCustomDetails
19439		err := json.Unmarshal(body, &rppgcd)
19440		return rppgcd, err
19441	}
19442}
19443func unmarshalBasicRecoveryProximityPlacementGroupCustomDetailsArray(body []byte) ([]BasicRecoveryProximityPlacementGroupCustomDetails, error) {
19444	var rawMessages []*json.RawMessage
19445	err := json.Unmarshal(body, &rawMessages)
19446	if err != nil {
19447		return nil, err
19448	}
19449
19450	rppgcdArray := make([]BasicRecoveryProximityPlacementGroupCustomDetails, len(rawMessages))
19451
19452	for index, rawMessage := range rawMessages {
19453		rppgcd, err := unmarshalBasicRecoveryProximityPlacementGroupCustomDetails(*rawMessage)
19454		if err != nil {
19455			return nil, err
19456		}
19457		rppgcdArray[index] = rppgcd
19458	}
19459	return rppgcdArray, nil
19460}
19461
19462// MarshalJSON is the custom marshaler for RecoveryProximityPlacementGroupCustomDetails.
19463func (rppgcd RecoveryProximityPlacementGroupCustomDetails) MarshalJSON() ([]byte, error) {
19464	rppgcd.ResourceType = ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeRecoveryProximityPlacementGroupCustomDetails
19465	objectMap := make(map[string]interface{})
19466	if rppgcd.ResourceType != "" {
19467		objectMap["resourceType"] = rppgcd.ResourceType
19468	}
19469	return json.Marshal(objectMap)
19470}
19471
19472// AsExistingRecoveryProximityPlacementGroup is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for RecoveryProximityPlacementGroupCustomDetails.
19473func (rppgcd RecoveryProximityPlacementGroupCustomDetails) AsExistingRecoveryProximityPlacementGroup() (*ExistingRecoveryProximityPlacementGroup, bool) {
19474	return nil, false
19475}
19476
19477// AsRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for RecoveryProximityPlacementGroupCustomDetails.
19478func (rppgcd RecoveryProximityPlacementGroupCustomDetails) AsRecoveryProximityPlacementGroupCustomDetails() (*RecoveryProximityPlacementGroupCustomDetails, bool) {
19479	return &rppgcd, true
19480}
19481
19482// AsBasicRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for RecoveryProximityPlacementGroupCustomDetails.
19483func (rppgcd RecoveryProximityPlacementGroupCustomDetails) AsBasicRecoveryProximityPlacementGroupCustomDetails() (BasicRecoveryProximityPlacementGroupCustomDetails, bool) {
19484	return &rppgcd, true
19485}
19486
19487// BasicRecoveryResourceGroupCustomDetails recovery Resource Group custom input.
19488type BasicRecoveryResourceGroupCustomDetails interface {
19489	AsExistingRecoveryRecoveryResourceGroup() (*ExistingRecoveryRecoveryResourceGroup, bool)
19490	AsRecoveryResourceGroupCustomDetails() (*RecoveryResourceGroupCustomDetails, bool)
19491}
19492
19493// RecoveryResourceGroupCustomDetails recovery Resource Group custom input.
19494type RecoveryResourceGroupCustomDetails struct {
19495	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeRecoveryResourceGroupCustomDetails', 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting'
19496	ResourceType ResourceTypeBasicRecoveryResourceGroupCustomDetails `json:"resourceType,omitempty"`
19497}
19498
19499func unmarshalBasicRecoveryResourceGroupCustomDetails(body []byte) (BasicRecoveryResourceGroupCustomDetails, error) {
19500	var m map[string]interface{}
19501	err := json.Unmarshal(body, &m)
19502	if err != nil {
19503		return nil, err
19504	}
19505
19506	switch m["resourceType"] {
19507	case string(ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting):
19508		var errrg ExistingRecoveryRecoveryResourceGroup
19509		err := json.Unmarshal(body, &errrg)
19510		return errrg, err
19511	default:
19512		var rrgcd RecoveryResourceGroupCustomDetails
19513		err := json.Unmarshal(body, &rrgcd)
19514		return rrgcd, err
19515	}
19516}
19517func unmarshalBasicRecoveryResourceGroupCustomDetailsArray(body []byte) ([]BasicRecoveryResourceGroupCustomDetails, error) {
19518	var rawMessages []*json.RawMessage
19519	err := json.Unmarshal(body, &rawMessages)
19520	if err != nil {
19521		return nil, err
19522	}
19523
19524	rrgcdArray := make([]BasicRecoveryResourceGroupCustomDetails, len(rawMessages))
19525
19526	for index, rawMessage := range rawMessages {
19527		rrgcd, err := unmarshalBasicRecoveryResourceGroupCustomDetails(*rawMessage)
19528		if err != nil {
19529			return nil, err
19530		}
19531		rrgcdArray[index] = rrgcd
19532	}
19533	return rrgcdArray, nil
19534}
19535
19536// MarshalJSON is the custom marshaler for RecoveryResourceGroupCustomDetails.
19537func (rrgcd RecoveryResourceGroupCustomDetails) MarshalJSON() ([]byte, error) {
19538	rrgcd.ResourceType = ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeRecoveryResourceGroupCustomDetails
19539	objectMap := make(map[string]interface{})
19540	if rrgcd.ResourceType != "" {
19541		objectMap["resourceType"] = rrgcd.ResourceType
19542	}
19543	return json.Marshal(objectMap)
19544}
19545
19546// AsExistingRecoveryRecoveryResourceGroup is the BasicRecoveryResourceGroupCustomDetails implementation for RecoveryResourceGroupCustomDetails.
19547func (rrgcd RecoveryResourceGroupCustomDetails) AsExistingRecoveryRecoveryResourceGroup() (*ExistingRecoveryRecoveryResourceGroup, bool) {
19548	return nil, false
19549}
19550
19551// AsRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for RecoveryResourceGroupCustomDetails.
19552func (rrgcd RecoveryResourceGroupCustomDetails) AsRecoveryResourceGroupCustomDetails() (*RecoveryResourceGroupCustomDetails, bool) {
19553	return &rrgcd, true
19554}
19555
19556// AsBasicRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for RecoveryResourceGroupCustomDetails.
19557func (rrgcd RecoveryResourceGroupCustomDetails) AsBasicRecoveryResourceGroupCustomDetails() (BasicRecoveryResourceGroupCustomDetails, bool) {
19558	return &rrgcd, true
19559}
19560
19561// RecoveryServicesProvider provider details.
19562type RecoveryServicesProvider struct {
19563	autorest.Response `json:"-"`
19564	// Properties - Provider properties.
19565	Properties *RecoveryServicesProviderProperties `json:"properties,omitempty"`
19566	// ID - READ-ONLY; Resource Id
19567	ID *string `json:"id,omitempty"`
19568	// Name - READ-ONLY; Resource Name
19569	Name *string `json:"name,omitempty"`
19570	// Type - READ-ONLY; Resource Type
19571	Type *string `json:"type,omitempty"`
19572	// Location - Resource Location
19573	Location *string `json:"location,omitempty"`
19574}
19575
19576// MarshalJSON is the custom marshaler for RecoveryServicesProvider.
19577func (rsp RecoveryServicesProvider) MarshalJSON() ([]byte, error) {
19578	objectMap := make(map[string]interface{})
19579	if rsp.Properties != nil {
19580		objectMap["properties"] = rsp.Properties
19581	}
19582	if rsp.Location != nil {
19583		objectMap["location"] = rsp.Location
19584	}
19585	return json.Marshal(objectMap)
19586}
19587
19588// RecoveryServicesProviderCollection collection of providers.
19589type RecoveryServicesProviderCollection struct {
19590	autorest.Response `json:"-"`
19591	// Value - The Servers details.
19592	Value *[]RecoveryServicesProvider `json:"value,omitempty"`
19593	// NextLink - The value of next link.
19594	NextLink *string `json:"nextLink,omitempty"`
19595}
19596
19597// RecoveryServicesProviderCollectionIterator provides access to a complete listing of
19598// RecoveryServicesProvider values.
19599type RecoveryServicesProviderCollectionIterator struct {
19600	i    int
19601	page RecoveryServicesProviderCollectionPage
19602}
19603
19604// NextWithContext advances to the next value.  If there was an error making
19605// the request the iterator does not advance and the error is returned.
19606func (iter *RecoveryServicesProviderCollectionIterator) NextWithContext(ctx context.Context) (err error) {
19607	if tracing.IsEnabled() {
19608		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryServicesProviderCollectionIterator.NextWithContext")
19609		defer func() {
19610			sc := -1
19611			if iter.Response().Response.Response != nil {
19612				sc = iter.Response().Response.Response.StatusCode
19613			}
19614			tracing.EndSpan(ctx, sc, err)
19615		}()
19616	}
19617	iter.i++
19618	if iter.i < len(iter.page.Values()) {
19619		return nil
19620	}
19621	err = iter.page.NextWithContext(ctx)
19622	if err != nil {
19623		iter.i--
19624		return err
19625	}
19626	iter.i = 0
19627	return nil
19628}
19629
19630// Next advances to the next value.  If there was an error making
19631// the request the iterator does not advance and the error is returned.
19632// Deprecated: Use NextWithContext() instead.
19633func (iter *RecoveryServicesProviderCollectionIterator) Next() error {
19634	return iter.NextWithContext(context.Background())
19635}
19636
19637// NotDone returns true if the enumeration should be started or is not yet complete.
19638func (iter RecoveryServicesProviderCollectionIterator) NotDone() bool {
19639	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19640}
19641
19642// Response returns the raw server response from the last page request.
19643func (iter RecoveryServicesProviderCollectionIterator) Response() RecoveryServicesProviderCollection {
19644	return iter.page.Response()
19645}
19646
19647// Value returns the current value or a zero-initialized value if the
19648// iterator has advanced beyond the end of the collection.
19649func (iter RecoveryServicesProviderCollectionIterator) Value() RecoveryServicesProvider {
19650	if !iter.page.NotDone() {
19651		return RecoveryServicesProvider{}
19652	}
19653	return iter.page.Values()[iter.i]
19654}
19655
19656// Creates a new instance of the RecoveryServicesProviderCollectionIterator type.
19657func NewRecoveryServicesProviderCollectionIterator(page RecoveryServicesProviderCollectionPage) RecoveryServicesProviderCollectionIterator {
19658	return RecoveryServicesProviderCollectionIterator{page: page}
19659}
19660
19661// IsEmpty returns true if the ListResult contains no values.
19662func (rspc RecoveryServicesProviderCollection) IsEmpty() bool {
19663	return rspc.Value == nil || len(*rspc.Value) == 0
19664}
19665
19666// hasNextLink returns true if the NextLink is not empty.
19667func (rspc RecoveryServicesProviderCollection) hasNextLink() bool {
19668	return rspc.NextLink != nil && len(*rspc.NextLink) != 0
19669}
19670
19671// recoveryServicesProviderCollectionPreparer prepares a request to retrieve the next set of results.
19672// It returns nil if no more results exist.
19673func (rspc RecoveryServicesProviderCollection) recoveryServicesProviderCollectionPreparer(ctx context.Context) (*http.Request, error) {
19674	if !rspc.hasNextLink() {
19675		return nil, nil
19676	}
19677	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19678		autorest.AsJSON(),
19679		autorest.AsGet(),
19680		autorest.WithBaseURL(to.String(rspc.NextLink)))
19681}
19682
19683// RecoveryServicesProviderCollectionPage contains a page of RecoveryServicesProvider values.
19684type RecoveryServicesProviderCollectionPage struct {
19685	fn   func(context.Context, RecoveryServicesProviderCollection) (RecoveryServicesProviderCollection, error)
19686	rspc RecoveryServicesProviderCollection
19687}
19688
19689// NextWithContext advances to the next page of values.  If there was an error making
19690// the request the page does not advance and the error is returned.
19691func (page *RecoveryServicesProviderCollectionPage) NextWithContext(ctx context.Context) (err error) {
19692	if tracing.IsEnabled() {
19693		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryServicesProviderCollectionPage.NextWithContext")
19694		defer func() {
19695			sc := -1
19696			if page.Response().Response.Response != nil {
19697				sc = page.Response().Response.Response.StatusCode
19698			}
19699			tracing.EndSpan(ctx, sc, err)
19700		}()
19701	}
19702	for {
19703		next, err := page.fn(ctx, page.rspc)
19704		if err != nil {
19705			return err
19706		}
19707		page.rspc = next
19708		if !next.hasNextLink() || !next.IsEmpty() {
19709			break
19710		}
19711	}
19712	return nil
19713}
19714
19715// Next advances to the next page of values.  If there was an error making
19716// the request the page does not advance and the error is returned.
19717// Deprecated: Use NextWithContext() instead.
19718func (page *RecoveryServicesProviderCollectionPage) Next() error {
19719	return page.NextWithContext(context.Background())
19720}
19721
19722// NotDone returns true if the page enumeration should be started or is not yet complete.
19723func (page RecoveryServicesProviderCollectionPage) NotDone() bool {
19724	return !page.rspc.IsEmpty()
19725}
19726
19727// Response returns the raw server response from the last page request.
19728func (page RecoveryServicesProviderCollectionPage) Response() RecoveryServicesProviderCollection {
19729	return page.rspc
19730}
19731
19732// Values returns the slice of values for the current page or nil if there are no values.
19733func (page RecoveryServicesProviderCollectionPage) Values() []RecoveryServicesProvider {
19734	if page.rspc.IsEmpty() {
19735		return nil
19736	}
19737	return *page.rspc.Value
19738}
19739
19740// Creates a new instance of the RecoveryServicesProviderCollectionPage type.
19741func NewRecoveryServicesProviderCollectionPage(cur RecoveryServicesProviderCollection, getNextPage func(context.Context, RecoveryServicesProviderCollection) (RecoveryServicesProviderCollection, error)) RecoveryServicesProviderCollectionPage {
19742	return RecoveryServicesProviderCollectionPage{
19743		fn:   getNextPage,
19744		rspc: cur,
19745	}
19746}
19747
19748// RecoveryServicesProviderProperties recovery services provider properties.
19749type RecoveryServicesProviderProperties struct {
19750	// FabricType - Type of the site.
19751	FabricType *string `json:"fabricType,omitempty"`
19752	// FriendlyName - Friendly name of the DRA.
19753	FriendlyName *string `json:"friendlyName,omitempty"`
19754	// ProviderVersion - The provider version.
19755	ProviderVersion *string `json:"providerVersion,omitempty"`
19756	// ServerVersion - The fabric provider.
19757	ServerVersion *string `json:"serverVersion,omitempty"`
19758	// ProviderVersionState - DRA version status.
19759	ProviderVersionState *string `json:"providerVersionState,omitempty"`
19760	// ProviderVersionExpiryDate - Expiry date of the version.
19761	ProviderVersionExpiryDate *date.Time `json:"providerVersionExpiryDate,omitempty"`
19762	// FabricFriendlyName - The fabric friendly name.
19763	FabricFriendlyName *string `json:"fabricFriendlyName,omitempty"`
19764	// LastHeartBeat - Time when last heartbeat was sent by the DRA.
19765	LastHeartBeat *date.Time `json:"lastHeartBeat,omitempty"`
19766	// ConnectionStatus - A value indicating whether DRA is responsive.
19767	ConnectionStatus *string `json:"connectionStatus,omitempty"`
19768	// ProtectedItemCount - Number of protected VMs currently managed by the DRA.
19769	ProtectedItemCount *int32 `json:"protectedItemCount,omitempty"`
19770	// AllowedScenarios - The scenarios allowed on this provider.
19771	AllowedScenarios *[]string `json:"allowedScenarios,omitempty"`
19772	// HealthErrorDetails - The recovery services provider health error details.
19773	HealthErrorDetails *[]HealthError `json:"healthErrorDetails,omitempty"`
19774	// DraIdentifier - The DRA Id.
19775	DraIdentifier *string `json:"draIdentifier,omitempty"`
19776	// AuthenticationIdentityDetails - The authentication identity details.
19777	AuthenticationIdentityDetails *IdentityProviderDetails `json:"authenticationIdentityDetails,omitempty"`
19778	// ResourceAccessIdentityDetails - The resource access identity details.
19779	ResourceAccessIdentityDetails *IdentityProviderDetails `json:"resourceAccessIdentityDetails,omitempty"`
19780	// ProviderVersionDetails - The provider version details.
19781	ProviderVersionDetails *VersionDetails `json:"providerVersionDetails,omitempty"`
19782}
19783
19784// BasicRecoveryVirtualNetworkCustomDetails recovery Virtual network custom input.
19785type BasicRecoveryVirtualNetworkCustomDetails interface {
19786	AsExistingRecoveryVirtualNetwork() (*ExistingRecoveryVirtualNetwork, bool)
19787	AsRecoveryVirtualNetworkCustomDetails() (*RecoveryVirtualNetworkCustomDetails, bool)
19788}
19789
19790// RecoveryVirtualNetworkCustomDetails recovery Virtual network custom input.
19791type RecoveryVirtualNetworkCustomDetails struct {
19792	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeRecoveryVirtualNetworkCustomDetails', 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting'
19793	ResourceType ResourceTypeBasicRecoveryVirtualNetworkCustomDetails `json:"resourceType,omitempty"`
19794}
19795
19796func unmarshalBasicRecoveryVirtualNetworkCustomDetails(body []byte) (BasicRecoveryVirtualNetworkCustomDetails, error) {
19797	var m map[string]interface{}
19798	err := json.Unmarshal(body, &m)
19799	if err != nil {
19800		return nil, err
19801	}
19802
19803	switch m["resourceType"] {
19804	case string(ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting):
19805		var ervn ExistingRecoveryVirtualNetwork
19806		err := json.Unmarshal(body, &ervn)
19807		return ervn, err
19808	default:
19809		var rvncd RecoveryVirtualNetworkCustomDetails
19810		err := json.Unmarshal(body, &rvncd)
19811		return rvncd, err
19812	}
19813}
19814func unmarshalBasicRecoveryVirtualNetworkCustomDetailsArray(body []byte) ([]BasicRecoveryVirtualNetworkCustomDetails, error) {
19815	var rawMessages []*json.RawMessage
19816	err := json.Unmarshal(body, &rawMessages)
19817	if err != nil {
19818		return nil, err
19819	}
19820
19821	rvncdArray := make([]BasicRecoveryVirtualNetworkCustomDetails, len(rawMessages))
19822
19823	for index, rawMessage := range rawMessages {
19824		rvncd, err := unmarshalBasicRecoveryVirtualNetworkCustomDetails(*rawMessage)
19825		if err != nil {
19826			return nil, err
19827		}
19828		rvncdArray[index] = rvncd
19829	}
19830	return rvncdArray, nil
19831}
19832
19833// MarshalJSON is the custom marshaler for RecoveryVirtualNetworkCustomDetails.
19834func (rvncd RecoveryVirtualNetworkCustomDetails) MarshalJSON() ([]byte, error) {
19835	rvncd.ResourceType = ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeRecoveryVirtualNetworkCustomDetails
19836	objectMap := make(map[string]interface{})
19837	if rvncd.ResourceType != "" {
19838		objectMap["resourceType"] = rvncd.ResourceType
19839	}
19840	return json.Marshal(objectMap)
19841}
19842
19843// AsExistingRecoveryVirtualNetwork is the BasicRecoveryVirtualNetworkCustomDetails implementation for RecoveryVirtualNetworkCustomDetails.
19844func (rvncd RecoveryVirtualNetworkCustomDetails) AsExistingRecoveryVirtualNetwork() (*ExistingRecoveryVirtualNetwork, bool) {
19845	return nil, false
19846}
19847
19848// AsRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for RecoveryVirtualNetworkCustomDetails.
19849func (rvncd RecoveryVirtualNetworkCustomDetails) AsRecoveryVirtualNetworkCustomDetails() (*RecoveryVirtualNetworkCustomDetails, bool) {
19850	return &rvncd, true
19851}
19852
19853// AsBasicRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for RecoveryVirtualNetworkCustomDetails.
19854func (rvncd RecoveryVirtualNetworkCustomDetails) AsBasicRecoveryVirtualNetworkCustomDetails() (BasicRecoveryVirtualNetworkCustomDetails, bool) {
19855	return &rvncd, true
19856}
19857
19858// RemoveDisksInput input for remove disk(s) operation.
19859type RemoveDisksInput struct {
19860	// Properties - Remove disk input properties.
19861	Properties *RemoveDisksInputProperties `json:"properties,omitempty"`
19862}
19863
19864// RemoveDisksInputProperties remove Disk input properties.
19865type RemoveDisksInputProperties struct {
19866	// ProviderSpecificDetails - The ReplicationProviderInput. For HyperVReplicaAzure provider, it will be AzureEnableProtectionInput object. For San provider, it will be SanEnableProtectionInput object. For HyperVReplicaAzure provider, it can be null.
19867	ProviderSpecificDetails BasicRemoveDisksProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
19868}
19869
19870// UnmarshalJSON is the custom unmarshaler for RemoveDisksInputProperties struct.
19871func (rdip *RemoveDisksInputProperties) UnmarshalJSON(body []byte) error {
19872	var m map[string]*json.RawMessage
19873	err := json.Unmarshal(body, &m)
19874	if err != nil {
19875		return err
19876	}
19877	for k, v := range m {
19878		switch k {
19879		case "providerSpecificDetails":
19880			if v != nil {
19881				providerSpecificDetails, err := unmarshalBasicRemoveDisksProviderSpecificInput(*v)
19882				if err != nil {
19883					return err
19884				}
19885				rdip.ProviderSpecificDetails = providerSpecificDetails
19886			}
19887		}
19888	}
19889
19890	return nil
19891}
19892
19893// BasicRemoveDisksProviderSpecificInput remove Disk provider specific input.
19894type BasicRemoveDisksProviderSpecificInput interface {
19895	AsA2ARemoveDisksInput() (*A2ARemoveDisksInput, bool)
19896	AsRemoveDisksProviderSpecificInput() (*RemoveDisksProviderSpecificInput, bool)
19897}
19898
19899// RemoveDisksProviderSpecificInput remove Disk provider specific input.
19900type RemoveDisksProviderSpecificInput struct {
19901	// InstanceType - Possible values include: 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeRemoveDisksProviderSpecificInput', 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A'
19902	InstanceType InstanceTypeBasicRemoveDisksProviderSpecificInput `json:"instanceType,omitempty"`
19903}
19904
19905func unmarshalBasicRemoveDisksProviderSpecificInput(body []byte) (BasicRemoveDisksProviderSpecificInput, error) {
19906	var m map[string]interface{}
19907	err := json.Unmarshal(body, &m)
19908	if err != nil {
19909		return nil, err
19910	}
19911
19912	switch m["instanceType"] {
19913	case string(InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A):
19914		var ardi A2ARemoveDisksInput
19915		err := json.Unmarshal(body, &ardi)
19916		return ardi, err
19917	default:
19918		var rdpsi RemoveDisksProviderSpecificInput
19919		err := json.Unmarshal(body, &rdpsi)
19920		return rdpsi, err
19921	}
19922}
19923func unmarshalBasicRemoveDisksProviderSpecificInputArray(body []byte) ([]BasicRemoveDisksProviderSpecificInput, error) {
19924	var rawMessages []*json.RawMessage
19925	err := json.Unmarshal(body, &rawMessages)
19926	if err != nil {
19927		return nil, err
19928	}
19929
19930	rdpsiArray := make([]BasicRemoveDisksProviderSpecificInput, len(rawMessages))
19931
19932	for index, rawMessage := range rawMessages {
19933		rdpsi, err := unmarshalBasicRemoveDisksProviderSpecificInput(*rawMessage)
19934		if err != nil {
19935			return nil, err
19936		}
19937		rdpsiArray[index] = rdpsi
19938	}
19939	return rdpsiArray, nil
19940}
19941
19942// MarshalJSON is the custom marshaler for RemoveDisksProviderSpecificInput.
19943func (rdpsi RemoveDisksProviderSpecificInput) MarshalJSON() ([]byte, error) {
19944	rdpsi.InstanceType = InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeRemoveDisksProviderSpecificInput
19945	objectMap := make(map[string]interface{})
19946	if rdpsi.InstanceType != "" {
19947		objectMap["instanceType"] = rdpsi.InstanceType
19948	}
19949	return json.Marshal(objectMap)
19950}
19951
19952// AsA2ARemoveDisksInput is the BasicRemoveDisksProviderSpecificInput implementation for RemoveDisksProviderSpecificInput.
19953func (rdpsi RemoveDisksProviderSpecificInput) AsA2ARemoveDisksInput() (*A2ARemoveDisksInput, bool) {
19954	return nil, false
19955}
19956
19957// AsRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for RemoveDisksProviderSpecificInput.
19958func (rdpsi RemoveDisksProviderSpecificInput) AsRemoveDisksProviderSpecificInput() (*RemoveDisksProviderSpecificInput, bool) {
19959	return &rdpsi, true
19960}
19961
19962// AsBasicRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for RemoveDisksProviderSpecificInput.
19963func (rdpsi RemoveDisksProviderSpecificInput) AsBasicRemoveDisksProviderSpecificInput() (BasicRemoveDisksProviderSpecificInput, bool) {
19964	return &rdpsi, true
19965}
19966
19967// RemoveProtectionContainerMappingInput container unpairing input.
19968type RemoveProtectionContainerMappingInput struct {
19969	// Properties - Configure protection input properties.
19970	Properties *RemoveProtectionContainerMappingInputProperties `json:"properties,omitempty"`
19971}
19972
19973// RemoveProtectionContainerMappingInputProperties unpairing input properties.
19974type RemoveProtectionContainerMappingInputProperties struct {
19975	// ProviderSpecificInput - Provider specific input for unpairing.
19976	ProviderSpecificInput *ReplicationProviderContainerUnmappingInput `json:"providerSpecificInput,omitempty"`
19977}
19978
19979// RenewCertificateInput certificate renewal input.
19980type RenewCertificateInput struct {
19981	// Properties - Renew certificate input properties.
19982	Properties *RenewCertificateInputProperties `json:"properties,omitempty"`
19983}
19984
19985// RenewCertificateInputProperties renew Certificate input properties.
19986type RenewCertificateInputProperties struct {
19987	// RenewCertificateType - Renew certificate type.
19988	RenewCertificateType *string `json:"renewCertificateType,omitempty"`
19989}
19990
19991// ReplicationAgentDetails replication agent details.
19992type ReplicationAgentDetails struct {
19993	// ID - READ-ONLY; The replication agent Id.
19994	ID *string `json:"id,omitempty"`
19995	// Name - READ-ONLY; The replication agent name.
19996	Name *string `json:"name,omitempty"`
19997	// Version - READ-ONLY; The replication agent version.
19998	Version *string `json:"version,omitempty"`
19999	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the replication agent.
20000	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
20001	// Health - READ-ONLY; The health of the replication agent. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
20002	Health ProtectionHealth `json:"health,omitempty"`
20003	// HealthErrors - READ-ONLY; The health errors.
20004	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
20005}
20006
20007// MarshalJSON is the custom marshaler for ReplicationAgentDetails.
20008func (rad ReplicationAgentDetails) MarshalJSON() ([]byte, error) {
20009	objectMap := make(map[string]interface{})
20010	return json.Marshal(objectMap)
20011}
20012
20013// ReplicationEligibilityResults replication eligibility results response model.
20014type ReplicationEligibilityResults struct {
20015	autorest.Response `json:"-"`
20016	// Name - READ-ONLY; Gets the name of this object.
20017	Name *string `json:"name,omitempty"`
20018	// Type - READ-ONLY; Gets the object type.
20019	Type *string `json:"type,omitempty"`
20020	// ID - READ-ONLY; Gets Unique ARM identifier for this object.
20021	ID *string `json:"id,omitempty"`
20022	// Properties - READ-ONLY; Gets properties model for replication eligibility results API.
20023	Properties *ReplicationEligibilityResultsProperties `json:"properties,omitempty"`
20024}
20025
20026// MarshalJSON is the custom marshaler for ReplicationEligibilityResults.
20027func (rer ReplicationEligibilityResults) MarshalJSON() ([]byte, error) {
20028	objectMap := make(map[string]interface{})
20029	return json.Marshal(objectMap)
20030}
20031
20032// ReplicationEligibilityResultsCollection replication eligibility results collection response model.
20033type ReplicationEligibilityResultsCollection struct {
20034	autorest.Response `json:"-"`
20035	// Value - The replication eligibility results details.
20036	Value *[]ReplicationEligibilityResults `json:"value,omitempty"`
20037}
20038
20039// ReplicationEligibilityResultsErrorInfo error model that can be exposed to the user.
20040type ReplicationEligibilityResultsErrorInfo struct {
20041	// Code - READ-ONLY; The error code.
20042	Code *string `json:"code,omitempty"`
20043	// Message - READ-ONLY; The error message.
20044	Message *string `json:"message,omitempty"`
20045	// PossibleCauses - READ-ONLY; The possible causes.
20046	PossibleCauses *string `json:"possibleCauses,omitempty"`
20047	// RecommendedAction - READ-ONLY; The recommended action.
20048	RecommendedAction *string `json:"recommendedAction,omitempty"`
20049	// Status - READ-ONLY; The error status.
20050	Status *string `json:"status,omitempty"`
20051}
20052
20053// MarshalJSON is the custom marshaler for ReplicationEligibilityResultsErrorInfo.
20054func (rerei ReplicationEligibilityResultsErrorInfo) MarshalJSON() ([]byte, error) {
20055	objectMap := make(map[string]interface{})
20056	return json.Marshal(objectMap)
20057}
20058
20059// ReplicationEligibilityResultsProperties properties model for replication eligibility results API.
20060type ReplicationEligibilityResultsProperties struct {
20061	// ClientRequestID - READ-ONLY; The client request Id.
20062	ClientRequestID *string `json:"clientRequestId,omitempty"`
20063	// Errors - The error details.
20064	Errors *[]ReplicationEligibilityResultsErrorInfo `json:"errors,omitempty"`
20065}
20066
20067// MarshalJSON is the custom marshaler for ReplicationEligibilityResultsProperties.
20068func (rerp ReplicationEligibilityResultsProperties) MarshalJSON() ([]byte, error) {
20069	objectMap := make(map[string]interface{})
20070	if rerp.Errors != nil {
20071		objectMap["errors"] = rerp.Errors
20072	}
20073	return json.Marshal(objectMap)
20074}
20075
20076// ReplicationFabricsCheckConsistencyFuture an abstraction for monitoring and retrieving the results of a
20077// long-running operation.
20078type ReplicationFabricsCheckConsistencyFuture struct {
20079	azure.FutureAPI
20080	// Result returns the result of the asynchronous operation.
20081	// If the operation has not completed it will return an error.
20082	Result func(ReplicationFabricsClient) (Fabric, error)
20083}
20084
20085// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20086func (future *ReplicationFabricsCheckConsistencyFuture) UnmarshalJSON(body []byte) error {
20087	var azFuture azure.Future
20088	if err := json.Unmarshal(body, &azFuture); err != nil {
20089		return err
20090	}
20091	future.FutureAPI = &azFuture
20092	future.Result = future.result
20093	return nil
20094}
20095
20096// result is the default implementation for ReplicationFabricsCheckConsistencyFuture.Result.
20097func (future *ReplicationFabricsCheckConsistencyFuture) result(client ReplicationFabricsClient) (f Fabric, err error) {
20098	var done bool
20099	done, err = future.DoneWithContext(context.Background(), client)
20100	if err != nil {
20101		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsCheckConsistencyFuture", "Result", future.Response(), "Polling failure")
20102		return
20103	}
20104	if !done {
20105		f.Response.Response = future.Response()
20106		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationFabricsCheckConsistencyFuture")
20107		return
20108	}
20109	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20110	if f.Response.Response, err = future.GetResult(sender); err == nil && f.Response.Response.StatusCode != http.StatusNoContent {
20111		f, err = client.CheckConsistencyResponder(f.Response.Response)
20112		if err != nil {
20113			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsCheckConsistencyFuture", "Result", f.Response.Response, "Failure responding to request")
20114		}
20115	}
20116	return
20117}
20118
20119// ReplicationFabricsCreateFuture an abstraction for monitoring and retrieving the results of a
20120// long-running operation.
20121type ReplicationFabricsCreateFuture struct {
20122	azure.FutureAPI
20123	// Result returns the result of the asynchronous operation.
20124	// If the operation has not completed it will return an error.
20125	Result func(ReplicationFabricsClient) (Fabric, error)
20126}
20127
20128// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20129func (future *ReplicationFabricsCreateFuture) UnmarshalJSON(body []byte) error {
20130	var azFuture azure.Future
20131	if err := json.Unmarshal(body, &azFuture); err != nil {
20132		return err
20133	}
20134	future.FutureAPI = &azFuture
20135	future.Result = future.result
20136	return nil
20137}
20138
20139// result is the default implementation for ReplicationFabricsCreateFuture.Result.
20140func (future *ReplicationFabricsCreateFuture) result(client ReplicationFabricsClient) (f Fabric, err error) {
20141	var done bool
20142	done, err = future.DoneWithContext(context.Background(), client)
20143	if err != nil {
20144		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsCreateFuture", "Result", future.Response(), "Polling failure")
20145		return
20146	}
20147	if !done {
20148		f.Response.Response = future.Response()
20149		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationFabricsCreateFuture")
20150		return
20151	}
20152	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20153	if f.Response.Response, err = future.GetResult(sender); err == nil && f.Response.Response.StatusCode != http.StatusNoContent {
20154		f, err = client.CreateResponder(f.Response.Response)
20155		if err != nil {
20156			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsCreateFuture", "Result", f.Response.Response, "Failure responding to request")
20157		}
20158	}
20159	return
20160}
20161
20162// ReplicationFabricsDeleteFuture an abstraction for monitoring and retrieving the results of a
20163// long-running operation.
20164type ReplicationFabricsDeleteFuture struct {
20165	azure.FutureAPI
20166	// Result returns the result of the asynchronous operation.
20167	// If the operation has not completed it will return an error.
20168	Result func(ReplicationFabricsClient) (autorest.Response, error)
20169}
20170
20171// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20172func (future *ReplicationFabricsDeleteFuture) UnmarshalJSON(body []byte) error {
20173	var azFuture azure.Future
20174	if err := json.Unmarshal(body, &azFuture); err != nil {
20175		return err
20176	}
20177	future.FutureAPI = &azFuture
20178	future.Result = future.result
20179	return nil
20180}
20181
20182// result is the default implementation for ReplicationFabricsDeleteFuture.Result.
20183func (future *ReplicationFabricsDeleteFuture) result(client ReplicationFabricsClient) (ar autorest.Response, err error) {
20184	var done bool
20185	done, err = future.DoneWithContext(context.Background(), client)
20186	if err != nil {
20187		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsDeleteFuture", "Result", future.Response(), "Polling failure")
20188		return
20189	}
20190	if !done {
20191		ar.Response = future.Response()
20192		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationFabricsDeleteFuture")
20193		return
20194	}
20195	ar.Response = future.Response()
20196	return
20197}
20198
20199// ReplicationFabricsMigrateToAadFuture an abstraction for monitoring and retrieving the results of a
20200// long-running operation.
20201type ReplicationFabricsMigrateToAadFuture struct {
20202	azure.FutureAPI
20203	// Result returns the result of the asynchronous operation.
20204	// If the operation has not completed it will return an error.
20205	Result func(ReplicationFabricsClient) (autorest.Response, error)
20206}
20207
20208// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20209func (future *ReplicationFabricsMigrateToAadFuture) UnmarshalJSON(body []byte) error {
20210	var azFuture azure.Future
20211	if err := json.Unmarshal(body, &azFuture); err != nil {
20212		return err
20213	}
20214	future.FutureAPI = &azFuture
20215	future.Result = future.result
20216	return nil
20217}
20218
20219// result is the default implementation for ReplicationFabricsMigrateToAadFuture.Result.
20220func (future *ReplicationFabricsMigrateToAadFuture) result(client ReplicationFabricsClient) (ar autorest.Response, err error) {
20221	var done bool
20222	done, err = future.DoneWithContext(context.Background(), client)
20223	if err != nil {
20224		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsMigrateToAadFuture", "Result", future.Response(), "Polling failure")
20225		return
20226	}
20227	if !done {
20228		ar.Response = future.Response()
20229		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationFabricsMigrateToAadFuture")
20230		return
20231	}
20232	ar.Response = future.Response()
20233	return
20234}
20235
20236// ReplicationFabricsPurgeFuture an abstraction for monitoring and retrieving the results of a long-running
20237// operation.
20238type ReplicationFabricsPurgeFuture struct {
20239	azure.FutureAPI
20240	// Result returns the result of the asynchronous operation.
20241	// If the operation has not completed it will return an error.
20242	Result func(ReplicationFabricsClient) (autorest.Response, error)
20243}
20244
20245// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20246func (future *ReplicationFabricsPurgeFuture) UnmarshalJSON(body []byte) error {
20247	var azFuture azure.Future
20248	if err := json.Unmarshal(body, &azFuture); err != nil {
20249		return err
20250	}
20251	future.FutureAPI = &azFuture
20252	future.Result = future.result
20253	return nil
20254}
20255
20256// result is the default implementation for ReplicationFabricsPurgeFuture.Result.
20257func (future *ReplicationFabricsPurgeFuture) result(client ReplicationFabricsClient) (ar autorest.Response, err error) {
20258	var done bool
20259	done, err = future.DoneWithContext(context.Background(), client)
20260	if err != nil {
20261		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsPurgeFuture", "Result", future.Response(), "Polling failure")
20262		return
20263	}
20264	if !done {
20265		ar.Response = future.Response()
20266		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationFabricsPurgeFuture")
20267		return
20268	}
20269	ar.Response = future.Response()
20270	return
20271}
20272
20273// ReplicationFabricsReassociateGatewayFuture an abstraction for monitoring and retrieving the results of a
20274// long-running operation.
20275type ReplicationFabricsReassociateGatewayFuture struct {
20276	azure.FutureAPI
20277	// Result returns the result of the asynchronous operation.
20278	// If the operation has not completed it will return an error.
20279	Result func(ReplicationFabricsClient) (Fabric, error)
20280}
20281
20282// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20283func (future *ReplicationFabricsReassociateGatewayFuture) UnmarshalJSON(body []byte) error {
20284	var azFuture azure.Future
20285	if err := json.Unmarshal(body, &azFuture); err != nil {
20286		return err
20287	}
20288	future.FutureAPI = &azFuture
20289	future.Result = future.result
20290	return nil
20291}
20292
20293// result is the default implementation for ReplicationFabricsReassociateGatewayFuture.Result.
20294func (future *ReplicationFabricsReassociateGatewayFuture) result(client ReplicationFabricsClient) (f Fabric, err error) {
20295	var done bool
20296	done, err = future.DoneWithContext(context.Background(), client)
20297	if err != nil {
20298		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsReassociateGatewayFuture", "Result", future.Response(), "Polling failure")
20299		return
20300	}
20301	if !done {
20302		f.Response.Response = future.Response()
20303		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationFabricsReassociateGatewayFuture")
20304		return
20305	}
20306	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20307	if f.Response.Response, err = future.GetResult(sender); err == nil && f.Response.Response.StatusCode != http.StatusNoContent {
20308		f, err = client.ReassociateGatewayResponder(f.Response.Response)
20309		if err != nil {
20310			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsReassociateGatewayFuture", "Result", f.Response.Response, "Failure responding to request")
20311		}
20312	}
20313	return
20314}
20315
20316// ReplicationFabricsRenewCertificateFuture an abstraction for monitoring and retrieving the results of a
20317// long-running operation.
20318type ReplicationFabricsRenewCertificateFuture struct {
20319	azure.FutureAPI
20320	// Result returns the result of the asynchronous operation.
20321	// If the operation has not completed it will return an error.
20322	Result func(ReplicationFabricsClient) (Fabric, error)
20323}
20324
20325// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20326func (future *ReplicationFabricsRenewCertificateFuture) UnmarshalJSON(body []byte) error {
20327	var azFuture azure.Future
20328	if err := json.Unmarshal(body, &azFuture); err != nil {
20329		return err
20330	}
20331	future.FutureAPI = &azFuture
20332	future.Result = future.result
20333	return nil
20334}
20335
20336// result is the default implementation for ReplicationFabricsRenewCertificateFuture.Result.
20337func (future *ReplicationFabricsRenewCertificateFuture) result(client ReplicationFabricsClient) (f Fabric, err error) {
20338	var done bool
20339	done, err = future.DoneWithContext(context.Background(), client)
20340	if err != nil {
20341		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsRenewCertificateFuture", "Result", future.Response(), "Polling failure")
20342		return
20343	}
20344	if !done {
20345		f.Response.Response = future.Response()
20346		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationFabricsRenewCertificateFuture")
20347		return
20348	}
20349	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20350	if f.Response.Response, err = future.GetResult(sender); err == nil && f.Response.Response.StatusCode != http.StatusNoContent {
20351		f, err = client.RenewCertificateResponder(f.Response.Response)
20352		if err != nil {
20353			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationFabricsRenewCertificateFuture", "Result", f.Response.Response, "Failure responding to request")
20354		}
20355	}
20356	return
20357}
20358
20359// ReplicationGroupDetails replication group details. This will be used in case of San and Wvr.
20360type ReplicationGroupDetails struct {
20361	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
20362	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
20363}
20364
20365// MarshalJSON is the custom marshaler for ReplicationGroupDetails.
20366func (rgd ReplicationGroupDetails) MarshalJSON() ([]byte, error) {
20367	rgd.InstanceType = InstanceTypeReplicationGroupDetails
20368	objectMap := make(map[string]interface{})
20369	if rgd.InstanceType != "" {
20370		objectMap["instanceType"] = rgd.InstanceType
20371	}
20372	return json.Marshal(objectMap)
20373}
20374
20375// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20376func (rgd ReplicationGroupDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
20377	return nil, false
20378}
20379
20380// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20381func (rgd ReplicationGroupDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
20382	return &rgd, true
20383}
20384
20385// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20386func (rgd ReplicationGroupDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
20387	return nil, false
20388}
20389
20390// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20391func (rgd ReplicationGroupDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
20392	return nil, false
20393}
20394
20395// AsConfigurationSettings is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20396func (rgd ReplicationGroupDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
20397	return nil, false
20398}
20399
20400// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20401func (rgd ReplicationGroupDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
20402	return &rgd, true
20403}
20404
20405// ReplicationJobsCancelFuture an abstraction for monitoring and retrieving the results of a long-running
20406// operation.
20407type ReplicationJobsCancelFuture struct {
20408	azure.FutureAPI
20409	// Result returns the result of the asynchronous operation.
20410	// If the operation has not completed it will return an error.
20411	Result func(ReplicationJobsClient) (Job, error)
20412}
20413
20414// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20415func (future *ReplicationJobsCancelFuture) UnmarshalJSON(body []byte) error {
20416	var azFuture azure.Future
20417	if err := json.Unmarshal(body, &azFuture); err != nil {
20418		return err
20419	}
20420	future.FutureAPI = &azFuture
20421	future.Result = future.result
20422	return nil
20423}
20424
20425// result is the default implementation for ReplicationJobsCancelFuture.Result.
20426func (future *ReplicationJobsCancelFuture) result(client ReplicationJobsClient) (j Job, err error) {
20427	var done bool
20428	done, err = future.DoneWithContext(context.Background(), client)
20429	if err != nil {
20430		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsCancelFuture", "Result", future.Response(), "Polling failure")
20431		return
20432	}
20433	if !done {
20434		j.Response.Response = future.Response()
20435		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationJobsCancelFuture")
20436		return
20437	}
20438	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20439	if j.Response.Response, err = future.GetResult(sender); err == nil && j.Response.Response.StatusCode != http.StatusNoContent {
20440		j, err = client.CancelResponder(j.Response.Response)
20441		if err != nil {
20442			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsCancelFuture", "Result", j.Response.Response, "Failure responding to request")
20443		}
20444	}
20445	return
20446}
20447
20448// ReplicationJobsExportFuture an abstraction for monitoring and retrieving the results of a long-running
20449// operation.
20450type ReplicationJobsExportFuture struct {
20451	azure.FutureAPI
20452	// Result returns the result of the asynchronous operation.
20453	// If the operation has not completed it will return an error.
20454	Result func(ReplicationJobsClient) (Job, error)
20455}
20456
20457// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20458func (future *ReplicationJobsExportFuture) UnmarshalJSON(body []byte) error {
20459	var azFuture azure.Future
20460	if err := json.Unmarshal(body, &azFuture); err != nil {
20461		return err
20462	}
20463	future.FutureAPI = &azFuture
20464	future.Result = future.result
20465	return nil
20466}
20467
20468// result is the default implementation for ReplicationJobsExportFuture.Result.
20469func (future *ReplicationJobsExportFuture) result(client ReplicationJobsClient) (j Job, err error) {
20470	var done bool
20471	done, err = future.DoneWithContext(context.Background(), client)
20472	if err != nil {
20473		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsExportFuture", "Result", future.Response(), "Polling failure")
20474		return
20475	}
20476	if !done {
20477		j.Response.Response = future.Response()
20478		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationJobsExportFuture")
20479		return
20480	}
20481	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20482	if j.Response.Response, err = future.GetResult(sender); err == nil && j.Response.Response.StatusCode != http.StatusNoContent {
20483		j, err = client.ExportResponder(j.Response.Response)
20484		if err != nil {
20485			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsExportFuture", "Result", j.Response.Response, "Failure responding to request")
20486		}
20487	}
20488	return
20489}
20490
20491// ReplicationJobsRestartFuture an abstraction for monitoring and retrieving the results of a long-running
20492// operation.
20493type ReplicationJobsRestartFuture struct {
20494	azure.FutureAPI
20495	// Result returns the result of the asynchronous operation.
20496	// If the operation has not completed it will return an error.
20497	Result func(ReplicationJobsClient) (Job, error)
20498}
20499
20500// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20501func (future *ReplicationJobsRestartFuture) UnmarshalJSON(body []byte) error {
20502	var azFuture azure.Future
20503	if err := json.Unmarshal(body, &azFuture); err != nil {
20504		return err
20505	}
20506	future.FutureAPI = &azFuture
20507	future.Result = future.result
20508	return nil
20509}
20510
20511// result is the default implementation for ReplicationJobsRestartFuture.Result.
20512func (future *ReplicationJobsRestartFuture) result(client ReplicationJobsClient) (j Job, err error) {
20513	var done bool
20514	done, err = future.DoneWithContext(context.Background(), client)
20515	if err != nil {
20516		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsRestartFuture", "Result", future.Response(), "Polling failure")
20517		return
20518	}
20519	if !done {
20520		j.Response.Response = future.Response()
20521		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationJobsRestartFuture")
20522		return
20523	}
20524	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20525	if j.Response.Response, err = future.GetResult(sender); err == nil && j.Response.Response.StatusCode != http.StatusNoContent {
20526		j, err = client.RestartResponder(j.Response.Response)
20527		if err != nil {
20528			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsRestartFuture", "Result", j.Response.Response, "Failure responding to request")
20529		}
20530	}
20531	return
20532}
20533
20534// ReplicationJobsResumeFuture an abstraction for monitoring and retrieving the results of a long-running
20535// operation.
20536type ReplicationJobsResumeFuture struct {
20537	azure.FutureAPI
20538	// Result returns the result of the asynchronous operation.
20539	// If the operation has not completed it will return an error.
20540	Result func(ReplicationJobsClient) (Job, error)
20541}
20542
20543// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20544func (future *ReplicationJobsResumeFuture) UnmarshalJSON(body []byte) error {
20545	var azFuture azure.Future
20546	if err := json.Unmarshal(body, &azFuture); err != nil {
20547		return err
20548	}
20549	future.FutureAPI = &azFuture
20550	future.Result = future.result
20551	return nil
20552}
20553
20554// result is the default implementation for ReplicationJobsResumeFuture.Result.
20555func (future *ReplicationJobsResumeFuture) result(client ReplicationJobsClient) (j Job, err error) {
20556	var done bool
20557	done, err = future.DoneWithContext(context.Background(), client)
20558	if err != nil {
20559		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsResumeFuture", "Result", future.Response(), "Polling failure")
20560		return
20561	}
20562	if !done {
20563		j.Response.Response = future.Response()
20564		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationJobsResumeFuture")
20565		return
20566	}
20567	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20568	if j.Response.Response, err = future.GetResult(sender); err == nil && j.Response.Response.StatusCode != http.StatusNoContent {
20569		j, err = client.ResumeResponder(j.Response.Response)
20570		if err != nil {
20571			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationJobsResumeFuture", "Result", j.Response.Response, "Failure responding to request")
20572		}
20573	}
20574	return
20575}
20576
20577// ReplicationMigrationItemsCreateFuture an abstraction for monitoring and retrieving the results of a
20578// long-running operation.
20579type ReplicationMigrationItemsCreateFuture struct {
20580	azure.FutureAPI
20581	// Result returns the result of the asynchronous operation.
20582	// If the operation has not completed it will return an error.
20583	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20584}
20585
20586// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20587func (future *ReplicationMigrationItemsCreateFuture) UnmarshalJSON(body []byte) error {
20588	var azFuture azure.Future
20589	if err := json.Unmarshal(body, &azFuture); err != nil {
20590		return err
20591	}
20592	future.FutureAPI = &azFuture
20593	future.Result = future.result
20594	return nil
20595}
20596
20597// result is the default implementation for ReplicationMigrationItemsCreateFuture.Result.
20598func (future *ReplicationMigrationItemsCreateFuture) result(client ReplicationMigrationItemsClient) (mi MigrationItem, err error) {
20599	var done bool
20600	done, err = future.DoneWithContext(context.Background(), client)
20601	if err != nil {
20602		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsCreateFuture", "Result", future.Response(), "Polling failure")
20603		return
20604	}
20605	if !done {
20606		mi.Response.Response = future.Response()
20607		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationMigrationItemsCreateFuture")
20608		return
20609	}
20610	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20611	if mi.Response.Response, err = future.GetResult(sender); err == nil && mi.Response.Response.StatusCode != http.StatusNoContent {
20612		mi, err = client.CreateResponder(mi.Response.Response)
20613		if err != nil {
20614			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsCreateFuture", "Result", mi.Response.Response, "Failure responding to request")
20615		}
20616	}
20617	return
20618}
20619
20620// ReplicationMigrationItemsDeleteFuture an abstraction for monitoring and retrieving the results of a
20621// long-running operation.
20622type ReplicationMigrationItemsDeleteFuture struct {
20623	azure.FutureAPI
20624	// Result returns the result of the asynchronous operation.
20625	// If the operation has not completed it will return an error.
20626	Result func(ReplicationMigrationItemsClient) (autorest.Response, error)
20627}
20628
20629// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20630func (future *ReplicationMigrationItemsDeleteFuture) UnmarshalJSON(body []byte) error {
20631	var azFuture azure.Future
20632	if err := json.Unmarshal(body, &azFuture); err != nil {
20633		return err
20634	}
20635	future.FutureAPI = &azFuture
20636	future.Result = future.result
20637	return nil
20638}
20639
20640// result is the default implementation for ReplicationMigrationItemsDeleteFuture.Result.
20641func (future *ReplicationMigrationItemsDeleteFuture) result(client ReplicationMigrationItemsClient) (ar autorest.Response, err error) {
20642	var done bool
20643	done, err = future.DoneWithContext(context.Background(), client)
20644	if err != nil {
20645		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsDeleteFuture", "Result", future.Response(), "Polling failure")
20646		return
20647	}
20648	if !done {
20649		ar.Response = future.Response()
20650		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationMigrationItemsDeleteFuture")
20651		return
20652	}
20653	ar.Response = future.Response()
20654	return
20655}
20656
20657// ReplicationMigrationItemsMigrateFuture an abstraction for monitoring and retrieving the results of a
20658// long-running operation.
20659type ReplicationMigrationItemsMigrateFuture struct {
20660	azure.FutureAPI
20661	// Result returns the result of the asynchronous operation.
20662	// If the operation has not completed it will return an error.
20663	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20664}
20665
20666// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20667func (future *ReplicationMigrationItemsMigrateFuture) UnmarshalJSON(body []byte) error {
20668	var azFuture azure.Future
20669	if err := json.Unmarshal(body, &azFuture); err != nil {
20670		return err
20671	}
20672	future.FutureAPI = &azFuture
20673	future.Result = future.result
20674	return nil
20675}
20676
20677// result is the default implementation for ReplicationMigrationItemsMigrateFuture.Result.
20678func (future *ReplicationMigrationItemsMigrateFuture) result(client ReplicationMigrationItemsClient) (mi MigrationItem, err error) {
20679	var done bool
20680	done, err = future.DoneWithContext(context.Background(), client)
20681	if err != nil {
20682		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsMigrateFuture", "Result", future.Response(), "Polling failure")
20683		return
20684	}
20685	if !done {
20686		mi.Response.Response = future.Response()
20687		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationMigrationItemsMigrateFuture")
20688		return
20689	}
20690	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20691	if mi.Response.Response, err = future.GetResult(sender); err == nil && mi.Response.Response.StatusCode != http.StatusNoContent {
20692		mi, err = client.MigrateResponder(mi.Response.Response)
20693		if err != nil {
20694			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsMigrateFuture", "Result", mi.Response.Response, "Failure responding to request")
20695		}
20696	}
20697	return
20698}
20699
20700// ReplicationMigrationItemsTestMigrateCleanupFuture an abstraction for monitoring and retrieving the
20701// results of a long-running operation.
20702type ReplicationMigrationItemsTestMigrateCleanupFuture struct {
20703	azure.FutureAPI
20704	// Result returns the result of the asynchronous operation.
20705	// If the operation has not completed it will return an error.
20706	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20707}
20708
20709// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20710func (future *ReplicationMigrationItemsTestMigrateCleanupFuture) UnmarshalJSON(body []byte) error {
20711	var azFuture azure.Future
20712	if err := json.Unmarshal(body, &azFuture); err != nil {
20713		return err
20714	}
20715	future.FutureAPI = &azFuture
20716	future.Result = future.result
20717	return nil
20718}
20719
20720// result is the default implementation for ReplicationMigrationItemsTestMigrateCleanupFuture.Result.
20721func (future *ReplicationMigrationItemsTestMigrateCleanupFuture) result(client ReplicationMigrationItemsClient) (mi MigrationItem, err error) {
20722	var done bool
20723	done, err = future.DoneWithContext(context.Background(), client)
20724	if err != nil {
20725		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsTestMigrateCleanupFuture", "Result", future.Response(), "Polling failure")
20726		return
20727	}
20728	if !done {
20729		mi.Response.Response = future.Response()
20730		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationMigrationItemsTestMigrateCleanupFuture")
20731		return
20732	}
20733	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20734	if mi.Response.Response, err = future.GetResult(sender); err == nil && mi.Response.Response.StatusCode != http.StatusNoContent {
20735		mi, err = client.TestMigrateCleanupResponder(mi.Response.Response)
20736		if err != nil {
20737			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsTestMigrateCleanupFuture", "Result", mi.Response.Response, "Failure responding to request")
20738		}
20739	}
20740	return
20741}
20742
20743// ReplicationMigrationItemsTestMigrateFuture an abstraction for monitoring and retrieving the results of a
20744// long-running operation.
20745type ReplicationMigrationItemsTestMigrateFuture struct {
20746	azure.FutureAPI
20747	// Result returns the result of the asynchronous operation.
20748	// If the operation has not completed it will return an error.
20749	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20750}
20751
20752// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20753func (future *ReplicationMigrationItemsTestMigrateFuture) UnmarshalJSON(body []byte) error {
20754	var azFuture azure.Future
20755	if err := json.Unmarshal(body, &azFuture); err != nil {
20756		return err
20757	}
20758	future.FutureAPI = &azFuture
20759	future.Result = future.result
20760	return nil
20761}
20762
20763// result is the default implementation for ReplicationMigrationItemsTestMigrateFuture.Result.
20764func (future *ReplicationMigrationItemsTestMigrateFuture) result(client ReplicationMigrationItemsClient) (mi MigrationItem, err error) {
20765	var done bool
20766	done, err = future.DoneWithContext(context.Background(), client)
20767	if err != nil {
20768		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsTestMigrateFuture", "Result", future.Response(), "Polling failure")
20769		return
20770	}
20771	if !done {
20772		mi.Response.Response = future.Response()
20773		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationMigrationItemsTestMigrateFuture")
20774		return
20775	}
20776	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20777	if mi.Response.Response, err = future.GetResult(sender); err == nil && mi.Response.Response.StatusCode != http.StatusNoContent {
20778		mi, err = client.TestMigrateResponder(mi.Response.Response)
20779		if err != nil {
20780			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsTestMigrateFuture", "Result", mi.Response.Response, "Failure responding to request")
20781		}
20782	}
20783	return
20784}
20785
20786// ReplicationMigrationItemsUpdateFuture an abstraction for monitoring and retrieving the results of a
20787// long-running operation.
20788type ReplicationMigrationItemsUpdateFuture struct {
20789	azure.FutureAPI
20790	// Result returns the result of the asynchronous operation.
20791	// If the operation has not completed it will return an error.
20792	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20793}
20794
20795// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20796func (future *ReplicationMigrationItemsUpdateFuture) UnmarshalJSON(body []byte) error {
20797	var azFuture azure.Future
20798	if err := json.Unmarshal(body, &azFuture); err != nil {
20799		return err
20800	}
20801	future.FutureAPI = &azFuture
20802	future.Result = future.result
20803	return nil
20804}
20805
20806// result is the default implementation for ReplicationMigrationItemsUpdateFuture.Result.
20807func (future *ReplicationMigrationItemsUpdateFuture) result(client ReplicationMigrationItemsClient) (mi MigrationItem, err error) {
20808	var done bool
20809	done, err = future.DoneWithContext(context.Background(), client)
20810	if err != nil {
20811		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsUpdateFuture", "Result", future.Response(), "Polling failure")
20812		return
20813	}
20814	if !done {
20815		mi.Response.Response = future.Response()
20816		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationMigrationItemsUpdateFuture")
20817		return
20818	}
20819	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20820	if mi.Response.Response, err = future.GetResult(sender); err == nil && mi.Response.Response.StatusCode != http.StatusNoContent {
20821		mi, err = client.UpdateResponder(mi.Response.Response)
20822		if err != nil {
20823			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationMigrationItemsUpdateFuture", "Result", mi.Response.Response, "Failure responding to request")
20824		}
20825	}
20826	return
20827}
20828
20829// ReplicationNetworkMappingsCreateFuture an abstraction for monitoring and retrieving the results of a
20830// long-running operation.
20831type ReplicationNetworkMappingsCreateFuture struct {
20832	azure.FutureAPI
20833	// Result returns the result of the asynchronous operation.
20834	// If the operation has not completed it will return an error.
20835	Result func(ReplicationNetworkMappingsClient) (NetworkMapping, error)
20836}
20837
20838// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20839func (future *ReplicationNetworkMappingsCreateFuture) UnmarshalJSON(body []byte) error {
20840	var azFuture azure.Future
20841	if err := json.Unmarshal(body, &azFuture); err != nil {
20842		return err
20843	}
20844	future.FutureAPI = &azFuture
20845	future.Result = future.result
20846	return nil
20847}
20848
20849// result is the default implementation for ReplicationNetworkMappingsCreateFuture.Result.
20850func (future *ReplicationNetworkMappingsCreateFuture) result(client ReplicationNetworkMappingsClient) (nm NetworkMapping, err error) {
20851	var done bool
20852	done, err = future.DoneWithContext(context.Background(), client)
20853	if err != nil {
20854		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationNetworkMappingsCreateFuture", "Result", future.Response(), "Polling failure")
20855		return
20856	}
20857	if !done {
20858		nm.Response.Response = future.Response()
20859		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationNetworkMappingsCreateFuture")
20860		return
20861	}
20862	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20863	if nm.Response.Response, err = future.GetResult(sender); err == nil && nm.Response.Response.StatusCode != http.StatusNoContent {
20864		nm, err = client.CreateResponder(nm.Response.Response)
20865		if err != nil {
20866			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationNetworkMappingsCreateFuture", "Result", nm.Response.Response, "Failure responding to request")
20867		}
20868	}
20869	return
20870}
20871
20872// ReplicationNetworkMappingsDeleteFuture an abstraction for monitoring and retrieving the results of a
20873// long-running operation.
20874type ReplicationNetworkMappingsDeleteFuture struct {
20875	azure.FutureAPI
20876	// Result returns the result of the asynchronous operation.
20877	// If the operation has not completed it will return an error.
20878	Result func(ReplicationNetworkMappingsClient) (autorest.Response, error)
20879}
20880
20881// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20882func (future *ReplicationNetworkMappingsDeleteFuture) UnmarshalJSON(body []byte) error {
20883	var azFuture azure.Future
20884	if err := json.Unmarshal(body, &azFuture); err != nil {
20885		return err
20886	}
20887	future.FutureAPI = &azFuture
20888	future.Result = future.result
20889	return nil
20890}
20891
20892// result is the default implementation for ReplicationNetworkMappingsDeleteFuture.Result.
20893func (future *ReplicationNetworkMappingsDeleteFuture) result(client ReplicationNetworkMappingsClient) (ar autorest.Response, err error) {
20894	var done bool
20895	done, err = future.DoneWithContext(context.Background(), client)
20896	if err != nil {
20897		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationNetworkMappingsDeleteFuture", "Result", future.Response(), "Polling failure")
20898		return
20899	}
20900	if !done {
20901		ar.Response = future.Response()
20902		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationNetworkMappingsDeleteFuture")
20903		return
20904	}
20905	ar.Response = future.Response()
20906	return
20907}
20908
20909// ReplicationNetworkMappingsUpdateFuture an abstraction for monitoring and retrieving the results of a
20910// long-running operation.
20911type ReplicationNetworkMappingsUpdateFuture struct {
20912	azure.FutureAPI
20913	// Result returns the result of the asynchronous operation.
20914	// If the operation has not completed it will return an error.
20915	Result func(ReplicationNetworkMappingsClient) (NetworkMapping, error)
20916}
20917
20918// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20919func (future *ReplicationNetworkMappingsUpdateFuture) UnmarshalJSON(body []byte) error {
20920	var azFuture azure.Future
20921	if err := json.Unmarshal(body, &azFuture); err != nil {
20922		return err
20923	}
20924	future.FutureAPI = &azFuture
20925	future.Result = future.result
20926	return nil
20927}
20928
20929// result is the default implementation for ReplicationNetworkMappingsUpdateFuture.Result.
20930func (future *ReplicationNetworkMappingsUpdateFuture) result(client ReplicationNetworkMappingsClient) (nm NetworkMapping, err error) {
20931	var done bool
20932	done, err = future.DoneWithContext(context.Background(), client)
20933	if err != nil {
20934		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationNetworkMappingsUpdateFuture", "Result", future.Response(), "Polling failure")
20935		return
20936	}
20937	if !done {
20938		nm.Response.Response = future.Response()
20939		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationNetworkMappingsUpdateFuture")
20940		return
20941	}
20942	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20943	if nm.Response.Response, err = future.GetResult(sender); err == nil && nm.Response.Response.StatusCode != http.StatusNoContent {
20944		nm, err = client.UpdateResponder(nm.Response.Response)
20945		if err != nil {
20946			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationNetworkMappingsUpdateFuture", "Result", nm.Response.Response, "Failure responding to request")
20947		}
20948	}
20949	return
20950}
20951
20952// ReplicationPoliciesCreateFuture an abstraction for monitoring and retrieving the results of a
20953// long-running operation.
20954type ReplicationPoliciesCreateFuture struct {
20955	azure.FutureAPI
20956	// Result returns the result of the asynchronous operation.
20957	// If the operation has not completed it will return an error.
20958	Result func(ReplicationPoliciesClient) (Policy, error)
20959}
20960
20961// UnmarshalJSON is the custom unmarshaller for CreateFuture.
20962func (future *ReplicationPoliciesCreateFuture) UnmarshalJSON(body []byte) error {
20963	var azFuture azure.Future
20964	if err := json.Unmarshal(body, &azFuture); err != nil {
20965		return err
20966	}
20967	future.FutureAPI = &azFuture
20968	future.Result = future.result
20969	return nil
20970}
20971
20972// result is the default implementation for ReplicationPoliciesCreateFuture.Result.
20973func (future *ReplicationPoliciesCreateFuture) result(client ReplicationPoliciesClient) (p Policy, err error) {
20974	var done bool
20975	done, err = future.DoneWithContext(context.Background(), client)
20976	if err != nil {
20977		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationPoliciesCreateFuture", "Result", future.Response(), "Polling failure")
20978		return
20979	}
20980	if !done {
20981		p.Response.Response = future.Response()
20982		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationPoliciesCreateFuture")
20983		return
20984	}
20985	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
20986	if p.Response.Response, err = future.GetResult(sender); err == nil && p.Response.Response.StatusCode != http.StatusNoContent {
20987		p, err = client.CreateResponder(p.Response.Response)
20988		if err != nil {
20989			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationPoliciesCreateFuture", "Result", p.Response.Response, "Failure responding to request")
20990		}
20991	}
20992	return
20993}
20994
20995// ReplicationPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
20996// long-running operation.
20997type ReplicationPoliciesDeleteFuture struct {
20998	azure.FutureAPI
20999	// Result returns the result of the asynchronous operation.
21000	// If the operation has not completed it will return an error.
21001	Result func(ReplicationPoliciesClient) (autorest.Response, error)
21002}
21003
21004// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21005func (future *ReplicationPoliciesDeleteFuture) UnmarshalJSON(body []byte) error {
21006	var azFuture azure.Future
21007	if err := json.Unmarshal(body, &azFuture); err != nil {
21008		return err
21009	}
21010	future.FutureAPI = &azFuture
21011	future.Result = future.result
21012	return nil
21013}
21014
21015// result is the default implementation for ReplicationPoliciesDeleteFuture.Result.
21016func (future *ReplicationPoliciesDeleteFuture) result(client ReplicationPoliciesClient) (ar autorest.Response, err error) {
21017	var done bool
21018	done, err = future.DoneWithContext(context.Background(), client)
21019	if err != nil {
21020		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
21021		return
21022	}
21023	if !done {
21024		ar.Response = future.Response()
21025		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationPoliciesDeleteFuture")
21026		return
21027	}
21028	ar.Response = future.Response()
21029	return
21030}
21031
21032// ReplicationPoliciesUpdateFuture an abstraction for monitoring and retrieving the results of a
21033// long-running operation.
21034type ReplicationPoliciesUpdateFuture struct {
21035	azure.FutureAPI
21036	// Result returns the result of the asynchronous operation.
21037	// If the operation has not completed it will return an error.
21038	Result func(ReplicationPoliciesClient) (Policy, error)
21039}
21040
21041// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21042func (future *ReplicationPoliciesUpdateFuture) UnmarshalJSON(body []byte) error {
21043	var azFuture azure.Future
21044	if err := json.Unmarshal(body, &azFuture); err != nil {
21045		return err
21046	}
21047	future.FutureAPI = &azFuture
21048	future.Result = future.result
21049	return nil
21050}
21051
21052// result is the default implementation for ReplicationPoliciesUpdateFuture.Result.
21053func (future *ReplicationPoliciesUpdateFuture) result(client ReplicationPoliciesClient) (p Policy, err error) {
21054	var done bool
21055	done, err = future.DoneWithContext(context.Background(), client)
21056	if err != nil {
21057		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationPoliciesUpdateFuture", "Result", future.Response(), "Polling failure")
21058		return
21059	}
21060	if !done {
21061		p.Response.Response = future.Response()
21062		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationPoliciesUpdateFuture")
21063		return
21064	}
21065	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21066	if p.Response.Response, err = future.GetResult(sender); err == nil && p.Response.Response.StatusCode != http.StatusNoContent {
21067		p, err = client.UpdateResponder(p.Response.Response)
21068		if err != nil {
21069			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationPoliciesUpdateFuture", "Result", p.Response.Response, "Failure responding to request")
21070		}
21071	}
21072	return
21073}
21074
21075// ReplicationProtectedItem replication protected item.
21076type ReplicationProtectedItem struct {
21077	autorest.Response `json:"-"`
21078	// Properties - The custom data.
21079	Properties *ReplicationProtectedItemProperties `json:"properties,omitempty"`
21080	// ID - READ-ONLY; Resource Id
21081	ID *string `json:"id,omitempty"`
21082	// Name - READ-ONLY; Resource Name
21083	Name *string `json:"name,omitempty"`
21084	// Type - READ-ONLY; Resource Type
21085	Type *string `json:"type,omitempty"`
21086	// Location - Resource Location
21087	Location *string `json:"location,omitempty"`
21088}
21089
21090// MarshalJSON is the custom marshaler for ReplicationProtectedItem.
21091func (rpi ReplicationProtectedItem) MarshalJSON() ([]byte, error) {
21092	objectMap := make(map[string]interface{})
21093	if rpi.Properties != nil {
21094		objectMap["properties"] = rpi.Properties
21095	}
21096	if rpi.Location != nil {
21097		objectMap["location"] = rpi.Location
21098	}
21099	return json.Marshal(objectMap)
21100}
21101
21102// ReplicationProtectedItemCollection replication protected item collection.
21103type ReplicationProtectedItemCollection struct {
21104	autorest.Response `json:"-"`
21105	// Value - The Replication protected item details.
21106	Value *[]ReplicationProtectedItem `json:"value,omitempty"`
21107	// NextLink - The value of next link.
21108	NextLink *string `json:"nextLink,omitempty"`
21109}
21110
21111// ReplicationProtectedItemCollectionIterator provides access to a complete listing of
21112// ReplicationProtectedItem values.
21113type ReplicationProtectedItemCollectionIterator struct {
21114	i    int
21115	page ReplicationProtectedItemCollectionPage
21116}
21117
21118// NextWithContext advances to the next value.  If there was an error making
21119// the request the iterator does not advance and the error is returned.
21120func (iter *ReplicationProtectedItemCollectionIterator) NextWithContext(ctx context.Context) (err error) {
21121	if tracing.IsEnabled() {
21122		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectedItemCollectionIterator.NextWithContext")
21123		defer func() {
21124			sc := -1
21125			if iter.Response().Response.Response != nil {
21126				sc = iter.Response().Response.Response.StatusCode
21127			}
21128			tracing.EndSpan(ctx, sc, err)
21129		}()
21130	}
21131	iter.i++
21132	if iter.i < len(iter.page.Values()) {
21133		return nil
21134	}
21135	err = iter.page.NextWithContext(ctx)
21136	if err != nil {
21137		iter.i--
21138		return err
21139	}
21140	iter.i = 0
21141	return nil
21142}
21143
21144// Next advances to the next value.  If there was an error making
21145// the request the iterator does not advance and the error is returned.
21146// Deprecated: Use NextWithContext() instead.
21147func (iter *ReplicationProtectedItemCollectionIterator) Next() error {
21148	return iter.NextWithContext(context.Background())
21149}
21150
21151// NotDone returns true if the enumeration should be started or is not yet complete.
21152func (iter ReplicationProtectedItemCollectionIterator) NotDone() bool {
21153	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21154}
21155
21156// Response returns the raw server response from the last page request.
21157func (iter ReplicationProtectedItemCollectionIterator) Response() ReplicationProtectedItemCollection {
21158	return iter.page.Response()
21159}
21160
21161// Value returns the current value or a zero-initialized value if the
21162// iterator has advanced beyond the end of the collection.
21163func (iter ReplicationProtectedItemCollectionIterator) Value() ReplicationProtectedItem {
21164	if !iter.page.NotDone() {
21165		return ReplicationProtectedItem{}
21166	}
21167	return iter.page.Values()[iter.i]
21168}
21169
21170// Creates a new instance of the ReplicationProtectedItemCollectionIterator type.
21171func NewReplicationProtectedItemCollectionIterator(page ReplicationProtectedItemCollectionPage) ReplicationProtectedItemCollectionIterator {
21172	return ReplicationProtectedItemCollectionIterator{page: page}
21173}
21174
21175// IsEmpty returns true if the ListResult contains no values.
21176func (rpic ReplicationProtectedItemCollection) IsEmpty() bool {
21177	return rpic.Value == nil || len(*rpic.Value) == 0
21178}
21179
21180// hasNextLink returns true if the NextLink is not empty.
21181func (rpic ReplicationProtectedItemCollection) hasNextLink() bool {
21182	return rpic.NextLink != nil && len(*rpic.NextLink) != 0
21183}
21184
21185// replicationProtectedItemCollectionPreparer prepares a request to retrieve the next set of results.
21186// It returns nil if no more results exist.
21187func (rpic ReplicationProtectedItemCollection) replicationProtectedItemCollectionPreparer(ctx context.Context) (*http.Request, error) {
21188	if !rpic.hasNextLink() {
21189		return nil, nil
21190	}
21191	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21192		autorest.AsJSON(),
21193		autorest.AsGet(),
21194		autorest.WithBaseURL(to.String(rpic.NextLink)))
21195}
21196
21197// ReplicationProtectedItemCollectionPage contains a page of ReplicationProtectedItem values.
21198type ReplicationProtectedItemCollectionPage struct {
21199	fn   func(context.Context, ReplicationProtectedItemCollection) (ReplicationProtectedItemCollection, error)
21200	rpic ReplicationProtectedItemCollection
21201}
21202
21203// NextWithContext advances to the next page of values.  If there was an error making
21204// the request the page does not advance and the error is returned.
21205func (page *ReplicationProtectedItemCollectionPage) NextWithContext(ctx context.Context) (err error) {
21206	if tracing.IsEnabled() {
21207		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectedItemCollectionPage.NextWithContext")
21208		defer func() {
21209			sc := -1
21210			if page.Response().Response.Response != nil {
21211				sc = page.Response().Response.Response.StatusCode
21212			}
21213			tracing.EndSpan(ctx, sc, err)
21214		}()
21215	}
21216	for {
21217		next, err := page.fn(ctx, page.rpic)
21218		if err != nil {
21219			return err
21220		}
21221		page.rpic = next
21222		if !next.hasNextLink() || !next.IsEmpty() {
21223			break
21224		}
21225	}
21226	return nil
21227}
21228
21229// Next advances to the next page of values.  If there was an error making
21230// the request the page does not advance and the error is returned.
21231// Deprecated: Use NextWithContext() instead.
21232func (page *ReplicationProtectedItemCollectionPage) Next() error {
21233	return page.NextWithContext(context.Background())
21234}
21235
21236// NotDone returns true if the page enumeration should be started or is not yet complete.
21237func (page ReplicationProtectedItemCollectionPage) NotDone() bool {
21238	return !page.rpic.IsEmpty()
21239}
21240
21241// Response returns the raw server response from the last page request.
21242func (page ReplicationProtectedItemCollectionPage) Response() ReplicationProtectedItemCollection {
21243	return page.rpic
21244}
21245
21246// Values returns the slice of values for the current page or nil if there are no values.
21247func (page ReplicationProtectedItemCollectionPage) Values() []ReplicationProtectedItem {
21248	if page.rpic.IsEmpty() {
21249		return nil
21250	}
21251	return *page.rpic.Value
21252}
21253
21254// Creates a new instance of the ReplicationProtectedItemCollectionPage type.
21255func NewReplicationProtectedItemCollectionPage(cur ReplicationProtectedItemCollection, getNextPage func(context.Context, ReplicationProtectedItemCollection) (ReplicationProtectedItemCollection, error)) ReplicationProtectedItemCollectionPage {
21256	return ReplicationProtectedItemCollectionPage{
21257		fn:   getNextPage,
21258		rpic: cur,
21259	}
21260}
21261
21262// ReplicationProtectedItemProperties replication protected item custom data details.
21263type ReplicationProtectedItemProperties struct {
21264	// FriendlyName - The name.
21265	FriendlyName *string `json:"friendlyName,omitempty"`
21266	// ProtectedItemType - The type of protected item type.
21267	ProtectedItemType *string `json:"protectedItemType,omitempty"`
21268	// ProtectableItemID - The protected item ARM Id.
21269	ProtectableItemID *string `json:"protectableItemId,omitempty"`
21270	// RecoveryServicesProviderID - The recovery provider ARM Id.
21271	RecoveryServicesProviderID *string `json:"recoveryServicesProviderId,omitempty"`
21272	// PrimaryFabricFriendlyName - The friendly name of the primary fabric.
21273	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
21274	// PrimaryFabricProvider - The fabric provider of the primary fabric.
21275	PrimaryFabricProvider *string `json:"primaryFabricProvider,omitempty"`
21276	// RecoveryFabricFriendlyName - The friendly name of recovery fabric.
21277	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
21278	// RecoveryFabricID - The Arm Id of recovery fabric.
21279	RecoveryFabricID *string `json:"recoveryFabricId,omitempty"`
21280	// PrimaryProtectionContainerFriendlyName - The name of primary protection container friendly name.
21281	PrimaryProtectionContainerFriendlyName *string `json:"primaryProtectionContainerFriendlyName,omitempty"`
21282	// RecoveryProtectionContainerFriendlyName - The name of recovery container friendly name.
21283	RecoveryProtectionContainerFriendlyName *string `json:"recoveryProtectionContainerFriendlyName,omitempty"`
21284	// ProtectionState - The protection status.
21285	ProtectionState *string `json:"protectionState,omitempty"`
21286	// ProtectionStateDescription - The protection state description.
21287	ProtectionStateDescription *string `json:"protectionStateDescription,omitempty"`
21288	// ActiveLocation - The Current active location of the PE.
21289	ActiveLocation *string `json:"activeLocation,omitempty"`
21290	// TestFailoverState - The Test failover state.
21291	TestFailoverState *string `json:"testFailoverState,omitempty"`
21292	// TestFailoverStateDescription - The Test failover state description.
21293	TestFailoverStateDescription *string `json:"testFailoverStateDescription,omitempty"`
21294	// AllowedOperations - The allowed operations on the Replication protected item.
21295	AllowedOperations *[]string `json:"allowedOperations,omitempty"`
21296	// ReplicationHealth - The consolidated protection health for the VM taking any issues with SRS as well as all the replication units associated with the VM's replication group into account. This is a string representation of the ProtectionHealth enumeration.
21297	ReplicationHealth *string `json:"replicationHealth,omitempty"`
21298	// FailoverHealth - The consolidated failover health for the VM.
21299	FailoverHealth *string `json:"failoverHealth,omitempty"`
21300	// HealthErrors - List of health errors.
21301	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
21302	// PolicyID - The ID of Policy governing this PE.
21303	PolicyID *string `json:"policyId,omitempty"`
21304	// PolicyFriendlyName - The name of Policy governing this PE.
21305	PolicyFriendlyName *string `json:"policyFriendlyName,omitempty"`
21306	// LastSuccessfulFailoverTime - The Last successful failover time.
21307	LastSuccessfulFailoverTime *date.Time `json:"lastSuccessfulFailoverTime,omitempty"`
21308	// LastSuccessfulTestFailoverTime - The Last successful test failover time.
21309	LastSuccessfulTestFailoverTime *date.Time `json:"lastSuccessfulTestFailoverTime,omitempty"`
21310	// CurrentScenario - The current scenario.
21311	CurrentScenario *CurrentScenarioDetails `json:"currentScenario,omitempty"`
21312	// FailoverRecoveryPointID - The recovery point ARM Id to which the Vm was failed over.
21313	FailoverRecoveryPointID *string `json:"failoverRecoveryPointId,omitempty"`
21314	// ProviderSpecificDetails - The Replication provider custom settings.
21315	ProviderSpecificDetails BasicReplicationProviderSpecificSettings `json:"providerSpecificDetails,omitempty"`
21316	// RecoveryContainerID - The recovery container Id.
21317	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
21318}
21319
21320// UnmarshalJSON is the custom unmarshaler for ReplicationProtectedItemProperties struct.
21321func (rpip *ReplicationProtectedItemProperties) UnmarshalJSON(body []byte) error {
21322	var m map[string]*json.RawMessage
21323	err := json.Unmarshal(body, &m)
21324	if err != nil {
21325		return err
21326	}
21327	for k, v := range m {
21328		switch k {
21329		case "friendlyName":
21330			if v != nil {
21331				var friendlyName string
21332				err = json.Unmarshal(*v, &friendlyName)
21333				if err != nil {
21334					return err
21335				}
21336				rpip.FriendlyName = &friendlyName
21337			}
21338		case "protectedItemType":
21339			if v != nil {
21340				var protectedItemType string
21341				err = json.Unmarshal(*v, &protectedItemType)
21342				if err != nil {
21343					return err
21344				}
21345				rpip.ProtectedItemType = &protectedItemType
21346			}
21347		case "protectableItemId":
21348			if v != nil {
21349				var protectableItemID string
21350				err = json.Unmarshal(*v, &protectableItemID)
21351				if err != nil {
21352					return err
21353				}
21354				rpip.ProtectableItemID = &protectableItemID
21355			}
21356		case "recoveryServicesProviderId":
21357			if v != nil {
21358				var recoveryServicesProviderID string
21359				err = json.Unmarshal(*v, &recoveryServicesProviderID)
21360				if err != nil {
21361					return err
21362				}
21363				rpip.RecoveryServicesProviderID = &recoveryServicesProviderID
21364			}
21365		case "primaryFabricFriendlyName":
21366			if v != nil {
21367				var primaryFabricFriendlyName string
21368				err = json.Unmarshal(*v, &primaryFabricFriendlyName)
21369				if err != nil {
21370					return err
21371				}
21372				rpip.PrimaryFabricFriendlyName = &primaryFabricFriendlyName
21373			}
21374		case "primaryFabricProvider":
21375			if v != nil {
21376				var primaryFabricProvider string
21377				err = json.Unmarshal(*v, &primaryFabricProvider)
21378				if err != nil {
21379					return err
21380				}
21381				rpip.PrimaryFabricProvider = &primaryFabricProvider
21382			}
21383		case "recoveryFabricFriendlyName":
21384			if v != nil {
21385				var recoveryFabricFriendlyName string
21386				err = json.Unmarshal(*v, &recoveryFabricFriendlyName)
21387				if err != nil {
21388					return err
21389				}
21390				rpip.RecoveryFabricFriendlyName = &recoveryFabricFriendlyName
21391			}
21392		case "recoveryFabricId":
21393			if v != nil {
21394				var recoveryFabricID string
21395				err = json.Unmarshal(*v, &recoveryFabricID)
21396				if err != nil {
21397					return err
21398				}
21399				rpip.RecoveryFabricID = &recoveryFabricID
21400			}
21401		case "primaryProtectionContainerFriendlyName":
21402			if v != nil {
21403				var primaryProtectionContainerFriendlyName string
21404				err = json.Unmarshal(*v, &primaryProtectionContainerFriendlyName)
21405				if err != nil {
21406					return err
21407				}
21408				rpip.PrimaryProtectionContainerFriendlyName = &primaryProtectionContainerFriendlyName
21409			}
21410		case "recoveryProtectionContainerFriendlyName":
21411			if v != nil {
21412				var recoveryProtectionContainerFriendlyName string
21413				err = json.Unmarshal(*v, &recoveryProtectionContainerFriendlyName)
21414				if err != nil {
21415					return err
21416				}
21417				rpip.RecoveryProtectionContainerFriendlyName = &recoveryProtectionContainerFriendlyName
21418			}
21419		case "protectionState":
21420			if v != nil {
21421				var protectionState string
21422				err = json.Unmarshal(*v, &protectionState)
21423				if err != nil {
21424					return err
21425				}
21426				rpip.ProtectionState = &protectionState
21427			}
21428		case "protectionStateDescription":
21429			if v != nil {
21430				var protectionStateDescription string
21431				err = json.Unmarshal(*v, &protectionStateDescription)
21432				if err != nil {
21433					return err
21434				}
21435				rpip.ProtectionStateDescription = &protectionStateDescription
21436			}
21437		case "activeLocation":
21438			if v != nil {
21439				var activeLocation string
21440				err = json.Unmarshal(*v, &activeLocation)
21441				if err != nil {
21442					return err
21443				}
21444				rpip.ActiveLocation = &activeLocation
21445			}
21446		case "testFailoverState":
21447			if v != nil {
21448				var testFailoverState string
21449				err = json.Unmarshal(*v, &testFailoverState)
21450				if err != nil {
21451					return err
21452				}
21453				rpip.TestFailoverState = &testFailoverState
21454			}
21455		case "testFailoverStateDescription":
21456			if v != nil {
21457				var testFailoverStateDescription string
21458				err = json.Unmarshal(*v, &testFailoverStateDescription)
21459				if err != nil {
21460					return err
21461				}
21462				rpip.TestFailoverStateDescription = &testFailoverStateDescription
21463			}
21464		case "allowedOperations":
21465			if v != nil {
21466				var allowedOperations []string
21467				err = json.Unmarshal(*v, &allowedOperations)
21468				if err != nil {
21469					return err
21470				}
21471				rpip.AllowedOperations = &allowedOperations
21472			}
21473		case "replicationHealth":
21474			if v != nil {
21475				var replicationHealth string
21476				err = json.Unmarshal(*v, &replicationHealth)
21477				if err != nil {
21478					return err
21479				}
21480				rpip.ReplicationHealth = &replicationHealth
21481			}
21482		case "failoverHealth":
21483			if v != nil {
21484				var failoverHealth string
21485				err = json.Unmarshal(*v, &failoverHealth)
21486				if err != nil {
21487					return err
21488				}
21489				rpip.FailoverHealth = &failoverHealth
21490			}
21491		case "healthErrors":
21492			if v != nil {
21493				var healthErrors []HealthError
21494				err = json.Unmarshal(*v, &healthErrors)
21495				if err != nil {
21496					return err
21497				}
21498				rpip.HealthErrors = &healthErrors
21499			}
21500		case "policyId":
21501			if v != nil {
21502				var policyID string
21503				err = json.Unmarshal(*v, &policyID)
21504				if err != nil {
21505					return err
21506				}
21507				rpip.PolicyID = &policyID
21508			}
21509		case "policyFriendlyName":
21510			if v != nil {
21511				var policyFriendlyName string
21512				err = json.Unmarshal(*v, &policyFriendlyName)
21513				if err != nil {
21514					return err
21515				}
21516				rpip.PolicyFriendlyName = &policyFriendlyName
21517			}
21518		case "lastSuccessfulFailoverTime":
21519			if v != nil {
21520				var lastSuccessfulFailoverTime date.Time
21521				err = json.Unmarshal(*v, &lastSuccessfulFailoverTime)
21522				if err != nil {
21523					return err
21524				}
21525				rpip.LastSuccessfulFailoverTime = &lastSuccessfulFailoverTime
21526			}
21527		case "lastSuccessfulTestFailoverTime":
21528			if v != nil {
21529				var lastSuccessfulTestFailoverTime date.Time
21530				err = json.Unmarshal(*v, &lastSuccessfulTestFailoverTime)
21531				if err != nil {
21532					return err
21533				}
21534				rpip.LastSuccessfulTestFailoverTime = &lastSuccessfulTestFailoverTime
21535			}
21536		case "currentScenario":
21537			if v != nil {
21538				var currentScenario CurrentScenarioDetails
21539				err = json.Unmarshal(*v, &currentScenario)
21540				if err != nil {
21541					return err
21542				}
21543				rpip.CurrentScenario = &currentScenario
21544			}
21545		case "failoverRecoveryPointId":
21546			if v != nil {
21547				var failoverRecoveryPointID string
21548				err = json.Unmarshal(*v, &failoverRecoveryPointID)
21549				if err != nil {
21550					return err
21551				}
21552				rpip.FailoverRecoveryPointID = &failoverRecoveryPointID
21553			}
21554		case "providerSpecificDetails":
21555			if v != nil {
21556				providerSpecificDetails, err := unmarshalBasicReplicationProviderSpecificSettings(*v)
21557				if err != nil {
21558					return err
21559				}
21560				rpip.ProviderSpecificDetails = providerSpecificDetails
21561			}
21562		case "recoveryContainerId":
21563			if v != nil {
21564				var recoveryContainerID string
21565				err = json.Unmarshal(*v, &recoveryContainerID)
21566				if err != nil {
21567					return err
21568				}
21569				rpip.RecoveryContainerID = &recoveryContainerID
21570			}
21571		}
21572	}
21573
21574	return nil
21575}
21576
21577// ReplicationProtectedItemsAddDisksFuture an abstraction for monitoring and retrieving the results of a
21578// long-running operation.
21579type ReplicationProtectedItemsAddDisksFuture struct {
21580	azure.FutureAPI
21581	// Result returns the result of the asynchronous operation.
21582	// If the operation has not completed it will return an error.
21583	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21584}
21585
21586// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21587func (future *ReplicationProtectedItemsAddDisksFuture) UnmarshalJSON(body []byte) error {
21588	var azFuture azure.Future
21589	if err := json.Unmarshal(body, &azFuture); err != nil {
21590		return err
21591	}
21592	future.FutureAPI = &azFuture
21593	future.Result = future.result
21594	return nil
21595}
21596
21597// result is the default implementation for ReplicationProtectedItemsAddDisksFuture.Result.
21598func (future *ReplicationProtectedItemsAddDisksFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21599	var done bool
21600	done, err = future.DoneWithContext(context.Background(), client)
21601	if err != nil {
21602		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsAddDisksFuture", "Result", future.Response(), "Polling failure")
21603		return
21604	}
21605	if !done {
21606		rpi.Response.Response = future.Response()
21607		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsAddDisksFuture")
21608		return
21609	}
21610	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21611	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21612		rpi, err = client.AddDisksResponder(rpi.Response.Response)
21613		if err != nil {
21614			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsAddDisksFuture", "Result", rpi.Response.Response, "Failure responding to request")
21615		}
21616	}
21617	return
21618}
21619
21620// ReplicationProtectedItemsApplyRecoveryPointFuture an abstraction for monitoring and retrieving the
21621// results of a long-running operation.
21622type ReplicationProtectedItemsApplyRecoveryPointFuture struct {
21623	azure.FutureAPI
21624	// Result returns the result of the asynchronous operation.
21625	// If the operation has not completed it will return an error.
21626	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21627}
21628
21629// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21630func (future *ReplicationProtectedItemsApplyRecoveryPointFuture) UnmarshalJSON(body []byte) error {
21631	var azFuture azure.Future
21632	if err := json.Unmarshal(body, &azFuture); err != nil {
21633		return err
21634	}
21635	future.FutureAPI = &azFuture
21636	future.Result = future.result
21637	return nil
21638}
21639
21640// result is the default implementation for ReplicationProtectedItemsApplyRecoveryPointFuture.Result.
21641func (future *ReplicationProtectedItemsApplyRecoveryPointFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21642	var done bool
21643	done, err = future.DoneWithContext(context.Background(), client)
21644	if err != nil {
21645		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsApplyRecoveryPointFuture", "Result", future.Response(), "Polling failure")
21646		return
21647	}
21648	if !done {
21649		rpi.Response.Response = future.Response()
21650		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsApplyRecoveryPointFuture")
21651		return
21652	}
21653	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21654	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21655		rpi, err = client.ApplyRecoveryPointResponder(rpi.Response.Response)
21656		if err != nil {
21657			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsApplyRecoveryPointFuture", "Result", rpi.Response.Response, "Failure responding to request")
21658		}
21659	}
21660	return
21661}
21662
21663// ReplicationProtectedItemsCreateFuture an abstraction for monitoring and retrieving the results of a
21664// long-running operation.
21665type ReplicationProtectedItemsCreateFuture struct {
21666	azure.FutureAPI
21667	// Result returns the result of the asynchronous operation.
21668	// If the operation has not completed it will return an error.
21669	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21670}
21671
21672// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21673func (future *ReplicationProtectedItemsCreateFuture) UnmarshalJSON(body []byte) error {
21674	var azFuture azure.Future
21675	if err := json.Unmarshal(body, &azFuture); err != nil {
21676		return err
21677	}
21678	future.FutureAPI = &azFuture
21679	future.Result = future.result
21680	return nil
21681}
21682
21683// result is the default implementation for ReplicationProtectedItemsCreateFuture.Result.
21684func (future *ReplicationProtectedItemsCreateFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21685	var done bool
21686	done, err = future.DoneWithContext(context.Background(), client)
21687	if err != nil {
21688		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsCreateFuture", "Result", future.Response(), "Polling failure")
21689		return
21690	}
21691	if !done {
21692		rpi.Response.Response = future.Response()
21693		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsCreateFuture")
21694		return
21695	}
21696	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21697	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21698		rpi, err = client.CreateResponder(rpi.Response.Response)
21699		if err != nil {
21700			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsCreateFuture", "Result", rpi.Response.Response, "Failure responding to request")
21701		}
21702	}
21703	return
21704}
21705
21706// ReplicationProtectedItemsDeleteFuture an abstraction for monitoring and retrieving the results of a
21707// long-running operation.
21708type ReplicationProtectedItemsDeleteFuture struct {
21709	azure.FutureAPI
21710	// Result returns the result of the asynchronous operation.
21711	// If the operation has not completed it will return an error.
21712	Result func(ReplicationProtectedItemsClient) (autorest.Response, error)
21713}
21714
21715// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21716func (future *ReplicationProtectedItemsDeleteFuture) UnmarshalJSON(body []byte) error {
21717	var azFuture azure.Future
21718	if err := json.Unmarshal(body, &azFuture); err != nil {
21719		return err
21720	}
21721	future.FutureAPI = &azFuture
21722	future.Result = future.result
21723	return nil
21724}
21725
21726// result is the default implementation for ReplicationProtectedItemsDeleteFuture.Result.
21727func (future *ReplicationProtectedItemsDeleteFuture) result(client ReplicationProtectedItemsClient) (ar autorest.Response, err error) {
21728	var done bool
21729	done, err = future.DoneWithContext(context.Background(), client)
21730	if err != nil {
21731		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsDeleteFuture", "Result", future.Response(), "Polling failure")
21732		return
21733	}
21734	if !done {
21735		ar.Response = future.Response()
21736		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsDeleteFuture")
21737		return
21738	}
21739	ar.Response = future.Response()
21740	return
21741}
21742
21743// ReplicationProtectedItemsFailoverCommitFuture an abstraction for monitoring and retrieving the results
21744// of a long-running operation.
21745type ReplicationProtectedItemsFailoverCommitFuture struct {
21746	azure.FutureAPI
21747	// Result returns the result of the asynchronous operation.
21748	// If the operation has not completed it will return an error.
21749	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21750}
21751
21752// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21753func (future *ReplicationProtectedItemsFailoverCommitFuture) UnmarshalJSON(body []byte) error {
21754	var azFuture azure.Future
21755	if err := json.Unmarshal(body, &azFuture); err != nil {
21756		return err
21757	}
21758	future.FutureAPI = &azFuture
21759	future.Result = future.result
21760	return nil
21761}
21762
21763// result is the default implementation for ReplicationProtectedItemsFailoverCommitFuture.Result.
21764func (future *ReplicationProtectedItemsFailoverCommitFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21765	var done bool
21766	done, err = future.DoneWithContext(context.Background(), client)
21767	if err != nil {
21768		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsFailoverCommitFuture", "Result", future.Response(), "Polling failure")
21769		return
21770	}
21771	if !done {
21772		rpi.Response.Response = future.Response()
21773		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsFailoverCommitFuture")
21774		return
21775	}
21776	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21777	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21778		rpi, err = client.FailoverCommitResponder(rpi.Response.Response)
21779		if err != nil {
21780			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsFailoverCommitFuture", "Result", rpi.Response.Response, "Failure responding to request")
21781		}
21782	}
21783	return
21784}
21785
21786// ReplicationProtectedItemsPlannedFailoverFuture an abstraction for monitoring and retrieving the results
21787// of a long-running operation.
21788type ReplicationProtectedItemsPlannedFailoverFuture struct {
21789	azure.FutureAPI
21790	// Result returns the result of the asynchronous operation.
21791	// If the operation has not completed it will return an error.
21792	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21793}
21794
21795// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21796func (future *ReplicationProtectedItemsPlannedFailoverFuture) UnmarshalJSON(body []byte) error {
21797	var azFuture azure.Future
21798	if err := json.Unmarshal(body, &azFuture); err != nil {
21799		return err
21800	}
21801	future.FutureAPI = &azFuture
21802	future.Result = future.result
21803	return nil
21804}
21805
21806// result is the default implementation for ReplicationProtectedItemsPlannedFailoverFuture.Result.
21807func (future *ReplicationProtectedItemsPlannedFailoverFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21808	var done bool
21809	done, err = future.DoneWithContext(context.Background(), client)
21810	if err != nil {
21811		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsPlannedFailoverFuture", "Result", future.Response(), "Polling failure")
21812		return
21813	}
21814	if !done {
21815		rpi.Response.Response = future.Response()
21816		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsPlannedFailoverFuture")
21817		return
21818	}
21819	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21820	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21821		rpi, err = client.PlannedFailoverResponder(rpi.Response.Response)
21822		if err != nil {
21823			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsPlannedFailoverFuture", "Result", rpi.Response.Response, "Failure responding to request")
21824		}
21825	}
21826	return
21827}
21828
21829// ReplicationProtectedItemsPurgeFuture an abstraction for monitoring and retrieving the results of a
21830// long-running operation.
21831type ReplicationProtectedItemsPurgeFuture struct {
21832	azure.FutureAPI
21833	// Result returns the result of the asynchronous operation.
21834	// If the operation has not completed it will return an error.
21835	Result func(ReplicationProtectedItemsClient) (autorest.Response, error)
21836}
21837
21838// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21839func (future *ReplicationProtectedItemsPurgeFuture) UnmarshalJSON(body []byte) error {
21840	var azFuture azure.Future
21841	if err := json.Unmarshal(body, &azFuture); err != nil {
21842		return err
21843	}
21844	future.FutureAPI = &azFuture
21845	future.Result = future.result
21846	return nil
21847}
21848
21849// result is the default implementation for ReplicationProtectedItemsPurgeFuture.Result.
21850func (future *ReplicationProtectedItemsPurgeFuture) result(client ReplicationProtectedItemsClient) (ar autorest.Response, err error) {
21851	var done bool
21852	done, err = future.DoneWithContext(context.Background(), client)
21853	if err != nil {
21854		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsPurgeFuture", "Result", future.Response(), "Polling failure")
21855		return
21856	}
21857	if !done {
21858		ar.Response = future.Response()
21859		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsPurgeFuture")
21860		return
21861	}
21862	ar.Response = future.Response()
21863	return
21864}
21865
21866// ReplicationProtectedItemsRemoveDisksFuture an abstraction for monitoring and retrieving the results of a
21867// long-running operation.
21868type ReplicationProtectedItemsRemoveDisksFuture struct {
21869	azure.FutureAPI
21870	// Result returns the result of the asynchronous operation.
21871	// If the operation has not completed it will return an error.
21872	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21873}
21874
21875// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21876func (future *ReplicationProtectedItemsRemoveDisksFuture) UnmarshalJSON(body []byte) error {
21877	var azFuture azure.Future
21878	if err := json.Unmarshal(body, &azFuture); err != nil {
21879		return err
21880	}
21881	future.FutureAPI = &azFuture
21882	future.Result = future.result
21883	return nil
21884}
21885
21886// result is the default implementation for ReplicationProtectedItemsRemoveDisksFuture.Result.
21887func (future *ReplicationProtectedItemsRemoveDisksFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21888	var done bool
21889	done, err = future.DoneWithContext(context.Background(), client)
21890	if err != nil {
21891		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsRemoveDisksFuture", "Result", future.Response(), "Polling failure")
21892		return
21893	}
21894	if !done {
21895		rpi.Response.Response = future.Response()
21896		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsRemoveDisksFuture")
21897		return
21898	}
21899	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21900	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21901		rpi, err = client.RemoveDisksResponder(rpi.Response.Response)
21902		if err != nil {
21903			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsRemoveDisksFuture", "Result", rpi.Response.Response, "Failure responding to request")
21904		}
21905	}
21906	return
21907}
21908
21909// ReplicationProtectedItemsRepairReplicationFuture an abstraction for monitoring and retrieving the
21910// results of a long-running operation.
21911type ReplicationProtectedItemsRepairReplicationFuture struct {
21912	azure.FutureAPI
21913	// Result returns the result of the asynchronous operation.
21914	// If the operation has not completed it will return an error.
21915	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21916}
21917
21918// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21919func (future *ReplicationProtectedItemsRepairReplicationFuture) UnmarshalJSON(body []byte) error {
21920	var azFuture azure.Future
21921	if err := json.Unmarshal(body, &azFuture); err != nil {
21922		return err
21923	}
21924	future.FutureAPI = &azFuture
21925	future.Result = future.result
21926	return nil
21927}
21928
21929// result is the default implementation for ReplicationProtectedItemsRepairReplicationFuture.Result.
21930func (future *ReplicationProtectedItemsRepairReplicationFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21931	var done bool
21932	done, err = future.DoneWithContext(context.Background(), client)
21933	if err != nil {
21934		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsRepairReplicationFuture", "Result", future.Response(), "Polling failure")
21935		return
21936	}
21937	if !done {
21938		rpi.Response.Response = future.Response()
21939		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsRepairReplicationFuture")
21940		return
21941	}
21942	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21943	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21944		rpi, err = client.RepairReplicationResponder(rpi.Response.Response)
21945		if err != nil {
21946			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsRepairReplicationFuture", "Result", rpi.Response.Response, "Failure responding to request")
21947		}
21948	}
21949	return
21950}
21951
21952// ReplicationProtectedItemsReprotectFuture an abstraction for monitoring and retrieving the results of a
21953// long-running operation.
21954type ReplicationProtectedItemsReprotectFuture struct {
21955	azure.FutureAPI
21956	// Result returns the result of the asynchronous operation.
21957	// If the operation has not completed it will return an error.
21958	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
21959}
21960
21961// UnmarshalJSON is the custom unmarshaller for CreateFuture.
21962func (future *ReplicationProtectedItemsReprotectFuture) UnmarshalJSON(body []byte) error {
21963	var azFuture azure.Future
21964	if err := json.Unmarshal(body, &azFuture); err != nil {
21965		return err
21966	}
21967	future.FutureAPI = &azFuture
21968	future.Result = future.result
21969	return nil
21970}
21971
21972// result is the default implementation for ReplicationProtectedItemsReprotectFuture.Result.
21973func (future *ReplicationProtectedItemsReprotectFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
21974	var done bool
21975	done, err = future.DoneWithContext(context.Background(), client)
21976	if err != nil {
21977		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsReprotectFuture", "Result", future.Response(), "Polling failure")
21978		return
21979	}
21980	if !done {
21981		rpi.Response.Response = future.Response()
21982		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsReprotectFuture")
21983		return
21984	}
21985	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
21986	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
21987		rpi, err = client.ReprotectResponder(rpi.Response.Response)
21988		if err != nil {
21989			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsReprotectFuture", "Result", rpi.Response.Response, "Failure responding to request")
21990		}
21991	}
21992	return
21993}
21994
21995// ReplicationProtectedItemsResolveHealthErrorsFuture an abstraction for monitoring and retrieving the
21996// results of a long-running operation.
21997type ReplicationProtectedItemsResolveHealthErrorsFuture struct {
21998	azure.FutureAPI
21999	// Result returns the result of the asynchronous operation.
22000	// If the operation has not completed it will return an error.
22001	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
22002}
22003
22004// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22005func (future *ReplicationProtectedItemsResolveHealthErrorsFuture) UnmarshalJSON(body []byte) error {
22006	var azFuture azure.Future
22007	if err := json.Unmarshal(body, &azFuture); err != nil {
22008		return err
22009	}
22010	future.FutureAPI = &azFuture
22011	future.Result = future.result
22012	return nil
22013}
22014
22015// result is the default implementation for ReplicationProtectedItemsResolveHealthErrorsFuture.Result.
22016func (future *ReplicationProtectedItemsResolveHealthErrorsFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
22017	var done bool
22018	done, err = future.DoneWithContext(context.Background(), client)
22019	if err != nil {
22020		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsResolveHealthErrorsFuture", "Result", future.Response(), "Polling failure")
22021		return
22022	}
22023	if !done {
22024		rpi.Response.Response = future.Response()
22025		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsResolveHealthErrorsFuture")
22026		return
22027	}
22028	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22029	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
22030		rpi, err = client.ResolveHealthErrorsResponder(rpi.Response.Response)
22031		if err != nil {
22032			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsResolveHealthErrorsFuture", "Result", rpi.Response.Response, "Failure responding to request")
22033		}
22034	}
22035	return
22036}
22037
22038// ReplicationProtectedItemsTestFailoverCleanupFuture an abstraction for monitoring and retrieving the
22039// results of a long-running operation.
22040type ReplicationProtectedItemsTestFailoverCleanupFuture struct {
22041	azure.FutureAPI
22042	// Result returns the result of the asynchronous operation.
22043	// If the operation has not completed it will return an error.
22044	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
22045}
22046
22047// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22048func (future *ReplicationProtectedItemsTestFailoverCleanupFuture) UnmarshalJSON(body []byte) error {
22049	var azFuture azure.Future
22050	if err := json.Unmarshal(body, &azFuture); err != nil {
22051		return err
22052	}
22053	future.FutureAPI = &azFuture
22054	future.Result = future.result
22055	return nil
22056}
22057
22058// result is the default implementation for ReplicationProtectedItemsTestFailoverCleanupFuture.Result.
22059func (future *ReplicationProtectedItemsTestFailoverCleanupFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
22060	var done bool
22061	done, err = future.DoneWithContext(context.Background(), client)
22062	if err != nil {
22063		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsTestFailoverCleanupFuture", "Result", future.Response(), "Polling failure")
22064		return
22065	}
22066	if !done {
22067		rpi.Response.Response = future.Response()
22068		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsTestFailoverCleanupFuture")
22069		return
22070	}
22071	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22072	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
22073		rpi, err = client.TestFailoverCleanupResponder(rpi.Response.Response)
22074		if err != nil {
22075			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsTestFailoverCleanupFuture", "Result", rpi.Response.Response, "Failure responding to request")
22076		}
22077	}
22078	return
22079}
22080
22081// ReplicationProtectedItemsTestFailoverFuture an abstraction for monitoring and retrieving the results of
22082// a long-running operation.
22083type ReplicationProtectedItemsTestFailoverFuture struct {
22084	azure.FutureAPI
22085	// Result returns the result of the asynchronous operation.
22086	// If the operation has not completed it will return an error.
22087	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
22088}
22089
22090// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22091func (future *ReplicationProtectedItemsTestFailoverFuture) UnmarshalJSON(body []byte) error {
22092	var azFuture azure.Future
22093	if err := json.Unmarshal(body, &azFuture); err != nil {
22094		return err
22095	}
22096	future.FutureAPI = &azFuture
22097	future.Result = future.result
22098	return nil
22099}
22100
22101// result is the default implementation for ReplicationProtectedItemsTestFailoverFuture.Result.
22102func (future *ReplicationProtectedItemsTestFailoverFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
22103	var done bool
22104	done, err = future.DoneWithContext(context.Background(), client)
22105	if err != nil {
22106		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsTestFailoverFuture", "Result", future.Response(), "Polling failure")
22107		return
22108	}
22109	if !done {
22110		rpi.Response.Response = future.Response()
22111		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsTestFailoverFuture")
22112		return
22113	}
22114	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22115	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
22116		rpi, err = client.TestFailoverResponder(rpi.Response.Response)
22117		if err != nil {
22118			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsTestFailoverFuture", "Result", rpi.Response.Response, "Failure responding to request")
22119		}
22120	}
22121	return
22122}
22123
22124// ReplicationProtectedItemsUnplannedFailoverFuture an abstraction for monitoring and retrieving the
22125// results of a long-running operation.
22126type ReplicationProtectedItemsUnplannedFailoverFuture struct {
22127	azure.FutureAPI
22128	// Result returns the result of the asynchronous operation.
22129	// If the operation has not completed it will return an error.
22130	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
22131}
22132
22133// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22134func (future *ReplicationProtectedItemsUnplannedFailoverFuture) UnmarshalJSON(body []byte) error {
22135	var azFuture azure.Future
22136	if err := json.Unmarshal(body, &azFuture); err != nil {
22137		return err
22138	}
22139	future.FutureAPI = &azFuture
22140	future.Result = future.result
22141	return nil
22142}
22143
22144// result is the default implementation for ReplicationProtectedItemsUnplannedFailoverFuture.Result.
22145func (future *ReplicationProtectedItemsUnplannedFailoverFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
22146	var done bool
22147	done, err = future.DoneWithContext(context.Background(), client)
22148	if err != nil {
22149		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsUnplannedFailoverFuture", "Result", future.Response(), "Polling failure")
22150		return
22151	}
22152	if !done {
22153		rpi.Response.Response = future.Response()
22154		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsUnplannedFailoverFuture")
22155		return
22156	}
22157	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22158	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
22159		rpi, err = client.UnplannedFailoverResponder(rpi.Response.Response)
22160		if err != nil {
22161			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsUnplannedFailoverFuture", "Result", rpi.Response.Response, "Failure responding to request")
22162		}
22163	}
22164	return
22165}
22166
22167// ReplicationProtectedItemsUpdateFuture an abstraction for monitoring and retrieving the results of a
22168// long-running operation.
22169type ReplicationProtectedItemsUpdateFuture struct {
22170	azure.FutureAPI
22171	// Result returns the result of the asynchronous operation.
22172	// If the operation has not completed it will return an error.
22173	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
22174}
22175
22176// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22177func (future *ReplicationProtectedItemsUpdateFuture) UnmarshalJSON(body []byte) error {
22178	var azFuture azure.Future
22179	if err := json.Unmarshal(body, &azFuture); err != nil {
22180		return err
22181	}
22182	future.FutureAPI = &azFuture
22183	future.Result = future.result
22184	return nil
22185}
22186
22187// result is the default implementation for ReplicationProtectedItemsUpdateFuture.Result.
22188func (future *ReplicationProtectedItemsUpdateFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
22189	var done bool
22190	done, err = future.DoneWithContext(context.Background(), client)
22191	if err != nil {
22192		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsUpdateFuture", "Result", future.Response(), "Polling failure")
22193		return
22194	}
22195	if !done {
22196		rpi.Response.Response = future.Response()
22197		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsUpdateFuture")
22198		return
22199	}
22200	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22201	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
22202		rpi, err = client.UpdateResponder(rpi.Response.Response)
22203		if err != nil {
22204			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsUpdateFuture", "Result", rpi.Response.Response, "Failure responding to request")
22205		}
22206	}
22207	return
22208}
22209
22210// ReplicationProtectedItemsUpdateMobilityServiceFuture an abstraction for monitoring and retrieving the
22211// results of a long-running operation.
22212type ReplicationProtectedItemsUpdateMobilityServiceFuture struct {
22213	azure.FutureAPI
22214	// Result returns the result of the asynchronous operation.
22215	// If the operation has not completed it will return an error.
22216	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
22217}
22218
22219// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22220func (future *ReplicationProtectedItemsUpdateMobilityServiceFuture) UnmarshalJSON(body []byte) error {
22221	var azFuture azure.Future
22222	if err := json.Unmarshal(body, &azFuture); err != nil {
22223		return err
22224	}
22225	future.FutureAPI = &azFuture
22226	future.Result = future.result
22227	return nil
22228}
22229
22230// result is the default implementation for ReplicationProtectedItemsUpdateMobilityServiceFuture.Result.
22231func (future *ReplicationProtectedItemsUpdateMobilityServiceFuture) result(client ReplicationProtectedItemsClient) (rpi ReplicationProtectedItem, err error) {
22232	var done bool
22233	done, err = future.DoneWithContext(context.Background(), client)
22234	if err != nil {
22235		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsUpdateMobilityServiceFuture", "Result", future.Response(), "Polling failure")
22236		return
22237	}
22238	if !done {
22239		rpi.Response.Response = future.Response()
22240		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectedItemsUpdateMobilityServiceFuture")
22241		return
22242	}
22243	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22244	if rpi.Response.Response, err = future.GetResult(sender); err == nil && rpi.Response.Response.StatusCode != http.StatusNoContent {
22245		rpi, err = client.UpdateMobilityServiceResponder(rpi.Response.Response)
22246		if err != nil {
22247			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectedItemsUpdateMobilityServiceFuture", "Result", rpi.Response.Response, "Failure responding to request")
22248		}
22249	}
22250	return
22251}
22252
22253// ReplicationProtectionContainerMappingsCreateFuture an abstraction for monitoring and retrieving the
22254// results of a long-running operation.
22255type ReplicationProtectionContainerMappingsCreateFuture struct {
22256	azure.FutureAPI
22257	// Result returns the result of the asynchronous operation.
22258	// If the operation has not completed it will return an error.
22259	Result func(ReplicationProtectionContainerMappingsClient) (ProtectionContainerMapping, error)
22260}
22261
22262// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22263func (future *ReplicationProtectionContainerMappingsCreateFuture) UnmarshalJSON(body []byte) error {
22264	var azFuture azure.Future
22265	if err := json.Unmarshal(body, &azFuture); err != nil {
22266		return err
22267	}
22268	future.FutureAPI = &azFuture
22269	future.Result = future.result
22270	return nil
22271}
22272
22273// result is the default implementation for ReplicationProtectionContainerMappingsCreateFuture.Result.
22274func (future *ReplicationProtectionContainerMappingsCreateFuture) result(client ReplicationProtectionContainerMappingsClient) (pcm ProtectionContainerMapping, err error) {
22275	var done bool
22276	done, err = future.DoneWithContext(context.Background(), client)
22277	if err != nil {
22278		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainerMappingsCreateFuture", "Result", future.Response(), "Polling failure")
22279		return
22280	}
22281	if !done {
22282		pcm.Response.Response = future.Response()
22283		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainerMappingsCreateFuture")
22284		return
22285	}
22286	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22287	if pcm.Response.Response, err = future.GetResult(sender); err == nil && pcm.Response.Response.StatusCode != http.StatusNoContent {
22288		pcm, err = client.CreateResponder(pcm.Response.Response)
22289		if err != nil {
22290			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainerMappingsCreateFuture", "Result", pcm.Response.Response, "Failure responding to request")
22291		}
22292	}
22293	return
22294}
22295
22296// ReplicationProtectionContainerMappingsDeleteFuture an abstraction for monitoring and retrieving the
22297// results of a long-running operation.
22298type ReplicationProtectionContainerMappingsDeleteFuture struct {
22299	azure.FutureAPI
22300	// Result returns the result of the asynchronous operation.
22301	// If the operation has not completed it will return an error.
22302	Result func(ReplicationProtectionContainerMappingsClient) (autorest.Response, error)
22303}
22304
22305// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22306func (future *ReplicationProtectionContainerMappingsDeleteFuture) UnmarshalJSON(body []byte) error {
22307	var azFuture azure.Future
22308	if err := json.Unmarshal(body, &azFuture); err != nil {
22309		return err
22310	}
22311	future.FutureAPI = &azFuture
22312	future.Result = future.result
22313	return nil
22314}
22315
22316// result is the default implementation for ReplicationProtectionContainerMappingsDeleteFuture.Result.
22317func (future *ReplicationProtectionContainerMappingsDeleteFuture) result(client ReplicationProtectionContainerMappingsClient) (ar autorest.Response, err error) {
22318	var done bool
22319	done, err = future.DoneWithContext(context.Background(), client)
22320	if err != nil {
22321		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainerMappingsDeleteFuture", "Result", future.Response(), "Polling failure")
22322		return
22323	}
22324	if !done {
22325		ar.Response = future.Response()
22326		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainerMappingsDeleteFuture")
22327		return
22328	}
22329	ar.Response = future.Response()
22330	return
22331}
22332
22333// ReplicationProtectionContainerMappingsPurgeFuture an abstraction for monitoring and retrieving the
22334// results of a long-running operation.
22335type ReplicationProtectionContainerMappingsPurgeFuture struct {
22336	azure.FutureAPI
22337	// Result returns the result of the asynchronous operation.
22338	// If the operation has not completed it will return an error.
22339	Result func(ReplicationProtectionContainerMappingsClient) (autorest.Response, error)
22340}
22341
22342// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22343func (future *ReplicationProtectionContainerMappingsPurgeFuture) UnmarshalJSON(body []byte) error {
22344	var azFuture azure.Future
22345	if err := json.Unmarshal(body, &azFuture); err != nil {
22346		return err
22347	}
22348	future.FutureAPI = &azFuture
22349	future.Result = future.result
22350	return nil
22351}
22352
22353// result is the default implementation for ReplicationProtectionContainerMappingsPurgeFuture.Result.
22354func (future *ReplicationProtectionContainerMappingsPurgeFuture) result(client ReplicationProtectionContainerMappingsClient) (ar autorest.Response, err error) {
22355	var done bool
22356	done, err = future.DoneWithContext(context.Background(), client)
22357	if err != nil {
22358		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainerMappingsPurgeFuture", "Result", future.Response(), "Polling failure")
22359		return
22360	}
22361	if !done {
22362		ar.Response = future.Response()
22363		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainerMappingsPurgeFuture")
22364		return
22365	}
22366	ar.Response = future.Response()
22367	return
22368}
22369
22370// ReplicationProtectionContainerMappingsUpdateFuture an abstraction for monitoring and retrieving the
22371// results of a long-running operation.
22372type ReplicationProtectionContainerMappingsUpdateFuture struct {
22373	azure.FutureAPI
22374	// Result returns the result of the asynchronous operation.
22375	// If the operation has not completed it will return an error.
22376	Result func(ReplicationProtectionContainerMappingsClient) (ProtectionContainerMapping, error)
22377}
22378
22379// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22380func (future *ReplicationProtectionContainerMappingsUpdateFuture) UnmarshalJSON(body []byte) error {
22381	var azFuture azure.Future
22382	if err := json.Unmarshal(body, &azFuture); err != nil {
22383		return err
22384	}
22385	future.FutureAPI = &azFuture
22386	future.Result = future.result
22387	return nil
22388}
22389
22390// result is the default implementation for ReplicationProtectionContainerMappingsUpdateFuture.Result.
22391func (future *ReplicationProtectionContainerMappingsUpdateFuture) result(client ReplicationProtectionContainerMappingsClient) (pcm ProtectionContainerMapping, err error) {
22392	var done bool
22393	done, err = future.DoneWithContext(context.Background(), client)
22394	if err != nil {
22395		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainerMappingsUpdateFuture", "Result", future.Response(), "Polling failure")
22396		return
22397	}
22398	if !done {
22399		pcm.Response.Response = future.Response()
22400		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainerMappingsUpdateFuture")
22401		return
22402	}
22403	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22404	if pcm.Response.Response, err = future.GetResult(sender); err == nil && pcm.Response.Response.StatusCode != http.StatusNoContent {
22405		pcm, err = client.UpdateResponder(pcm.Response.Response)
22406		if err != nil {
22407			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainerMappingsUpdateFuture", "Result", pcm.Response.Response, "Failure responding to request")
22408		}
22409	}
22410	return
22411}
22412
22413// ReplicationProtectionContainersCreateFuture an abstraction for monitoring and retrieving the results of
22414// a long-running operation.
22415type ReplicationProtectionContainersCreateFuture struct {
22416	azure.FutureAPI
22417	// Result returns the result of the asynchronous operation.
22418	// If the operation has not completed it will return an error.
22419	Result func(ReplicationProtectionContainersClient) (ProtectionContainer, error)
22420}
22421
22422// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22423func (future *ReplicationProtectionContainersCreateFuture) UnmarshalJSON(body []byte) error {
22424	var azFuture azure.Future
22425	if err := json.Unmarshal(body, &azFuture); err != nil {
22426		return err
22427	}
22428	future.FutureAPI = &azFuture
22429	future.Result = future.result
22430	return nil
22431}
22432
22433// result is the default implementation for ReplicationProtectionContainersCreateFuture.Result.
22434func (future *ReplicationProtectionContainersCreateFuture) result(client ReplicationProtectionContainersClient) (pc ProtectionContainer, err error) {
22435	var done bool
22436	done, err = future.DoneWithContext(context.Background(), client)
22437	if err != nil {
22438		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainersCreateFuture", "Result", future.Response(), "Polling failure")
22439		return
22440	}
22441	if !done {
22442		pc.Response.Response = future.Response()
22443		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainersCreateFuture")
22444		return
22445	}
22446	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22447	if pc.Response.Response, err = future.GetResult(sender); err == nil && pc.Response.Response.StatusCode != http.StatusNoContent {
22448		pc, err = client.CreateResponder(pc.Response.Response)
22449		if err != nil {
22450			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainersCreateFuture", "Result", pc.Response.Response, "Failure responding to request")
22451		}
22452	}
22453	return
22454}
22455
22456// ReplicationProtectionContainersDeleteFuture an abstraction for monitoring and retrieving the results of
22457// a long-running operation.
22458type ReplicationProtectionContainersDeleteFuture struct {
22459	azure.FutureAPI
22460	// Result returns the result of the asynchronous operation.
22461	// If the operation has not completed it will return an error.
22462	Result func(ReplicationProtectionContainersClient) (autorest.Response, error)
22463}
22464
22465// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22466func (future *ReplicationProtectionContainersDeleteFuture) UnmarshalJSON(body []byte) error {
22467	var azFuture azure.Future
22468	if err := json.Unmarshal(body, &azFuture); err != nil {
22469		return err
22470	}
22471	future.FutureAPI = &azFuture
22472	future.Result = future.result
22473	return nil
22474}
22475
22476// result is the default implementation for ReplicationProtectionContainersDeleteFuture.Result.
22477func (future *ReplicationProtectionContainersDeleteFuture) result(client ReplicationProtectionContainersClient) (ar autorest.Response, err error) {
22478	var done bool
22479	done, err = future.DoneWithContext(context.Background(), client)
22480	if err != nil {
22481		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainersDeleteFuture", "Result", future.Response(), "Polling failure")
22482		return
22483	}
22484	if !done {
22485		ar.Response = future.Response()
22486		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainersDeleteFuture")
22487		return
22488	}
22489	ar.Response = future.Response()
22490	return
22491}
22492
22493// ReplicationProtectionContainersDiscoverProtectableItemFuture an abstraction for monitoring and
22494// retrieving the results of a long-running operation.
22495type ReplicationProtectionContainersDiscoverProtectableItemFuture struct {
22496	azure.FutureAPI
22497	// Result returns the result of the asynchronous operation.
22498	// If the operation has not completed it will return an error.
22499	Result func(ReplicationProtectionContainersClient) (ProtectionContainer, error)
22500}
22501
22502// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22503func (future *ReplicationProtectionContainersDiscoverProtectableItemFuture) UnmarshalJSON(body []byte) error {
22504	var azFuture azure.Future
22505	if err := json.Unmarshal(body, &azFuture); err != nil {
22506		return err
22507	}
22508	future.FutureAPI = &azFuture
22509	future.Result = future.result
22510	return nil
22511}
22512
22513// result is the default implementation for ReplicationProtectionContainersDiscoverProtectableItemFuture.Result.
22514func (future *ReplicationProtectionContainersDiscoverProtectableItemFuture) result(client ReplicationProtectionContainersClient) (pc ProtectionContainer, err error) {
22515	var done bool
22516	done, err = future.DoneWithContext(context.Background(), client)
22517	if err != nil {
22518		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainersDiscoverProtectableItemFuture", "Result", future.Response(), "Polling failure")
22519		return
22520	}
22521	if !done {
22522		pc.Response.Response = future.Response()
22523		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainersDiscoverProtectableItemFuture")
22524		return
22525	}
22526	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22527	if pc.Response.Response, err = future.GetResult(sender); err == nil && pc.Response.Response.StatusCode != http.StatusNoContent {
22528		pc, err = client.DiscoverProtectableItemResponder(pc.Response.Response)
22529		if err != nil {
22530			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainersDiscoverProtectableItemFuture", "Result", pc.Response.Response, "Failure responding to request")
22531		}
22532	}
22533	return
22534}
22535
22536// ReplicationProtectionContainersSwitchProtectionFuture an abstraction for monitoring and retrieving the
22537// results of a long-running operation.
22538type ReplicationProtectionContainersSwitchProtectionFuture struct {
22539	azure.FutureAPI
22540	// Result returns the result of the asynchronous operation.
22541	// If the operation has not completed it will return an error.
22542	Result func(ReplicationProtectionContainersClient) (ProtectionContainer, error)
22543}
22544
22545// UnmarshalJSON is the custom unmarshaller for CreateFuture.
22546func (future *ReplicationProtectionContainersSwitchProtectionFuture) UnmarshalJSON(body []byte) error {
22547	var azFuture azure.Future
22548	if err := json.Unmarshal(body, &azFuture); err != nil {
22549		return err
22550	}
22551	future.FutureAPI = &azFuture
22552	future.Result = future.result
22553	return nil
22554}
22555
22556// result is the default implementation for ReplicationProtectionContainersSwitchProtectionFuture.Result.
22557func (future *ReplicationProtectionContainersSwitchProtectionFuture) result(client ReplicationProtectionContainersClient) (pc ProtectionContainer, err error) {
22558	var done bool
22559	done, err = future.DoneWithContext(context.Background(), client)
22560	if err != nil {
22561		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainersSwitchProtectionFuture", "Result", future.Response(), "Polling failure")
22562		return
22563	}
22564	if !done {
22565		pc.Response.Response = future.Response()
22566		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationProtectionContainersSwitchProtectionFuture")
22567		return
22568	}
22569	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
22570	if pc.Response.Response, err = future.GetResult(sender); err == nil && pc.Response.Response.StatusCode != http.StatusNoContent {
22571		pc, err = client.SwitchProtectionResponder(pc.Response.Response)
22572		if err != nil {
22573			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationProtectionContainersSwitchProtectionFuture", "Result", pc.Response.Response, "Failure responding to request")
22574		}
22575	}
22576	return
22577}
22578
22579// ReplicationProtectionIntent replication protection intent.
22580type ReplicationProtectionIntent struct {
22581	autorest.Response `json:"-"`
22582	// Properties - The custom data.
22583	Properties *ReplicationProtectionIntentProperties `json:"properties,omitempty"`
22584	// ID - READ-ONLY; Resource Id
22585	ID *string `json:"id,omitempty"`
22586	// Name - READ-ONLY; Resource Name
22587	Name *string `json:"name,omitempty"`
22588	// Type - READ-ONLY; Resource Type
22589	Type *string `json:"type,omitempty"`
22590	// Location - Resource Location
22591	Location *string `json:"location,omitempty"`
22592}
22593
22594// MarshalJSON is the custom marshaler for ReplicationProtectionIntent.
22595func (rpi ReplicationProtectionIntent) MarshalJSON() ([]byte, error) {
22596	objectMap := make(map[string]interface{})
22597	if rpi.Properties != nil {
22598		objectMap["properties"] = rpi.Properties
22599	}
22600	if rpi.Location != nil {
22601		objectMap["location"] = rpi.Location
22602	}
22603	return json.Marshal(objectMap)
22604}
22605
22606// ReplicationProtectionIntentCollection replication protection intent objects collection.
22607type ReplicationProtectionIntentCollection struct {
22608	autorest.Response `json:"-"`
22609	// Value - The Replication protection intent details.
22610	Value *[]ReplicationProtectionIntent `json:"value,omitempty"`
22611	// NextLink - The value of next link.
22612	NextLink *string `json:"nextLink,omitempty"`
22613}
22614
22615// ReplicationProtectionIntentCollectionIterator provides access to a complete listing of
22616// ReplicationProtectionIntent values.
22617type ReplicationProtectionIntentCollectionIterator struct {
22618	i    int
22619	page ReplicationProtectionIntentCollectionPage
22620}
22621
22622// NextWithContext advances to the next value.  If there was an error making
22623// the request the iterator does not advance and the error is returned.
22624func (iter *ReplicationProtectionIntentCollectionIterator) NextWithContext(ctx context.Context) (err error) {
22625	if tracing.IsEnabled() {
22626		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectionIntentCollectionIterator.NextWithContext")
22627		defer func() {
22628			sc := -1
22629			if iter.Response().Response.Response != nil {
22630				sc = iter.Response().Response.Response.StatusCode
22631			}
22632			tracing.EndSpan(ctx, sc, err)
22633		}()
22634	}
22635	iter.i++
22636	if iter.i < len(iter.page.Values()) {
22637		return nil
22638	}
22639	err = iter.page.NextWithContext(ctx)
22640	if err != nil {
22641		iter.i--
22642		return err
22643	}
22644	iter.i = 0
22645	return nil
22646}
22647
22648// Next advances to the next value.  If there was an error making
22649// the request the iterator does not advance and the error is returned.
22650// Deprecated: Use NextWithContext() instead.
22651func (iter *ReplicationProtectionIntentCollectionIterator) Next() error {
22652	return iter.NextWithContext(context.Background())
22653}
22654
22655// NotDone returns true if the enumeration should be started or is not yet complete.
22656func (iter ReplicationProtectionIntentCollectionIterator) NotDone() bool {
22657	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22658}
22659
22660// Response returns the raw server response from the last page request.
22661func (iter ReplicationProtectionIntentCollectionIterator) Response() ReplicationProtectionIntentCollection {
22662	return iter.page.Response()
22663}
22664
22665// Value returns the current value or a zero-initialized value if the
22666// iterator has advanced beyond the end of the collection.
22667func (iter ReplicationProtectionIntentCollectionIterator) Value() ReplicationProtectionIntent {
22668	if !iter.page.NotDone() {
22669		return ReplicationProtectionIntent{}
22670	}
22671	return iter.page.Values()[iter.i]
22672}
22673
22674// Creates a new instance of the ReplicationProtectionIntentCollectionIterator type.
22675func NewReplicationProtectionIntentCollectionIterator(page ReplicationProtectionIntentCollectionPage) ReplicationProtectionIntentCollectionIterator {
22676	return ReplicationProtectionIntentCollectionIterator{page: page}
22677}
22678
22679// IsEmpty returns true if the ListResult contains no values.
22680func (rpic ReplicationProtectionIntentCollection) IsEmpty() bool {
22681	return rpic.Value == nil || len(*rpic.Value) == 0
22682}
22683
22684// hasNextLink returns true if the NextLink is not empty.
22685func (rpic ReplicationProtectionIntentCollection) hasNextLink() bool {
22686	return rpic.NextLink != nil && len(*rpic.NextLink) != 0
22687}
22688
22689// replicationProtectionIntentCollectionPreparer prepares a request to retrieve the next set of results.
22690// It returns nil if no more results exist.
22691func (rpic ReplicationProtectionIntentCollection) replicationProtectionIntentCollectionPreparer(ctx context.Context) (*http.Request, error) {
22692	if !rpic.hasNextLink() {
22693		return nil, nil
22694	}
22695	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22696		autorest.AsJSON(),
22697		autorest.AsGet(),
22698		autorest.WithBaseURL(to.String(rpic.NextLink)))
22699}
22700
22701// ReplicationProtectionIntentCollectionPage contains a page of ReplicationProtectionIntent values.
22702type ReplicationProtectionIntentCollectionPage struct {
22703	fn   func(context.Context, ReplicationProtectionIntentCollection) (ReplicationProtectionIntentCollection, error)
22704	rpic ReplicationProtectionIntentCollection
22705}
22706
22707// NextWithContext advances to the next page of values.  If there was an error making
22708// the request the page does not advance and the error is returned.
22709func (page *ReplicationProtectionIntentCollectionPage) NextWithContext(ctx context.Context) (err error) {
22710	if tracing.IsEnabled() {
22711		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectionIntentCollectionPage.NextWithContext")
22712		defer func() {
22713			sc := -1
22714			if page.Response().Response.Response != nil {
22715				sc = page.Response().Response.Response.StatusCode
22716			}
22717			tracing.EndSpan(ctx, sc, err)
22718		}()
22719	}
22720	for {
22721		next, err := page.fn(ctx, page.rpic)
22722		if err != nil {
22723			return err
22724		}
22725		page.rpic = next
22726		if !next.hasNextLink() || !next.IsEmpty() {
22727			break
22728		}
22729	}
22730	return nil
22731}
22732
22733// Next advances to the next page of values.  If there was an error making
22734// the request the page does not advance and the error is returned.
22735// Deprecated: Use NextWithContext() instead.
22736func (page *ReplicationProtectionIntentCollectionPage) Next() error {
22737	return page.NextWithContext(context.Background())
22738}
22739
22740// NotDone returns true if the page enumeration should be started or is not yet complete.
22741func (page ReplicationProtectionIntentCollectionPage) NotDone() bool {
22742	return !page.rpic.IsEmpty()
22743}
22744
22745// Response returns the raw server response from the last page request.
22746func (page ReplicationProtectionIntentCollectionPage) Response() ReplicationProtectionIntentCollection {
22747	return page.rpic
22748}
22749
22750// Values returns the slice of values for the current page or nil if there are no values.
22751func (page ReplicationProtectionIntentCollectionPage) Values() []ReplicationProtectionIntent {
22752	if page.rpic.IsEmpty() {
22753		return nil
22754	}
22755	return *page.rpic.Value
22756}
22757
22758// Creates a new instance of the ReplicationProtectionIntentCollectionPage type.
22759func NewReplicationProtectionIntentCollectionPage(cur ReplicationProtectionIntentCollection, getNextPage func(context.Context, ReplicationProtectionIntentCollection) (ReplicationProtectionIntentCollection, error)) ReplicationProtectionIntentCollectionPage {
22760	return ReplicationProtectionIntentCollectionPage{
22761		fn:   getNextPage,
22762		rpic: cur,
22763	}
22764}
22765
22766// ReplicationProtectionIntentProperties replication protection intent custom data details.
22767type ReplicationProtectionIntentProperties struct {
22768	// FriendlyName - The name.
22769	FriendlyName *string `json:"friendlyName,omitempty"`
22770	// JobID - READ-ONLY; The job Id.
22771	JobID *string `json:"jobId,omitempty"`
22772	// JobState - READ-ONLY; The job state.
22773	JobState *string `json:"jobState,omitempty"`
22774	// IsActive - READ-ONLY; A value indicating whether the intent object is active.
22775	IsActive *bool `json:"isActive,omitempty"`
22776	// CreationTimeUTC - READ-ONLY; The creation time in UTC.
22777	CreationTimeUTC *string `json:"creationTimeUTC,omitempty"`
22778	// ProviderSpecificDetails - The Replication provider custom settings.
22779	ProviderSpecificDetails BasicReplicationProtectionIntentProviderSpecificSettings `json:"providerSpecificDetails,omitempty"`
22780}
22781
22782// MarshalJSON is the custom marshaler for ReplicationProtectionIntentProperties.
22783func (rpip ReplicationProtectionIntentProperties) MarshalJSON() ([]byte, error) {
22784	objectMap := make(map[string]interface{})
22785	if rpip.FriendlyName != nil {
22786		objectMap["friendlyName"] = rpip.FriendlyName
22787	}
22788	objectMap["providerSpecificDetails"] = rpip.ProviderSpecificDetails
22789	return json.Marshal(objectMap)
22790}
22791
22792// UnmarshalJSON is the custom unmarshaler for ReplicationProtectionIntentProperties struct.
22793func (rpip *ReplicationProtectionIntentProperties) UnmarshalJSON(body []byte) error {
22794	var m map[string]*json.RawMessage
22795	err := json.Unmarshal(body, &m)
22796	if err != nil {
22797		return err
22798	}
22799	for k, v := range m {
22800		switch k {
22801		case "friendlyName":
22802			if v != nil {
22803				var friendlyName string
22804				err = json.Unmarshal(*v, &friendlyName)
22805				if err != nil {
22806					return err
22807				}
22808				rpip.FriendlyName = &friendlyName
22809			}
22810		case "jobId":
22811			if v != nil {
22812				var jobID string
22813				err = json.Unmarshal(*v, &jobID)
22814				if err != nil {
22815					return err
22816				}
22817				rpip.JobID = &jobID
22818			}
22819		case "jobState":
22820			if v != nil {
22821				var jobState string
22822				err = json.Unmarshal(*v, &jobState)
22823				if err != nil {
22824					return err
22825				}
22826				rpip.JobState = &jobState
22827			}
22828		case "isActive":
22829			if v != nil {
22830				var isActive bool
22831				err = json.Unmarshal(*v, &isActive)
22832				if err != nil {
22833					return err
22834				}
22835				rpip.IsActive = &isActive
22836			}
22837		case "creationTimeUTC":
22838			if v != nil {
22839				var creationTimeUTC string
22840				err = json.Unmarshal(*v, &creationTimeUTC)
22841				if err != nil {
22842					return err
22843				}
22844				rpip.CreationTimeUTC = &creationTimeUTC
22845			}
22846		case "providerSpecificDetails":
22847			if v != nil {
22848				providerSpecificDetails, err := unmarshalBasicReplicationProtectionIntentProviderSpecificSettings(*v)
22849				if err != nil {
22850					return err
22851				}
22852				rpip.ProviderSpecificDetails = providerSpecificDetails
22853			}
22854		}
22855	}
22856
22857	return nil
22858}
22859
22860// BasicReplicationProtectionIntentProviderSpecificSettings replication provider specific settings.
22861type BasicReplicationProtectionIntentProviderSpecificSettings interface {
22862	AsA2AReplicationIntentDetails() (*A2AReplicationIntentDetails, bool)
22863	AsReplicationProtectionIntentProviderSpecificSettings() (*ReplicationProtectionIntentProviderSpecificSettings, bool)
22864}
22865
22866// ReplicationProtectionIntentProviderSpecificSettings replication provider specific settings.
22867type ReplicationProtectionIntentProviderSpecificSettings struct {
22868	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeReplicationProtectionIntentProviderSpecificSettings', 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A'
22869	InstanceType InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettings `json:"instanceType,omitempty"`
22870}
22871
22872func unmarshalBasicReplicationProtectionIntentProviderSpecificSettings(body []byte) (BasicReplicationProtectionIntentProviderSpecificSettings, error) {
22873	var m map[string]interface{}
22874	err := json.Unmarshal(body, &m)
22875	if err != nil {
22876		return nil, err
22877	}
22878
22879	switch m["instanceType"] {
22880	case string(InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A):
22881		var arid A2AReplicationIntentDetails
22882		err := json.Unmarshal(body, &arid)
22883		return arid, err
22884	default:
22885		var rpipss ReplicationProtectionIntentProviderSpecificSettings
22886		err := json.Unmarshal(body, &rpipss)
22887		return rpipss, err
22888	}
22889}
22890func unmarshalBasicReplicationProtectionIntentProviderSpecificSettingsArray(body []byte) ([]BasicReplicationProtectionIntentProviderSpecificSettings, error) {
22891	var rawMessages []*json.RawMessage
22892	err := json.Unmarshal(body, &rawMessages)
22893	if err != nil {
22894		return nil, err
22895	}
22896
22897	rpipssArray := make([]BasicReplicationProtectionIntentProviderSpecificSettings, len(rawMessages))
22898
22899	for index, rawMessage := range rawMessages {
22900		rpipss, err := unmarshalBasicReplicationProtectionIntentProviderSpecificSettings(*rawMessage)
22901		if err != nil {
22902			return nil, err
22903		}
22904		rpipssArray[index] = rpipss
22905	}
22906	return rpipssArray, nil
22907}
22908
22909// MarshalJSON is the custom marshaler for ReplicationProtectionIntentProviderSpecificSettings.
22910func (rpipss ReplicationProtectionIntentProviderSpecificSettings) MarshalJSON() ([]byte, error) {
22911	rpipss.InstanceType = InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeReplicationProtectionIntentProviderSpecificSettings
22912	objectMap := make(map[string]interface{})
22913	if rpipss.InstanceType != "" {
22914		objectMap["instanceType"] = rpipss.InstanceType
22915	}
22916	return json.Marshal(objectMap)
22917}
22918
22919// AsA2AReplicationIntentDetails is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for ReplicationProtectionIntentProviderSpecificSettings.
22920func (rpipss ReplicationProtectionIntentProviderSpecificSettings) AsA2AReplicationIntentDetails() (*A2AReplicationIntentDetails, bool) {
22921	return nil, false
22922}
22923
22924// AsReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for ReplicationProtectionIntentProviderSpecificSettings.
22925func (rpipss ReplicationProtectionIntentProviderSpecificSettings) AsReplicationProtectionIntentProviderSpecificSettings() (*ReplicationProtectionIntentProviderSpecificSettings, bool) {
22926	return &rpipss, true
22927}
22928
22929// AsBasicReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for ReplicationProtectionIntentProviderSpecificSettings.
22930func (rpipss ReplicationProtectionIntentProviderSpecificSettings) AsBasicReplicationProtectionIntentProviderSpecificSettings() (BasicReplicationProtectionIntentProviderSpecificSettings, bool) {
22931	return &rpipss, true
22932}
22933
22934// ReplicationProviderContainerUnmappingInput provider specific input for unpairing operations.
22935type ReplicationProviderContainerUnmappingInput struct {
22936	// InstanceType - The class type.
22937	InstanceType *string `json:"instanceType,omitempty"`
22938}
22939
22940// BasicReplicationProviderSpecificContainerCreationInput provider specific input for container creation operation.
22941type BasicReplicationProviderSpecificContainerCreationInput interface {
22942	AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool)
22943	AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool)
22944	AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool)
22945}
22946
22947// ReplicationProviderSpecificContainerCreationInput provider specific input for container creation operation.
22948type ReplicationProviderSpecificContainerCreationInput struct {
22949	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero'
22950	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerCreationInput `json:"instanceType,omitempty"`
22951}
22952
22953func unmarshalBasicReplicationProviderSpecificContainerCreationInput(body []byte) (BasicReplicationProviderSpecificContainerCreationInput, error) {
22954	var m map[string]interface{}
22955	err := json.Unmarshal(body, &m)
22956	if err != nil {
22957		return nil, err
22958	}
22959
22960	switch m["instanceType"] {
22961	case string(InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A):
22962		var acci A2AContainerCreationInput
22963		err := json.Unmarshal(body, &acci)
22964		return acci, err
22965	case string(InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero):
22966		var vmccci VMwareCbtContainerCreationInput
22967		err := json.Unmarshal(body, &vmccci)
22968		return vmccci, err
22969	default:
22970		var rpscci ReplicationProviderSpecificContainerCreationInput
22971		err := json.Unmarshal(body, &rpscci)
22972		return rpscci, err
22973	}
22974}
22975func unmarshalBasicReplicationProviderSpecificContainerCreationInputArray(body []byte) ([]BasicReplicationProviderSpecificContainerCreationInput, error) {
22976	var rawMessages []*json.RawMessage
22977	err := json.Unmarshal(body, &rawMessages)
22978	if err != nil {
22979		return nil, err
22980	}
22981
22982	rpscciArray := make([]BasicReplicationProviderSpecificContainerCreationInput, len(rawMessages))
22983
22984	for index, rawMessage := range rawMessages {
22985		rpscci, err := unmarshalBasicReplicationProviderSpecificContainerCreationInput(*rawMessage)
22986		if err != nil {
22987			return nil, err
22988		}
22989		rpscciArray[index] = rpscci
22990	}
22991	return rpscciArray, nil
22992}
22993
22994// MarshalJSON is the custom marshaler for ReplicationProviderSpecificContainerCreationInput.
22995func (rpscci ReplicationProviderSpecificContainerCreationInput) MarshalJSON() ([]byte, error) {
22996	rpscci.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput
22997	objectMap := make(map[string]interface{})
22998	if rpscci.InstanceType != "" {
22999		objectMap["instanceType"] = rpscci.InstanceType
23000	}
23001	return json.Marshal(objectMap)
23002}
23003
23004// AsA2AContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
23005func (rpscci ReplicationProviderSpecificContainerCreationInput) AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool) {
23006	return nil, false
23007}
23008
23009// AsVMwareCbtContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
23010func (rpscci ReplicationProviderSpecificContainerCreationInput) AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool) {
23011	return nil, false
23012}
23013
23014// AsReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
23015func (rpscci ReplicationProviderSpecificContainerCreationInput) AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool) {
23016	return &rpscci, true
23017}
23018
23019// AsBasicReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
23020func (rpscci ReplicationProviderSpecificContainerCreationInput) AsBasicReplicationProviderSpecificContainerCreationInput() (BasicReplicationProviderSpecificContainerCreationInput, bool) {
23021	return &rpscci, true
23022}
23023
23024// BasicReplicationProviderSpecificContainerMappingInput provider specific input for pairing operations.
23025type BasicReplicationProviderSpecificContainerMappingInput interface {
23026	AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool)
23027	AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool)
23028	AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool)
23029}
23030
23031// ReplicationProviderSpecificContainerMappingInput provider specific input for pairing operations.
23032type ReplicationProviderSpecificContainerMappingInput struct {
23033	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt'
23034	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerMappingInput `json:"instanceType,omitempty"`
23035}
23036
23037func unmarshalBasicReplicationProviderSpecificContainerMappingInput(body []byte) (BasicReplicationProviderSpecificContainerMappingInput, error) {
23038	var m map[string]interface{}
23039	err := json.Unmarshal(body, &m)
23040	if err != nil {
23041		return nil, err
23042	}
23043
23044	switch m["instanceType"] {
23045	case string(InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A):
23046		var acmi A2AContainerMappingInput
23047		err := json.Unmarshal(body, &acmi)
23048		return acmi, err
23049	case string(InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt):
23050		var vmccmi VMwareCbtContainerMappingInput
23051		err := json.Unmarshal(body, &vmccmi)
23052		return vmccmi, err
23053	default:
23054		var rpscmi ReplicationProviderSpecificContainerMappingInput
23055		err := json.Unmarshal(body, &rpscmi)
23056		return rpscmi, err
23057	}
23058}
23059func unmarshalBasicReplicationProviderSpecificContainerMappingInputArray(body []byte) ([]BasicReplicationProviderSpecificContainerMappingInput, error) {
23060	var rawMessages []*json.RawMessage
23061	err := json.Unmarshal(body, &rawMessages)
23062	if err != nil {
23063		return nil, err
23064	}
23065
23066	rpscmiArray := make([]BasicReplicationProviderSpecificContainerMappingInput, len(rawMessages))
23067
23068	for index, rawMessage := range rawMessages {
23069		rpscmi, err := unmarshalBasicReplicationProviderSpecificContainerMappingInput(*rawMessage)
23070		if err != nil {
23071			return nil, err
23072		}
23073		rpscmiArray[index] = rpscmi
23074	}
23075	return rpscmiArray, nil
23076}
23077
23078// MarshalJSON is the custom marshaler for ReplicationProviderSpecificContainerMappingInput.
23079func (rpscmi ReplicationProviderSpecificContainerMappingInput) MarshalJSON() ([]byte, error) {
23080	rpscmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput
23081	objectMap := make(map[string]interface{})
23082	if rpscmi.InstanceType != "" {
23083		objectMap["instanceType"] = rpscmi.InstanceType
23084	}
23085	return json.Marshal(objectMap)
23086}
23087
23088// AsA2AContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
23089func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool) {
23090	return nil, false
23091}
23092
23093// AsVMwareCbtContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
23094func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool) {
23095	return nil, false
23096}
23097
23098// AsReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
23099func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool) {
23100	return &rpscmi, true
23101}
23102
23103// AsBasicReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
23104func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsBasicReplicationProviderSpecificContainerMappingInput() (BasicReplicationProviderSpecificContainerMappingInput, bool) {
23105	return &rpscmi, true
23106}
23107
23108// BasicReplicationProviderSpecificSettings replication provider specific settings.
23109type BasicReplicationProviderSpecificSettings interface {
23110	AsA2AReplicationDetails() (*A2AReplicationDetails, bool)
23111	AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool)
23112	AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool)
23113	AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool)
23114	AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool)
23115	AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool)
23116	AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool)
23117	AsInMageReplicationDetails() (*InMageReplicationDetails, bool)
23118	AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool)
23119}
23120
23121// ReplicationProviderSpecificSettings replication provider specific settings.
23122type ReplicationProviderSpecificSettings struct {
23123	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
23124	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
23125}
23126
23127func unmarshalBasicReplicationProviderSpecificSettings(body []byte) (BasicReplicationProviderSpecificSettings, error) {
23128	var m map[string]interface{}
23129	err := json.Unmarshal(body, &m)
23130	if err != nil {
23131		return nil, err
23132	}
23133
23134	switch m["instanceType"] {
23135	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A):
23136		var ard A2AReplicationDetails
23137		err := json.Unmarshal(body, &ard)
23138		return ard, err
23139	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure):
23140		var hvrard HyperVReplicaAzureReplicationDetails
23141		err := json.Unmarshal(body, &hvrard)
23142		return hvrard, err
23143	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails):
23144		var hvrbrd HyperVReplicaBaseReplicationDetails
23145		err := json.Unmarshal(body, &hvrbrd)
23146		return hvrbrd, err
23147	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2):
23148		var hvrbrd HyperVReplicaBlueReplicationDetails
23149		err := json.Unmarshal(body, &hvrbrd)
23150		return hvrbrd, err
23151	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012):
23152		var hvrrd HyperVReplicaReplicationDetails
23153		err := json.Unmarshal(body, &hvrrd)
23154		return hvrrd, err
23155	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2):
23156		var imavrd InMageAzureV2ReplicationDetails
23157		err := json.Unmarshal(body, &imavrd)
23158		return imavrd, err
23159	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm):
23160		var imrrd InMageRcmReplicationDetails
23161		err := json.Unmarshal(body, &imrrd)
23162		return imrrd, err
23163	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage):
23164		var imrd InMageReplicationDetails
23165		err := json.Unmarshal(body, &imrd)
23166		return imrd, err
23167	default:
23168		var rpss ReplicationProviderSpecificSettings
23169		err := json.Unmarshal(body, &rpss)
23170		return rpss, err
23171	}
23172}
23173func unmarshalBasicReplicationProviderSpecificSettingsArray(body []byte) ([]BasicReplicationProviderSpecificSettings, error) {
23174	var rawMessages []*json.RawMessage
23175	err := json.Unmarshal(body, &rawMessages)
23176	if err != nil {
23177		return nil, err
23178	}
23179
23180	rpssArray := make([]BasicReplicationProviderSpecificSettings, len(rawMessages))
23181
23182	for index, rawMessage := range rawMessages {
23183		rpss, err := unmarshalBasicReplicationProviderSpecificSettings(*rawMessage)
23184		if err != nil {
23185			return nil, err
23186		}
23187		rpssArray[index] = rpss
23188	}
23189	return rpssArray, nil
23190}
23191
23192// MarshalJSON is the custom marshaler for ReplicationProviderSpecificSettings.
23193func (rpss ReplicationProviderSpecificSettings) MarshalJSON() ([]byte, error) {
23194	rpss.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings
23195	objectMap := make(map[string]interface{})
23196	if rpss.InstanceType != "" {
23197		objectMap["instanceType"] = rpss.InstanceType
23198	}
23199	return json.Marshal(objectMap)
23200}
23201
23202// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23203func (rpss ReplicationProviderSpecificSettings) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
23204	return nil, false
23205}
23206
23207// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23208func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
23209	return nil, false
23210}
23211
23212// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23213func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
23214	return nil, false
23215}
23216
23217// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23218func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
23219	return nil, false
23220}
23221
23222// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23223func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
23224	return nil, false
23225}
23226
23227// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23228func (rpss ReplicationProviderSpecificSettings) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
23229	return nil, false
23230}
23231
23232// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23233func (rpss ReplicationProviderSpecificSettings) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
23234	return nil, false
23235}
23236
23237// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23238func (rpss ReplicationProviderSpecificSettings) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
23239	return nil, false
23240}
23241
23242// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23243func (rpss ReplicationProviderSpecificSettings) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
23244	return &rpss, true
23245}
23246
23247// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
23248func (rpss ReplicationProviderSpecificSettings) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
23249	return &rpss, true
23250}
23251
23252// BasicReplicationProviderSpecificUpdateContainerMappingInput provider specific input for update pairing operations.
23253type BasicReplicationProviderSpecificUpdateContainerMappingInput interface {
23254	AsA2AUpdateContainerMappingInput() (*A2AUpdateContainerMappingInput, bool)
23255	AsReplicationProviderSpecificUpdateContainerMappingInput() (*ReplicationProviderSpecificUpdateContainerMappingInput, bool)
23256}
23257
23258// ReplicationProviderSpecificUpdateContainerMappingInput provider specific input for update pairing
23259// operations.
23260type ReplicationProviderSpecificUpdateContainerMappingInput struct {
23261	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeReplicationProviderSpecificUpdateContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A'
23262	InstanceType InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInput `json:"instanceType,omitempty"`
23263}
23264
23265func unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInput(body []byte) (BasicReplicationProviderSpecificUpdateContainerMappingInput, error) {
23266	var m map[string]interface{}
23267	err := json.Unmarshal(body, &m)
23268	if err != nil {
23269		return nil, err
23270	}
23271
23272	switch m["instanceType"] {
23273	case string(InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A):
23274		var aucmi A2AUpdateContainerMappingInput
23275		err := json.Unmarshal(body, &aucmi)
23276		return aucmi, err
23277	default:
23278		var rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput
23279		err := json.Unmarshal(body, &rpsucmi)
23280		return rpsucmi, err
23281	}
23282}
23283func unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInputArray(body []byte) ([]BasicReplicationProviderSpecificUpdateContainerMappingInput, error) {
23284	var rawMessages []*json.RawMessage
23285	err := json.Unmarshal(body, &rawMessages)
23286	if err != nil {
23287		return nil, err
23288	}
23289
23290	rpsucmiArray := make([]BasicReplicationProviderSpecificUpdateContainerMappingInput, len(rawMessages))
23291
23292	for index, rawMessage := range rawMessages {
23293		rpsucmi, err := unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInput(*rawMessage)
23294		if err != nil {
23295			return nil, err
23296		}
23297		rpsucmiArray[index] = rpsucmi
23298	}
23299	return rpsucmiArray, nil
23300}
23301
23302// MarshalJSON is the custom marshaler for ReplicationProviderSpecificUpdateContainerMappingInput.
23303func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) MarshalJSON() ([]byte, error) {
23304	rpsucmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeReplicationProviderSpecificUpdateContainerMappingInput
23305	objectMap := make(map[string]interface{})
23306	if rpsucmi.InstanceType != "" {
23307		objectMap["instanceType"] = rpsucmi.InstanceType
23308	}
23309	return json.Marshal(objectMap)
23310}
23311
23312// AsA2AUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for ReplicationProviderSpecificUpdateContainerMappingInput.
23313func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) AsA2AUpdateContainerMappingInput() (*A2AUpdateContainerMappingInput, bool) {
23314	return nil, false
23315}
23316
23317// AsReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for ReplicationProviderSpecificUpdateContainerMappingInput.
23318func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) AsReplicationProviderSpecificUpdateContainerMappingInput() (*ReplicationProviderSpecificUpdateContainerMappingInput, bool) {
23319	return &rpsucmi, true
23320}
23321
23322// AsBasicReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for ReplicationProviderSpecificUpdateContainerMappingInput.
23323func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) AsBasicReplicationProviderSpecificUpdateContainerMappingInput() (BasicReplicationProviderSpecificUpdateContainerMappingInput, bool) {
23324	return &rpsucmi, true
23325}
23326
23327// ReplicationRecoveryPlansCreateFuture an abstraction for monitoring and retrieving the results of a
23328// long-running operation.
23329type ReplicationRecoveryPlansCreateFuture struct {
23330	azure.FutureAPI
23331	// Result returns the result of the asynchronous operation.
23332	// If the operation has not completed it will return an error.
23333	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23334}
23335
23336// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23337func (future *ReplicationRecoveryPlansCreateFuture) UnmarshalJSON(body []byte) error {
23338	var azFuture azure.Future
23339	if err := json.Unmarshal(body, &azFuture); err != nil {
23340		return err
23341	}
23342	future.FutureAPI = &azFuture
23343	future.Result = future.result
23344	return nil
23345}
23346
23347// result is the default implementation for ReplicationRecoveryPlansCreateFuture.Result.
23348func (future *ReplicationRecoveryPlansCreateFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23349	var done bool
23350	done, err = future.DoneWithContext(context.Background(), client)
23351	if err != nil {
23352		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansCreateFuture", "Result", future.Response(), "Polling failure")
23353		return
23354	}
23355	if !done {
23356		rp.Response.Response = future.Response()
23357		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansCreateFuture")
23358		return
23359	}
23360	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23361	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23362		rp, err = client.CreateResponder(rp.Response.Response)
23363		if err != nil {
23364			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansCreateFuture", "Result", rp.Response.Response, "Failure responding to request")
23365		}
23366	}
23367	return
23368}
23369
23370// ReplicationRecoveryPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
23371// long-running operation.
23372type ReplicationRecoveryPlansDeleteFuture struct {
23373	azure.FutureAPI
23374	// Result returns the result of the asynchronous operation.
23375	// If the operation has not completed it will return an error.
23376	Result func(ReplicationRecoveryPlansClient) (autorest.Response, error)
23377}
23378
23379// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23380func (future *ReplicationRecoveryPlansDeleteFuture) UnmarshalJSON(body []byte) error {
23381	var azFuture azure.Future
23382	if err := json.Unmarshal(body, &azFuture); err != nil {
23383		return err
23384	}
23385	future.FutureAPI = &azFuture
23386	future.Result = future.result
23387	return nil
23388}
23389
23390// result is the default implementation for ReplicationRecoveryPlansDeleteFuture.Result.
23391func (future *ReplicationRecoveryPlansDeleteFuture) result(client ReplicationRecoveryPlansClient) (ar autorest.Response, err error) {
23392	var done bool
23393	done, err = future.DoneWithContext(context.Background(), client)
23394	if err != nil {
23395		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansDeleteFuture", "Result", future.Response(), "Polling failure")
23396		return
23397	}
23398	if !done {
23399		ar.Response = future.Response()
23400		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansDeleteFuture")
23401		return
23402	}
23403	ar.Response = future.Response()
23404	return
23405}
23406
23407// ReplicationRecoveryPlansFailoverCommitFuture an abstraction for monitoring and retrieving the results of
23408// a long-running operation.
23409type ReplicationRecoveryPlansFailoverCommitFuture struct {
23410	azure.FutureAPI
23411	// Result returns the result of the asynchronous operation.
23412	// If the operation has not completed it will return an error.
23413	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23414}
23415
23416// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23417func (future *ReplicationRecoveryPlansFailoverCommitFuture) UnmarshalJSON(body []byte) error {
23418	var azFuture azure.Future
23419	if err := json.Unmarshal(body, &azFuture); err != nil {
23420		return err
23421	}
23422	future.FutureAPI = &azFuture
23423	future.Result = future.result
23424	return nil
23425}
23426
23427// result is the default implementation for ReplicationRecoveryPlansFailoverCommitFuture.Result.
23428func (future *ReplicationRecoveryPlansFailoverCommitFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23429	var done bool
23430	done, err = future.DoneWithContext(context.Background(), client)
23431	if err != nil {
23432		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansFailoverCommitFuture", "Result", future.Response(), "Polling failure")
23433		return
23434	}
23435	if !done {
23436		rp.Response.Response = future.Response()
23437		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansFailoverCommitFuture")
23438		return
23439	}
23440	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23441	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23442		rp, err = client.FailoverCommitResponder(rp.Response.Response)
23443		if err != nil {
23444			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansFailoverCommitFuture", "Result", rp.Response.Response, "Failure responding to request")
23445		}
23446	}
23447	return
23448}
23449
23450// ReplicationRecoveryPlansPlannedFailoverFuture an abstraction for monitoring and retrieving the results
23451// of a long-running operation.
23452type ReplicationRecoveryPlansPlannedFailoverFuture struct {
23453	azure.FutureAPI
23454	// Result returns the result of the asynchronous operation.
23455	// If the operation has not completed it will return an error.
23456	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23457}
23458
23459// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23460func (future *ReplicationRecoveryPlansPlannedFailoverFuture) UnmarshalJSON(body []byte) error {
23461	var azFuture azure.Future
23462	if err := json.Unmarshal(body, &azFuture); err != nil {
23463		return err
23464	}
23465	future.FutureAPI = &azFuture
23466	future.Result = future.result
23467	return nil
23468}
23469
23470// result is the default implementation for ReplicationRecoveryPlansPlannedFailoverFuture.Result.
23471func (future *ReplicationRecoveryPlansPlannedFailoverFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23472	var done bool
23473	done, err = future.DoneWithContext(context.Background(), client)
23474	if err != nil {
23475		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansPlannedFailoverFuture", "Result", future.Response(), "Polling failure")
23476		return
23477	}
23478	if !done {
23479		rp.Response.Response = future.Response()
23480		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansPlannedFailoverFuture")
23481		return
23482	}
23483	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23484	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23485		rp, err = client.PlannedFailoverResponder(rp.Response.Response)
23486		if err != nil {
23487			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansPlannedFailoverFuture", "Result", rp.Response.Response, "Failure responding to request")
23488		}
23489	}
23490	return
23491}
23492
23493// ReplicationRecoveryPlansReprotectFuture an abstraction for monitoring and retrieving the results of a
23494// long-running operation.
23495type ReplicationRecoveryPlansReprotectFuture struct {
23496	azure.FutureAPI
23497	// Result returns the result of the asynchronous operation.
23498	// If the operation has not completed it will return an error.
23499	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23500}
23501
23502// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23503func (future *ReplicationRecoveryPlansReprotectFuture) UnmarshalJSON(body []byte) error {
23504	var azFuture azure.Future
23505	if err := json.Unmarshal(body, &azFuture); err != nil {
23506		return err
23507	}
23508	future.FutureAPI = &azFuture
23509	future.Result = future.result
23510	return nil
23511}
23512
23513// result is the default implementation for ReplicationRecoveryPlansReprotectFuture.Result.
23514func (future *ReplicationRecoveryPlansReprotectFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23515	var done bool
23516	done, err = future.DoneWithContext(context.Background(), client)
23517	if err != nil {
23518		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansReprotectFuture", "Result", future.Response(), "Polling failure")
23519		return
23520	}
23521	if !done {
23522		rp.Response.Response = future.Response()
23523		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansReprotectFuture")
23524		return
23525	}
23526	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23527	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23528		rp, err = client.ReprotectResponder(rp.Response.Response)
23529		if err != nil {
23530			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansReprotectFuture", "Result", rp.Response.Response, "Failure responding to request")
23531		}
23532	}
23533	return
23534}
23535
23536// ReplicationRecoveryPlansTestFailoverCleanupFuture an abstraction for monitoring and retrieving the
23537// results of a long-running operation.
23538type ReplicationRecoveryPlansTestFailoverCleanupFuture struct {
23539	azure.FutureAPI
23540	// Result returns the result of the asynchronous operation.
23541	// If the operation has not completed it will return an error.
23542	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23543}
23544
23545// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23546func (future *ReplicationRecoveryPlansTestFailoverCleanupFuture) UnmarshalJSON(body []byte) error {
23547	var azFuture azure.Future
23548	if err := json.Unmarshal(body, &azFuture); err != nil {
23549		return err
23550	}
23551	future.FutureAPI = &azFuture
23552	future.Result = future.result
23553	return nil
23554}
23555
23556// result is the default implementation for ReplicationRecoveryPlansTestFailoverCleanupFuture.Result.
23557func (future *ReplicationRecoveryPlansTestFailoverCleanupFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23558	var done bool
23559	done, err = future.DoneWithContext(context.Background(), client)
23560	if err != nil {
23561		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansTestFailoverCleanupFuture", "Result", future.Response(), "Polling failure")
23562		return
23563	}
23564	if !done {
23565		rp.Response.Response = future.Response()
23566		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansTestFailoverCleanupFuture")
23567		return
23568	}
23569	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23570	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23571		rp, err = client.TestFailoverCleanupResponder(rp.Response.Response)
23572		if err != nil {
23573			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansTestFailoverCleanupFuture", "Result", rp.Response.Response, "Failure responding to request")
23574		}
23575	}
23576	return
23577}
23578
23579// ReplicationRecoveryPlansTestFailoverFuture an abstraction for monitoring and retrieving the results of a
23580// long-running operation.
23581type ReplicationRecoveryPlansTestFailoverFuture struct {
23582	azure.FutureAPI
23583	// Result returns the result of the asynchronous operation.
23584	// If the operation has not completed it will return an error.
23585	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23586}
23587
23588// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23589func (future *ReplicationRecoveryPlansTestFailoverFuture) UnmarshalJSON(body []byte) error {
23590	var azFuture azure.Future
23591	if err := json.Unmarshal(body, &azFuture); err != nil {
23592		return err
23593	}
23594	future.FutureAPI = &azFuture
23595	future.Result = future.result
23596	return nil
23597}
23598
23599// result is the default implementation for ReplicationRecoveryPlansTestFailoverFuture.Result.
23600func (future *ReplicationRecoveryPlansTestFailoverFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23601	var done bool
23602	done, err = future.DoneWithContext(context.Background(), client)
23603	if err != nil {
23604		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansTestFailoverFuture", "Result", future.Response(), "Polling failure")
23605		return
23606	}
23607	if !done {
23608		rp.Response.Response = future.Response()
23609		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansTestFailoverFuture")
23610		return
23611	}
23612	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23613	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23614		rp, err = client.TestFailoverResponder(rp.Response.Response)
23615		if err != nil {
23616			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansTestFailoverFuture", "Result", rp.Response.Response, "Failure responding to request")
23617		}
23618	}
23619	return
23620}
23621
23622// ReplicationRecoveryPlansUnplannedFailoverFuture an abstraction for monitoring and retrieving the results
23623// of a long-running operation.
23624type ReplicationRecoveryPlansUnplannedFailoverFuture struct {
23625	azure.FutureAPI
23626	// Result returns the result of the asynchronous operation.
23627	// If the operation has not completed it will return an error.
23628	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23629}
23630
23631// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23632func (future *ReplicationRecoveryPlansUnplannedFailoverFuture) UnmarshalJSON(body []byte) error {
23633	var azFuture azure.Future
23634	if err := json.Unmarshal(body, &azFuture); err != nil {
23635		return err
23636	}
23637	future.FutureAPI = &azFuture
23638	future.Result = future.result
23639	return nil
23640}
23641
23642// result is the default implementation for ReplicationRecoveryPlansUnplannedFailoverFuture.Result.
23643func (future *ReplicationRecoveryPlansUnplannedFailoverFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23644	var done bool
23645	done, err = future.DoneWithContext(context.Background(), client)
23646	if err != nil {
23647		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansUnplannedFailoverFuture", "Result", future.Response(), "Polling failure")
23648		return
23649	}
23650	if !done {
23651		rp.Response.Response = future.Response()
23652		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansUnplannedFailoverFuture")
23653		return
23654	}
23655	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23656	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23657		rp, err = client.UnplannedFailoverResponder(rp.Response.Response)
23658		if err != nil {
23659			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansUnplannedFailoverFuture", "Result", rp.Response.Response, "Failure responding to request")
23660		}
23661	}
23662	return
23663}
23664
23665// ReplicationRecoveryPlansUpdateFuture an abstraction for monitoring and retrieving the results of a
23666// long-running operation.
23667type ReplicationRecoveryPlansUpdateFuture struct {
23668	azure.FutureAPI
23669	// Result returns the result of the asynchronous operation.
23670	// If the operation has not completed it will return an error.
23671	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
23672}
23673
23674// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23675func (future *ReplicationRecoveryPlansUpdateFuture) UnmarshalJSON(body []byte) error {
23676	var azFuture azure.Future
23677	if err := json.Unmarshal(body, &azFuture); err != nil {
23678		return err
23679	}
23680	future.FutureAPI = &azFuture
23681	future.Result = future.result
23682	return nil
23683}
23684
23685// result is the default implementation for ReplicationRecoveryPlansUpdateFuture.Result.
23686func (future *ReplicationRecoveryPlansUpdateFuture) result(client ReplicationRecoveryPlansClient) (rp RecoveryPlan, err error) {
23687	var done bool
23688	done, err = future.DoneWithContext(context.Background(), client)
23689	if err != nil {
23690		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansUpdateFuture", "Result", future.Response(), "Polling failure")
23691		return
23692	}
23693	if !done {
23694		rp.Response.Response = future.Response()
23695		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryPlansUpdateFuture")
23696		return
23697	}
23698	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23699	if rp.Response.Response, err = future.GetResult(sender); err == nil && rp.Response.Response.StatusCode != http.StatusNoContent {
23700		rp, err = client.UpdateResponder(rp.Response.Response)
23701		if err != nil {
23702			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryPlansUpdateFuture", "Result", rp.Response.Response, "Failure responding to request")
23703		}
23704	}
23705	return
23706}
23707
23708// ReplicationRecoveryServicesProvidersCreateFuture an abstraction for monitoring and retrieving the
23709// results of a long-running operation.
23710type ReplicationRecoveryServicesProvidersCreateFuture struct {
23711	azure.FutureAPI
23712	// Result returns the result of the asynchronous operation.
23713	// If the operation has not completed it will return an error.
23714	Result func(ReplicationRecoveryServicesProvidersClient) (RecoveryServicesProvider, error)
23715}
23716
23717// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23718func (future *ReplicationRecoveryServicesProvidersCreateFuture) UnmarshalJSON(body []byte) error {
23719	var azFuture azure.Future
23720	if err := json.Unmarshal(body, &azFuture); err != nil {
23721		return err
23722	}
23723	future.FutureAPI = &azFuture
23724	future.Result = future.result
23725	return nil
23726}
23727
23728// result is the default implementation for ReplicationRecoveryServicesProvidersCreateFuture.Result.
23729func (future *ReplicationRecoveryServicesProvidersCreateFuture) result(client ReplicationRecoveryServicesProvidersClient) (rsp RecoveryServicesProvider, err error) {
23730	var done bool
23731	done, err = future.DoneWithContext(context.Background(), client)
23732	if err != nil {
23733		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryServicesProvidersCreateFuture", "Result", future.Response(), "Polling failure")
23734		return
23735	}
23736	if !done {
23737		rsp.Response.Response = future.Response()
23738		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryServicesProvidersCreateFuture")
23739		return
23740	}
23741	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23742	if rsp.Response.Response, err = future.GetResult(sender); err == nil && rsp.Response.Response.StatusCode != http.StatusNoContent {
23743		rsp, err = client.CreateResponder(rsp.Response.Response)
23744		if err != nil {
23745			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryServicesProvidersCreateFuture", "Result", rsp.Response.Response, "Failure responding to request")
23746		}
23747	}
23748	return
23749}
23750
23751// ReplicationRecoveryServicesProvidersDeleteFuture an abstraction for monitoring and retrieving the
23752// results of a long-running operation.
23753type ReplicationRecoveryServicesProvidersDeleteFuture struct {
23754	azure.FutureAPI
23755	// Result returns the result of the asynchronous operation.
23756	// If the operation has not completed it will return an error.
23757	Result func(ReplicationRecoveryServicesProvidersClient) (autorest.Response, error)
23758}
23759
23760// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23761func (future *ReplicationRecoveryServicesProvidersDeleteFuture) UnmarshalJSON(body []byte) error {
23762	var azFuture azure.Future
23763	if err := json.Unmarshal(body, &azFuture); err != nil {
23764		return err
23765	}
23766	future.FutureAPI = &azFuture
23767	future.Result = future.result
23768	return nil
23769}
23770
23771// result is the default implementation for ReplicationRecoveryServicesProvidersDeleteFuture.Result.
23772func (future *ReplicationRecoveryServicesProvidersDeleteFuture) result(client ReplicationRecoveryServicesProvidersClient) (ar autorest.Response, err error) {
23773	var done bool
23774	done, err = future.DoneWithContext(context.Background(), client)
23775	if err != nil {
23776		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryServicesProvidersDeleteFuture", "Result", future.Response(), "Polling failure")
23777		return
23778	}
23779	if !done {
23780		ar.Response = future.Response()
23781		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryServicesProvidersDeleteFuture")
23782		return
23783	}
23784	ar.Response = future.Response()
23785	return
23786}
23787
23788// ReplicationRecoveryServicesProvidersPurgeFuture an abstraction for monitoring and retrieving the results
23789// of a long-running operation.
23790type ReplicationRecoveryServicesProvidersPurgeFuture struct {
23791	azure.FutureAPI
23792	// Result returns the result of the asynchronous operation.
23793	// If the operation has not completed it will return an error.
23794	Result func(ReplicationRecoveryServicesProvidersClient) (autorest.Response, error)
23795}
23796
23797// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23798func (future *ReplicationRecoveryServicesProvidersPurgeFuture) UnmarshalJSON(body []byte) error {
23799	var azFuture azure.Future
23800	if err := json.Unmarshal(body, &azFuture); err != nil {
23801		return err
23802	}
23803	future.FutureAPI = &azFuture
23804	future.Result = future.result
23805	return nil
23806}
23807
23808// result is the default implementation for ReplicationRecoveryServicesProvidersPurgeFuture.Result.
23809func (future *ReplicationRecoveryServicesProvidersPurgeFuture) result(client ReplicationRecoveryServicesProvidersClient) (ar autorest.Response, err error) {
23810	var done bool
23811	done, err = future.DoneWithContext(context.Background(), client)
23812	if err != nil {
23813		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryServicesProvidersPurgeFuture", "Result", future.Response(), "Polling failure")
23814		return
23815	}
23816	if !done {
23817		ar.Response = future.Response()
23818		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryServicesProvidersPurgeFuture")
23819		return
23820	}
23821	ar.Response = future.Response()
23822	return
23823}
23824
23825// ReplicationRecoveryServicesProvidersRefreshProviderFuture an abstraction for monitoring and retrieving
23826// the results of a long-running operation.
23827type ReplicationRecoveryServicesProvidersRefreshProviderFuture struct {
23828	azure.FutureAPI
23829	// Result returns the result of the asynchronous operation.
23830	// If the operation has not completed it will return an error.
23831	Result func(ReplicationRecoveryServicesProvidersClient) (RecoveryServicesProvider, error)
23832}
23833
23834// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23835func (future *ReplicationRecoveryServicesProvidersRefreshProviderFuture) UnmarshalJSON(body []byte) error {
23836	var azFuture azure.Future
23837	if err := json.Unmarshal(body, &azFuture); err != nil {
23838		return err
23839	}
23840	future.FutureAPI = &azFuture
23841	future.Result = future.result
23842	return nil
23843}
23844
23845// result is the default implementation for ReplicationRecoveryServicesProvidersRefreshProviderFuture.Result.
23846func (future *ReplicationRecoveryServicesProvidersRefreshProviderFuture) result(client ReplicationRecoveryServicesProvidersClient) (rsp RecoveryServicesProvider, err error) {
23847	var done bool
23848	done, err = future.DoneWithContext(context.Background(), client)
23849	if err != nil {
23850		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryServicesProvidersRefreshProviderFuture", "Result", future.Response(), "Polling failure")
23851		return
23852	}
23853	if !done {
23854		rsp.Response.Response = future.Response()
23855		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationRecoveryServicesProvidersRefreshProviderFuture")
23856		return
23857	}
23858	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23859	if rsp.Response.Response, err = future.GetResult(sender); err == nil && rsp.Response.Response.StatusCode != http.StatusNoContent {
23860		rsp, err = client.RefreshProviderResponder(rsp.Response.Response)
23861		if err != nil {
23862			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationRecoveryServicesProvidersRefreshProviderFuture", "Result", rsp.Response.Response, "Failure responding to request")
23863		}
23864	}
23865	return
23866}
23867
23868// ReplicationStorageClassificationMappingsCreateFuture an abstraction for monitoring and retrieving the
23869// results of a long-running operation.
23870type ReplicationStorageClassificationMappingsCreateFuture struct {
23871	azure.FutureAPI
23872	// Result returns the result of the asynchronous operation.
23873	// If the operation has not completed it will return an error.
23874	Result func(ReplicationStorageClassificationMappingsClient) (StorageClassificationMapping, error)
23875}
23876
23877// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23878func (future *ReplicationStorageClassificationMappingsCreateFuture) UnmarshalJSON(body []byte) error {
23879	var azFuture azure.Future
23880	if err := json.Unmarshal(body, &azFuture); err != nil {
23881		return err
23882	}
23883	future.FutureAPI = &azFuture
23884	future.Result = future.result
23885	return nil
23886}
23887
23888// result is the default implementation for ReplicationStorageClassificationMappingsCreateFuture.Result.
23889func (future *ReplicationStorageClassificationMappingsCreateFuture) result(client ReplicationStorageClassificationMappingsClient) (scm StorageClassificationMapping, err error) {
23890	var done bool
23891	done, err = future.DoneWithContext(context.Background(), client)
23892	if err != nil {
23893		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationStorageClassificationMappingsCreateFuture", "Result", future.Response(), "Polling failure")
23894		return
23895	}
23896	if !done {
23897		scm.Response.Response = future.Response()
23898		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationStorageClassificationMappingsCreateFuture")
23899		return
23900	}
23901	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23902	if scm.Response.Response, err = future.GetResult(sender); err == nil && scm.Response.Response.StatusCode != http.StatusNoContent {
23903		scm, err = client.CreateResponder(scm.Response.Response)
23904		if err != nil {
23905			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationStorageClassificationMappingsCreateFuture", "Result", scm.Response.Response, "Failure responding to request")
23906		}
23907	}
23908	return
23909}
23910
23911// ReplicationStorageClassificationMappingsDeleteFuture an abstraction for monitoring and retrieving the
23912// results of a long-running operation.
23913type ReplicationStorageClassificationMappingsDeleteFuture struct {
23914	azure.FutureAPI
23915	// Result returns the result of the asynchronous operation.
23916	// If the operation has not completed it will return an error.
23917	Result func(ReplicationStorageClassificationMappingsClient) (autorest.Response, error)
23918}
23919
23920// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23921func (future *ReplicationStorageClassificationMappingsDeleteFuture) UnmarshalJSON(body []byte) error {
23922	var azFuture azure.Future
23923	if err := json.Unmarshal(body, &azFuture); err != nil {
23924		return err
23925	}
23926	future.FutureAPI = &azFuture
23927	future.Result = future.result
23928	return nil
23929}
23930
23931// result is the default implementation for ReplicationStorageClassificationMappingsDeleteFuture.Result.
23932func (future *ReplicationStorageClassificationMappingsDeleteFuture) result(client ReplicationStorageClassificationMappingsClient) (ar autorest.Response, err error) {
23933	var done bool
23934	done, err = future.DoneWithContext(context.Background(), client)
23935	if err != nil {
23936		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationStorageClassificationMappingsDeleteFuture", "Result", future.Response(), "Polling failure")
23937		return
23938	}
23939	if !done {
23940		ar.Response = future.Response()
23941		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationStorageClassificationMappingsDeleteFuture")
23942		return
23943	}
23944	ar.Response = future.Response()
23945	return
23946}
23947
23948// ReplicationVaultHealthRefreshFuture an abstraction for monitoring and retrieving the results of a
23949// long-running operation.
23950type ReplicationVaultHealthRefreshFuture struct {
23951	azure.FutureAPI
23952	// Result returns the result of the asynchronous operation.
23953	// If the operation has not completed it will return an error.
23954	Result func(ReplicationVaultHealthClient) (VaultHealthDetails, error)
23955}
23956
23957// UnmarshalJSON is the custom unmarshaller for CreateFuture.
23958func (future *ReplicationVaultHealthRefreshFuture) UnmarshalJSON(body []byte) error {
23959	var azFuture azure.Future
23960	if err := json.Unmarshal(body, &azFuture); err != nil {
23961		return err
23962	}
23963	future.FutureAPI = &azFuture
23964	future.Result = future.result
23965	return nil
23966}
23967
23968// result is the default implementation for ReplicationVaultHealthRefreshFuture.Result.
23969func (future *ReplicationVaultHealthRefreshFuture) result(client ReplicationVaultHealthClient) (vhd VaultHealthDetails, err error) {
23970	var done bool
23971	done, err = future.DoneWithContext(context.Background(), client)
23972	if err != nil {
23973		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationVaultHealthRefreshFuture", "Result", future.Response(), "Polling failure")
23974		return
23975	}
23976	if !done {
23977		vhd.Response.Response = future.Response()
23978		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationVaultHealthRefreshFuture")
23979		return
23980	}
23981	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
23982	if vhd.Response.Response, err = future.GetResult(sender); err == nil && vhd.Response.Response.StatusCode != http.StatusNoContent {
23983		vhd, err = client.RefreshResponder(vhd.Response.Response)
23984		if err != nil {
23985			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationVaultHealthRefreshFuture", "Result", vhd.Response.Response, "Failure responding to request")
23986		}
23987	}
23988	return
23989}
23990
23991// ReplicationvCentersCreateFuture an abstraction for monitoring and retrieving the results of a
23992// long-running operation.
23993type ReplicationvCentersCreateFuture struct {
23994	azure.FutureAPI
23995	// Result returns the result of the asynchronous operation.
23996	// If the operation has not completed it will return an error.
23997	Result func(ReplicationvCentersClient) (VCenter, error)
23998}
23999
24000// UnmarshalJSON is the custom unmarshaller for CreateFuture.
24001func (future *ReplicationvCentersCreateFuture) UnmarshalJSON(body []byte) error {
24002	var azFuture azure.Future
24003	if err := json.Unmarshal(body, &azFuture); err != nil {
24004		return err
24005	}
24006	future.FutureAPI = &azFuture
24007	future.Result = future.result
24008	return nil
24009}
24010
24011// result is the default implementation for ReplicationvCentersCreateFuture.Result.
24012func (future *ReplicationvCentersCreateFuture) result(client ReplicationvCentersClient) (vc VCenter, err error) {
24013	var done bool
24014	done, err = future.DoneWithContext(context.Background(), client)
24015	if err != nil {
24016		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationvCentersCreateFuture", "Result", future.Response(), "Polling failure")
24017		return
24018	}
24019	if !done {
24020		vc.Response.Response = future.Response()
24021		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationvCentersCreateFuture")
24022		return
24023	}
24024	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24025	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
24026		vc, err = client.CreateResponder(vc.Response.Response)
24027		if err != nil {
24028			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationvCentersCreateFuture", "Result", vc.Response.Response, "Failure responding to request")
24029		}
24030	}
24031	return
24032}
24033
24034// ReplicationvCentersDeleteFuture an abstraction for monitoring and retrieving the results of a
24035// long-running operation.
24036type ReplicationvCentersDeleteFuture struct {
24037	azure.FutureAPI
24038	// Result returns the result of the asynchronous operation.
24039	// If the operation has not completed it will return an error.
24040	Result func(ReplicationvCentersClient) (autorest.Response, error)
24041}
24042
24043// UnmarshalJSON is the custom unmarshaller for CreateFuture.
24044func (future *ReplicationvCentersDeleteFuture) UnmarshalJSON(body []byte) error {
24045	var azFuture azure.Future
24046	if err := json.Unmarshal(body, &azFuture); err != nil {
24047		return err
24048	}
24049	future.FutureAPI = &azFuture
24050	future.Result = future.result
24051	return nil
24052}
24053
24054// result is the default implementation for ReplicationvCentersDeleteFuture.Result.
24055func (future *ReplicationvCentersDeleteFuture) result(client ReplicationvCentersClient) (ar autorest.Response, err error) {
24056	var done bool
24057	done, err = future.DoneWithContext(context.Background(), client)
24058	if err != nil {
24059		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationvCentersDeleteFuture", "Result", future.Response(), "Polling failure")
24060		return
24061	}
24062	if !done {
24063		ar.Response = future.Response()
24064		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationvCentersDeleteFuture")
24065		return
24066	}
24067	ar.Response = future.Response()
24068	return
24069}
24070
24071// ReplicationvCentersUpdateFuture an abstraction for monitoring and retrieving the results of a
24072// long-running operation.
24073type ReplicationvCentersUpdateFuture struct {
24074	azure.FutureAPI
24075	// Result returns the result of the asynchronous operation.
24076	// If the operation has not completed it will return an error.
24077	Result func(ReplicationvCentersClient) (VCenter, error)
24078}
24079
24080// UnmarshalJSON is the custom unmarshaller for CreateFuture.
24081func (future *ReplicationvCentersUpdateFuture) UnmarshalJSON(body []byte) error {
24082	var azFuture azure.Future
24083	if err := json.Unmarshal(body, &azFuture); err != nil {
24084		return err
24085	}
24086	future.FutureAPI = &azFuture
24087	future.Result = future.result
24088	return nil
24089}
24090
24091// result is the default implementation for ReplicationvCentersUpdateFuture.Result.
24092func (future *ReplicationvCentersUpdateFuture) result(client ReplicationvCentersClient) (vc VCenter, err error) {
24093	var done bool
24094	done, err = future.DoneWithContext(context.Background(), client)
24095	if err != nil {
24096		err = autorest.NewErrorWithError(err, "siterecovery.ReplicationvCentersUpdateFuture", "Result", future.Response(), "Polling failure")
24097		return
24098	}
24099	if !done {
24100		vc.Response.Response = future.Response()
24101		err = azure.NewAsyncOpIncompleteError("siterecovery.ReplicationvCentersUpdateFuture")
24102		return
24103	}
24104	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
24105	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
24106		vc, err = client.UpdateResponder(vc.Response.Response)
24107		if err != nil {
24108			err = autorest.NewErrorWithError(err, "siterecovery.ReplicationvCentersUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
24109		}
24110	}
24111	return
24112}
24113
24114// ReprotectAgentDetails reprotect agent details.
24115type ReprotectAgentDetails struct {
24116	// ID - READ-ONLY; The reprotect agent Id.
24117	ID *string `json:"id,omitempty"`
24118	// Name - READ-ONLY; The reprotect agent name.
24119	Name *string `json:"name,omitempty"`
24120	// Version - READ-ONLY; The version.
24121	Version *string `json:"version,omitempty"`
24122	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the reprotect agent.
24123	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
24124	// Health - READ-ONLY; The health of the reprotect agent. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
24125	Health ProtectionHealth `json:"health,omitempty"`
24126	// HealthErrors - READ-ONLY; The health errors.
24127	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
24128}
24129
24130// MarshalJSON is the custom marshaler for ReprotectAgentDetails.
24131func (rad ReprotectAgentDetails) MarshalJSON() ([]byte, error) {
24132	objectMap := make(map[string]interface{})
24133	return json.Marshal(objectMap)
24134}
24135
24136// ResolveHealthError resolve health errors input properties.
24137type ResolveHealthError struct {
24138	// HealthErrorID - Health error id.
24139	HealthErrorID *string `json:"healthErrorId,omitempty"`
24140}
24141
24142// ResolveHealthInput resolve health input.
24143type ResolveHealthInput struct {
24144	// Properties - Disable resolve health input properties.
24145	Properties *ResolveHealthInputProperties `json:"properties,omitempty"`
24146}
24147
24148// ResolveHealthInputProperties resolve health input properties.
24149type ResolveHealthInputProperties struct {
24150	// HealthErrors - Health errors.
24151	HealthErrors *[]ResolveHealthError `json:"healthErrors,omitempty"`
24152}
24153
24154// Resource azure resource.
24155type Resource struct {
24156	// ID - READ-ONLY; Resource Id
24157	ID *string `json:"id,omitempty"`
24158	// Name - READ-ONLY; Resource Name
24159	Name *string `json:"name,omitempty"`
24160	// Type - READ-ONLY; Resource Type
24161	Type *string `json:"type,omitempty"`
24162	// Location - Resource Location
24163	Location *string `json:"location,omitempty"`
24164}
24165
24166// MarshalJSON is the custom marshaler for Resource.
24167func (r Resource) MarshalJSON() ([]byte, error) {
24168	objectMap := make(map[string]interface{})
24169	if r.Location != nil {
24170		objectMap["location"] = r.Location
24171	}
24172	return json.Marshal(objectMap)
24173}
24174
24175// ResourceHealthSummary base class to define the health summary of the resources contained under an Arm
24176// resource.
24177type ResourceHealthSummary struct {
24178	// ResourceCount - The count of total resources under the container.
24179	ResourceCount *int32 `json:"resourceCount,omitempty"`
24180	// Issues - The list of summary of health errors across the resources under the container.
24181	Issues *[]HealthErrorSummary `json:"issues,omitempty"`
24182}
24183
24184// ResumeJobParams resume job params.
24185type ResumeJobParams struct {
24186	// Properties - Resume job properties.
24187	Properties *ResumeJobParamsProperties `json:"properties,omitempty"`
24188}
24189
24190// ResumeJobParamsProperties resume job properties.
24191type ResumeJobParamsProperties struct {
24192	// Comments - Resume job comments.
24193	Comments *string `json:"comments,omitempty"`
24194}
24195
24196// RetentionVolume the retention details of the MT.
24197type RetentionVolume struct {
24198	// VolumeName - The volume name.
24199	VolumeName *string `json:"volumeName,omitempty"`
24200	// CapacityInBytes - The volume capacity.
24201	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
24202	// FreeSpaceInBytes - The free space available in this volume.
24203	FreeSpaceInBytes *int64 `json:"freeSpaceInBytes,omitempty"`
24204	// ThresholdPercentage - The threshold percentage.
24205	ThresholdPercentage *int32 `json:"thresholdPercentage,omitempty"`
24206}
24207
24208// ReverseReplicationInput reverse replication input.
24209type ReverseReplicationInput struct {
24210	// Properties - Reverse replication properties
24211	Properties *ReverseReplicationInputProperties `json:"properties,omitempty"`
24212}
24213
24214// ReverseReplicationInputProperties reverse replication input properties.
24215type ReverseReplicationInputProperties struct {
24216	// FailoverDirection - Failover direction.
24217	FailoverDirection *string `json:"failoverDirection,omitempty"`
24218	// ProviderSpecificDetails - Provider specific reverse replication input.
24219	ProviderSpecificDetails BasicReverseReplicationProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
24220}
24221
24222// UnmarshalJSON is the custom unmarshaler for ReverseReplicationInputProperties struct.
24223func (rrip *ReverseReplicationInputProperties) UnmarshalJSON(body []byte) error {
24224	var m map[string]*json.RawMessage
24225	err := json.Unmarshal(body, &m)
24226	if err != nil {
24227		return err
24228	}
24229	for k, v := range m {
24230		switch k {
24231		case "failoverDirection":
24232			if v != nil {
24233				var failoverDirection string
24234				err = json.Unmarshal(*v, &failoverDirection)
24235				if err != nil {
24236					return err
24237				}
24238				rrip.FailoverDirection = &failoverDirection
24239			}
24240		case "providerSpecificDetails":
24241			if v != nil {
24242				providerSpecificDetails, err := unmarshalBasicReverseReplicationProviderSpecificInput(*v)
24243				if err != nil {
24244					return err
24245				}
24246				rrip.ProviderSpecificDetails = providerSpecificDetails
24247			}
24248		}
24249	}
24250
24251	return nil
24252}
24253
24254// BasicReverseReplicationProviderSpecificInput provider specific reverse replication input.
24255type BasicReverseReplicationProviderSpecificInput interface {
24256	AsA2AReprotectInput() (*A2AReprotectInput, bool)
24257	AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool)
24258	AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool)
24259	AsInMageReprotectInput() (*InMageReprotectInput, bool)
24260	AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool)
24261}
24262
24263// ReverseReplicationProviderSpecificInput provider specific reverse replication input.
24264type ReverseReplicationProviderSpecificInput struct {
24265	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
24266	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
24267}
24268
24269func unmarshalBasicReverseReplicationProviderSpecificInput(body []byte) (BasicReverseReplicationProviderSpecificInput, error) {
24270	var m map[string]interface{}
24271	err := json.Unmarshal(body, &m)
24272	if err != nil {
24273		return nil, err
24274	}
24275
24276	switch m["instanceType"] {
24277	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A):
24278		var ari A2AReprotectInput
24279		err := json.Unmarshal(body, &ari)
24280		return ari, err
24281	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure):
24282		var hvrari HyperVReplicaAzureReprotectInput
24283		err := json.Unmarshal(body, &hvrari)
24284		return hvrari, err
24285	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2):
24286		var imavri InMageAzureV2ReprotectInput
24287		err := json.Unmarshal(body, &imavri)
24288		return imavri, err
24289	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage):
24290		var imri InMageReprotectInput
24291		err := json.Unmarshal(body, &imri)
24292		return imri, err
24293	default:
24294		var rrpsi ReverseReplicationProviderSpecificInput
24295		err := json.Unmarshal(body, &rrpsi)
24296		return rrpsi, err
24297	}
24298}
24299func unmarshalBasicReverseReplicationProviderSpecificInputArray(body []byte) ([]BasicReverseReplicationProviderSpecificInput, error) {
24300	var rawMessages []*json.RawMessage
24301	err := json.Unmarshal(body, &rawMessages)
24302	if err != nil {
24303		return nil, err
24304	}
24305
24306	rrpsiArray := make([]BasicReverseReplicationProviderSpecificInput, len(rawMessages))
24307
24308	for index, rawMessage := range rawMessages {
24309		rrpsi, err := unmarshalBasicReverseReplicationProviderSpecificInput(*rawMessage)
24310		if err != nil {
24311			return nil, err
24312		}
24313		rrpsiArray[index] = rrpsi
24314	}
24315	return rrpsiArray, nil
24316}
24317
24318// MarshalJSON is the custom marshaler for ReverseReplicationProviderSpecificInput.
24319func (rrpsi ReverseReplicationProviderSpecificInput) MarshalJSON() ([]byte, error) {
24320	rrpsi.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput
24321	objectMap := make(map[string]interface{})
24322	if rrpsi.InstanceType != "" {
24323		objectMap["instanceType"] = rrpsi.InstanceType
24324	}
24325	return json.Marshal(objectMap)
24326}
24327
24328// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
24329func (rrpsi ReverseReplicationProviderSpecificInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
24330	return nil, false
24331}
24332
24333// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
24334func (rrpsi ReverseReplicationProviderSpecificInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
24335	return nil, false
24336}
24337
24338// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
24339func (rrpsi ReverseReplicationProviderSpecificInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
24340	return nil, false
24341}
24342
24343// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
24344func (rrpsi ReverseReplicationProviderSpecificInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
24345	return nil, false
24346}
24347
24348// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
24349func (rrpsi ReverseReplicationProviderSpecificInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
24350	return &rrpsi, true
24351}
24352
24353// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
24354func (rrpsi ReverseReplicationProviderSpecificInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
24355	return &rrpsi, true
24356}
24357
24358// RoleAssignment azure role assignment details.
24359type RoleAssignment struct {
24360	// ID - The ARM Id of the role assignment.
24361	ID *string `json:"id,omitempty"`
24362	// Name - The name of the role assignment.
24363	Name *string `json:"name,omitempty"`
24364	// Scope - Role assignment scope.
24365	Scope *string `json:"scope,omitempty"`
24366	// PrincipalID - Principal Id.
24367	PrincipalID *string `json:"principalId,omitempty"`
24368	// RoleDefinitionID - Role definition id.
24369	RoleDefinitionID *string `json:"roleDefinitionId,omitempty"`
24370}
24371
24372// RunAsAccount CS Accounts Details.
24373type RunAsAccount struct {
24374	// AccountID - The CS RunAs account Id.
24375	AccountID *string `json:"accountId,omitempty"`
24376	// AccountName - The CS RunAs account name.
24377	AccountName *string `json:"accountName,omitempty"`
24378}
24379
24380// SanEnableProtectionInput san enable protection provider specific input.
24381type SanEnableProtectionInput struct {
24382	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
24383	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
24384}
24385
24386// MarshalJSON is the custom marshaler for SanEnableProtectionInput.
24387func (sepi SanEnableProtectionInput) MarshalJSON() ([]byte, error) {
24388	sepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan
24389	objectMap := make(map[string]interface{})
24390	if sepi.InstanceType != "" {
24391		objectMap["instanceType"] = sepi.InstanceType
24392	}
24393	return json.Marshal(objectMap)
24394}
24395
24396// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24397func (sepi SanEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
24398	return nil, false
24399}
24400
24401// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24402func (sepi SanEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
24403	return nil, false
24404}
24405
24406// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24407func (sepi SanEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
24408	return nil, false
24409}
24410
24411// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24412func (sepi SanEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
24413	return nil, false
24414}
24415
24416// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24417func (sepi SanEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
24418	return nil, false
24419}
24420
24421// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24422func (sepi SanEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
24423	return &sepi, true
24424}
24425
24426// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24427func (sepi SanEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
24428	return nil, false
24429}
24430
24431// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
24432func (sepi SanEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
24433	return &sepi, true
24434}
24435
24436// ScriptActionTaskDetails this class represents the script action task details.
24437type ScriptActionTaskDetails struct {
24438	// Name - The name.
24439	Name *string `json:"name,omitempty"`
24440	// Path - The path.
24441	Path *string `json:"path,omitempty"`
24442	// Output - The output.
24443	Output *string `json:"output,omitempty"`
24444	// IsPrimarySideScript - A value indicating whether it is a primary side script or not.
24445	IsPrimarySideScript *bool `json:"isPrimarySideScript,omitempty"`
24446	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
24447	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
24448}
24449
24450// MarshalJSON is the custom marshaler for ScriptActionTaskDetails.
24451func (satd ScriptActionTaskDetails) MarshalJSON() ([]byte, error) {
24452	satd.InstanceType = InstanceTypeScriptActionTaskDetails
24453	objectMap := make(map[string]interface{})
24454	if satd.Name != nil {
24455		objectMap["name"] = satd.Name
24456	}
24457	if satd.Path != nil {
24458		objectMap["path"] = satd.Path
24459	}
24460	if satd.Output != nil {
24461		objectMap["output"] = satd.Output
24462	}
24463	if satd.IsPrimarySideScript != nil {
24464		objectMap["isPrimarySideScript"] = satd.IsPrimarySideScript
24465	}
24466	if satd.InstanceType != "" {
24467		objectMap["instanceType"] = satd.InstanceType
24468	}
24469	return json.Marshal(objectMap)
24470}
24471
24472// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24473func (satd ScriptActionTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
24474	return nil, false
24475}
24476
24477// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24478func (satd ScriptActionTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
24479	return nil, false
24480}
24481
24482// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24483func (satd ScriptActionTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
24484	return nil, false
24485}
24486
24487// AsJobTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24488func (satd ScriptActionTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
24489	return nil, false
24490}
24491
24492// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24493func (satd ScriptActionTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
24494	return nil, false
24495}
24496
24497// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24498func (satd ScriptActionTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
24499	return &satd, true
24500}
24501
24502// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24503func (satd ScriptActionTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
24504	return nil, false
24505}
24506
24507// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24508func (satd ScriptActionTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
24509	return nil, false
24510}
24511
24512// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24513func (satd ScriptActionTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
24514	return nil, false
24515}
24516
24517// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
24518func (satd ScriptActionTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
24519	return &satd, true
24520}
24521
24522// ServiceError ASR error model
24523type ServiceError struct {
24524	// Code - Error code.
24525	Code *string `json:"code,omitempty"`
24526	// Message - Error message.
24527	Message *string `json:"message,omitempty"`
24528	// PossibleCauses - Possible causes of error.
24529	PossibleCauses *string `json:"possibleCauses,omitempty"`
24530	// RecommendedAction - Recommended action to resolve error.
24531	RecommendedAction *string `json:"recommendedAction,omitempty"`
24532	// ActivityID - Activity Id.
24533	ActivityID *string `json:"activityId,omitempty"`
24534}
24535
24536// BasicStorageAccountCustomDetails storage account custom input.
24537type BasicStorageAccountCustomDetails interface {
24538	AsExistingStorageAccount() (*ExistingStorageAccount, bool)
24539	AsStorageAccountCustomDetails() (*StorageAccountCustomDetails, bool)
24540}
24541
24542// StorageAccountCustomDetails storage account custom input.
24543type StorageAccountCustomDetails struct {
24544	// ResourceType - Possible values include: 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeStorageAccountCustomDetails', 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting'
24545	ResourceType ResourceTypeBasicStorageAccountCustomDetails `json:"resourceType,omitempty"`
24546}
24547
24548func unmarshalBasicStorageAccountCustomDetails(body []byte) (BasicStorageAccountCustomDetails, error) {
24549	var m map[string]interface{}
24550	err := json.Unmarshal(body, &m)
24551	if err != nil {
24552		return nil, err
24553	}
24554
24555	switch m["resourceType"] {
24556	case string(ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting):
24557		var esa ExistingStorageAccount
24558		err := json.Unmarshal(body, &esa)
24559		return esa, err
24560	default:
24561		var sacd StorageAccountCustomDetails
24562		err := json.Unmarshal(body, &sacd)
24563		return sacd, err
24564	}
24565}
24566func unmarshalBasicStorageAccountCustomDetailsArray(body []byte) ([]BasicStorageAccountCustomDetails, error) {
24567	var rawMessages []*json.RawMessage
24568	err := json.Unmarshal(body, &rawMessages)
24569	if err != nil {
24570		return nil, err
24571	}
24572
24573	sacdArray := make([]BasicStorageAccountCustomDetails, len(rawMessages))
24574
24575	for index, rawMessage := range rawMessages {
24576		sacd, err := unmarshalBasicStorageAccountCustomDetails(*rawMessage)
24577		if err != nil {
24578			return nil, err
24579		}
24580		sacdArray[index] = sacd
24581	}
24582	return sacdArray, nil
24583}
24584
24585// MarshalJSON is the custom marshaler for StorageAccountCustomDetails.
24586func (sacd StorageAccountCustomDetails) MarshalJSON() ([]byte, error) {
24587	sacd.ResourceType = ResourceTypeBasicStorageAccountCustomDetailsResourceTypeStorageAccountCustomDetails
24588	objectMap := make(map[string]interface{})
24589	if sacd.ResourceType != "" {
24590		objectMap["resourceType"] = sacd.ResourceType
24591	}
24592	return json.Marshal(objectMap)
24593}
24594
24595// AsExistingStorageAccount is the BasicStorageAccountCustomDetails implementation for StorageAccountCustomDetails.
24596func (sacd StorageAccountCustomDetails) AsExistingStorageAccount() (*ExistingStorageAccount, bool) {
24597	return nil, false
24598}
24599
24600// AsStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for StorageAccountCustomDetails.
24601func (sacd StorageAccountCustomDetails) AsStorageAccountCustomDetails() (*StorageAccountCustomDetails, bool) {
24602	return &sacd, true
24603}
24604
24605// AsBasicStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for StorageAccountCustomDetails.
24606func (sacd StorageAccountCustomDetails) AsBasicStorageAccountCustomDetails() (BasicStorageAccountCustomDetails, bool) {
24607	return &sacd, true
24608}
24609
24610// StorageClassification storage object definition.
24611type StorageClassification struct {
24612	autorest.Response `json:"-"`
24613	// Properties - Properties of the storage object.
24614	Properties *StorageClassificationProperties `json:"properties,omitempty"`
24615	// ID - READ-ONLY; Resource Id
24616	ID *string `json:"id,omitempty"`
24617	// Name - READ-ONLY; Resource Name
24618	Name *string `json:"name,omitempty"`
24619	// Type - READ-ONLY; Resource Type
24620	Type *string `json:"type,omitempty"`
24621	// Location - Resource Location
24622	Location *string `json:"location,omitempty"`
24623}
24624
24625// MarshalJSON is the custom marshaler for StorageClassification.
24626func (sc StorageClassification) MarshalJSON() ([]byte, error) {
24627	objectMap := make(map[string]interface{})
24628	if sc.Properties != nil {
24629		objectMap["properties"] = sc.Properties
24630	}
24631	if sc.Location != nil {
24632		objectMap["location"] = sc.Location
24633	}
24634	return json.Marshal(objectMap)
24635}
24636
24637// StorageClassificationCollection collection of storage details.
24638type StorageClassificationCollection struct {
24639	autorest.Response `json:"-"`
24640	// Value - The storage details.
24641	Value *[]StorageClassification `json:"value,omitempty"`
24642	// NextLink - The value of next link.
24643	NextLink *string `json:"nextLink,omitempty"`
24644}
24645
24646// StorageClassificationCollectionIterator provides access to a complete listing of StorageClassification
24647// values.
24648type StorageClassificationCollectionIterator struct {
24649	i    int
24650	page StorageClassificationCollectionPage
24651}
24652
24653// NextWithContext advances to the next value.  If there was an error making
24654// the request the iterator does not advance and the error is returned.
24655func (iter *StorageClassificationCollectionIterator) NextWithContext(ctx context.Context) (err error) {
24656	if tracing.IsEnabled() {
24657		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationCollectionIterator.NextWithContext")
24658		defer func() {
24659			sc := -1
24660			if iter.Response().Response.Response != nil {
24661				sc = iter.Response().Response.Response.StatusCode
24662			}
24663			tracing.EndSpan(ctx, sc, err)
24664		}()
24665	}
24666	iter.i++
24667	if iter.i < len(iter.page.Values()) {
24668		return nil
24669	}
24670	err = iter.page.NextWithContext(ctx)
24671	if err != nil {
24672		iter.i--
24673		return err
24674	}
24675	iter.i = 0
24676	return nil
24677}
24678
24679// Next advances to the next value.  If there was an error making
24680// the request the iterator does not advance and the error is returned.
24681// Deprecated: Use NextWithContext() instead.
24682func (iter *StorageClassificationCollectionIterator) Next() error {
24683	return iter.NextWithContext(context.Background())
24684}
24685
24686// NotDone returns true if the enumeration should be started or is not yet complete.
24687func (iter StorageClassificationCollectionIterator) NotDone() bool {
24688	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24689}
24690
24691// Response returns the raw server response from the last page request.
24692func (iter StorageClassificationCollectionIterator) Response() StorageClassificationCollection {
24693	return iter.page.Response()
24694}
24695
24696// Value returns the current value or a zero-initialized value if the
24697// iterator has advanced beyond the end of the collection.
24698func (iter StorageClassificationCollectionIterator) Value() StorageClassification {
24699	if !iter.page.NotDone() {
24700		return StorageClassification{}
24701	}
24702	return iter.page.Values()[iter.i]
24703}
24704
24705// Creates a new instance of the StorageClassificationCollectionIterator type.
24706func NewStorageClassificationCollectionIterator(page StorageClassificationCollectionPage) StorageClassificationCollectionIterator {
24707	return StorageClassificationCollectionIterator{page: page}
24708}
24709
24710// IsEmpty returns true if the ListResult contains no values.
24711func (scc StorageClassificationCollection) IsEmpty() bool {
24712	return scc.Value == nil || len(*scc.Value) == 0
24713}
24714
24715// hasNextLink returns true if the NextLink is not empty.
24716func (scc StorageClassificationCollection) hasNextLink() bool {
24717	return scc.NextLink != nil && len(*scc.NextLink) != 0
24718}
24719
24720// storageClassificationCollectionPreparer prepares a request to retrieve the next set of results.
24721// It returns nil if no more results exist.
24722func (scc StorageClassificationCollection) storageClassificationCollectionPreparer(ctx context.Context) (*http.Request, error) {
24723	if !scc.hasNextLink() {
24724		return nil, nil
24725	}
24726	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24727		autorest.AsJSON(),
24728		autorest.AsGet(),
24729		autorest.WithBaseURL(to.String(scc.NextLink)))
24730}
24731
24732// StorageClassificationCollectionPage contains a page of StorageClassification values.
24733type StorageClassificationCollectionPage struct {
24734	fn  func(context.Context, StorageClassificationCollection) (StorageClassificationCollection, error)
24735	scc StorageClassificationCollection
24736}
24737
24738// NextWithContext advances to the next page of values.  If there was an error making
24739// the request the page does not advance and the error is returned.
24740func (page *StorageClassificationCollectionPage) NextWithContext(ctx context.Context) (err error) {
24741	if tracing.IsEnabled() {
24742		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationCollectionPage.NextWithContext")
24743		defer func() {
24744			sc := -1
24745			if page.Response().Response.Response != nil {
24746				sc = page.Response().Response.Response.StatusCode
24747			}
24748			tracing.EndSpan(ctx, sc, err)
24749		}()
24750	}
24751	for {
24752		next, err := page.fn(ctx, page.scc)
24753		if err != nil {
24754			return err
24755		}
24756		page.scc = next
24757		if !next.hasNextLink() || !next.IsEmpty() {
24758			break
24759		}
24760	}
24761	return nil
24762}
24763
24764// Next advances to the next page of values.  If there was an error making
24765// the request the page does not advance and the error is returned.
24766// Deprecated: Use NextWithContext() instead.
24767func (page *StorageClassificationCollectionPage) Next() error {
24768	return page.NextWithContext(context.Background())
24769}
24770
24771// NotDone returns true if the page enumeration should be started or is not yet complete.
24772func (page StorageClassificationCollectionPage) NotDone() bool {
24773	return !page.scc.IsEmpty()
24774}
24775
24776// Response returns the raw server response from the last page request.
24777func (page StorageClassificationCollectionPage) Response() StorageClassificationCollection {
24778	return page.scc
24779}
24780
24781// Values returns the slice of values for the current page or nil if there are no values.
24782func (page StorageClassificationCollectionPage) Values() []StorageClassification {
24783	if page.scc.IsEmpty() {
24784		return nil
24785	}
24786	return *page.scc.Value
24787}
24788
24789// Creates a new instance of the StorageClassificationCollectionPage type.
24790func NewStorageClassificationCollectionPage(cur StorageClassificationCollection, getNextPage func(context.Context, StorageClassificationCollection) (StorageClassificationCollection, error)) StorageClassificationCollectionPage {
24791	return StorageClassificationCollectionPage{
24792		fn:  getNextPage,
24793		scc: cur,
24794	}
24795}
24796
24797// StorageClassificationMapping storage mapping object.
24798type StorageClassificationMapping struct {
24799	autorest.Response `json:"-"`
24800	// Properties - Properties of the storage mapping object.
24801	Properties *StorageClassificationMappingProperties `json:"properties,omitempty"`
24802	// ID - READ-ONLY; Resource Id
24803	ID *string `json:"id,omitempty"`
24804	// Name - READ-ONLY; Resource Name
24805	Name *string `json:"name,omitempty"`
24806	// Type - READ-ONLY; Resource Type
24807	Type *string `json:"type,omitempty"`
24808	// Location - Resource Location
24809	Location *string `json:"location,omitempty"`
24810}
24811
24812// MarshalJSON is the custom marshaler for StorageClassificationMapping.
24813func (scm StorageClassificationMapping) MarshalJSON() ([]byte, error) {
24814	objectMap := make(map[string]interface{})
24815	if scm.Properties != nil {
24816		objectMap["properties"] = scm.Properties
24817	}
24818	if scm.Location != nil {
24819		objectMap["location"] = scm.Location
24820	}
24821	return json.Marshal(objectMap)
24822}
24823
24824// StorageClassificationMappingCollection collection of storage mapping details.
24825type StorageClassificationMappingCollection struct {
24826	autorest.Response `json:"-"`
24827	// Value - The storage details.
24828	Value *[]StorageClassificationMapping `json:"value,omitempty"`
24829	// NextLink - The value of next link.
24830	NextLink *string `json:"nextLink,omitempty"`
24831}
24832
24833// StorageClassificationMappingCollectionIterator provides access to a complete listing of
24834// StorageClassificationMapping values.
24835type StorageClassificationMappingCollectionIterator struct {
24836	i    int
24837	page StorageClassificationMappingCollectionPage
24838}
24839
24840// NextWithContext advances to the next value.  If there was an error making
24841// the request the iterator does not advance and the error is returned.
24842func (iter *StorageClassificationMappingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
24843	if tracing.IsEnabled() {
24844		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationMappingCollectionIterator.NextWithContext")
24845		defer func() {
24846			sc := -1
24847			if iter.Response().Response.Response != nil {
24848				sc = iter.Response().Response.Response.StatusCode
24849			}
24850			tracing.EndSpan(ctx, sc, err)
24851		}()
24852	}
24853	iter.i++
24854	if iter.i < len(iter.page.Values()) {
24855		return nil
24856	}
24857	err = iter.page.NextWithContext(ctx)
24858	if err != nil {
24859		iter.i--
24860		return err
24861	}
24862	iter.i = 0
24863	return nil
24864}
24865
24866// Next advances to the next value.  If there was an error making
24867// the request the iterator does not advance and the error is returned.
24868// Deprecated: Use NextWithContext() instead.
24869func (iter *StorageClassificationMappingCollectionIterator) Next() error {
24870	return iter.NextWithContext(context.Background())
24871}
24872
24873// NotDone returns true if the enumeration should be started or is not yet complete.
24874func (iter StorageClassificationMappingCollectionIterator) NotDone() bool {
24875	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24876}
24877
24878// Response returns the raw server response from the last page request.
24879func (iter StorageClassificationMappingCollectionIterator) Response() StorageClassificationMappingCollection {
24880	return iter.page.Response()
24881}
24882
24883// Value returns the current value or a zero-initialized value if the
24884// iterator has advanced beyond the end of the collection.
24885func (iter StorageClassificationMappingCollectionIterator) Value() StorageClassificationMapping {
24886	if !iter.page.NotDone() {
24887		return StorageClassificationMapping{}
24888	}
24889	return iter.page.Values()[iter.i]
24890}
24891
24892// Creates a new instance of the StorageClassificationMappingCollectionIterator type.
24893func NewStorageClassificationMappingCollectionIterator(page StorageClassificationMappingCollectionPage) StorageClassificationMappingCollectionIterator {
24894	return StorageClassificationMappingCollectionIterator{page: page}
24895}
24896
24897// IsEmpty returns true if the ListResult contains no values.
24898func (scmc StorageClassificationMappingCollection) IsEmpty() bool {
24899	return scmc.Value == nil || len(*scmc.Value) == 0
24900}
24901
24902// hasNextLink returns true if the NextLink is not empty.
24903func (scmc StorageClassificationMappingCollection) hasNextLink() bool {
24904	return scmc.NextLink != nil && len(*scmc.NextLink) != 0
24905}
24906
24907// storageClassificationMappingCollectionPreparer prepares a request to retrieve the next set of results.
24908// It returns nil if no more results exist.
24909func (scmc StorageClassificationMappingCollection) storageClassificationMappingCollectionPreparer(ctx context.Context) (*http.Request, error) {
24910	if !scmc.hasNextLink() {
24911		return nil, nil
24912	}
24913	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24914		autorest.AsJSON(),
24915		autorest.AsGet(),
24916		autorest.WithBaseURL(to.String(scmc.NextLink)))
24917}
24918
24919// StorageClassificationMappingCollectionPage contains a page of StorageClassificationMapping values.
24920type StorageClassificationMappingCollectionPage struct {
24921	fn   func(context.Context, StorageClassificationMappingCollection) (StorageClassificationMappingCollection, error)
24922	scmc StorageClassificationMappingCollection
24923}
24924
24925// NextWithContext advances to the next page of values.  If there was an error making
24926// the request the page does not advance and the error is returned.
24927func (page *StorageClassificationMappingCollectionPage) NextWithContext(ctx context.Context) (err error) {
24928	if tracing.IsEnabled() {
24929		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationMappingCollectionPage.NextWithContext")
24930		defer func() {
24931			sc := -1
24932			if page.Response().Response.Response != nil {
24933				sc = page.Response().Response.Response.StatusCode
24934			}
24935			tracing.EndSpan(ctx, sc, err)
24936		}()
24937	}
24938	for {
24939		next, err := page.fn(ctx, page.scmc)
24940		if err != nil {
24941			return err
24942		}
24943		page.scmc = next
24944		if !next.hasNextLink() || !next.IsEmpty() {
24945			break
24946		}
24947	}
24948	return nil
24949}
24950
24951// Next advances to the next page of values.  If there was an error making
24952// the request the page does not advance and the error is returned.
24953// Deprecated: Use NextWithContext() instead.
24954func (page *StorageClassificationMappingCollectionPage) Next() error {
24955	return page.NextWithContext(context.Background())
24956}
24957
24958// NotDone returns true if the page enumeration should be started or is not yet complete.
24959func (page StorageClassificationMappingCollectionPage) NotDone() bool {
24960	return !page.scmc.IsEmpty()
24961}
24962
24963// Response returns the raw server response from the last page request.
24964func (page StorageClassificationMappingCollectionPage) Response() StorageClassificationMappingCollection {
24965	return page.scmc
24966}
24967
24968// Values returns the slice of values for the current page or nil if there are no values.
24969func (page StorageClassificationMappingCollectionPage) Values() []StorageClassificationMapping {
24970	if page.scmc.IsEmpty() {
24971		return nil
24972	}
24973	return *page.scmc.Value
24974}
24975
24976// Creates a new instance of the StorageClassificationMappingCollectionPage type.
24977func NewStorageClassificationMappingCollectionPage(cur StorageClassificationMappingCollection, getNextPage func(context.Context, StorageClassificationMappingCollection) (StorageClassificationMappingCollection, error)) StorageClassificationMappingCollectionPage {
24978	return StorageClassificationMappingCollectionPage{
24979		fn:   getNextPage,
24980		scmc: cur,
24981	}
24982}
24983
24984// StorageClassificationMappingInput storage mapping input.
24985type StorageClassificationMappingInput struct {
24986	// Properties - Storage mapping input properties.
24987	Properties *StorageMappingInputProperties `json:"properties,omitempty"`
24988}
24989
24990// StorageClassificationMappingProperties storage mapping properties.
24991type StorageClassificationMappingProperties struct {
24992	// TargetStorageClassificationID - Target storage object Id.
24993	TargetStorageClassificationID *string `json:"targetStorageClassificationId,omitempty"`
24994}
24995
24996// StorageClassificationProperties storage object properties.
24997type StorageClassificationProperties struct {
24998	// FriendlyName - Friendly name of the Storage classification.
24999	FriendlyName *string `json:"friendlyName,omitempty"`
25000}
25001
25002// StorageMappingInputProperties storage mapping input properties.
25003type StorageMappingInputProperties struct {
25004	// TargetStorageClassificationID - The ID of the storage object.
25005	TargetStorageClassificationID *string `json:"targetStorageClassificationId,omitempty"`
25006}
25007
25008// Subnet subnets of the network.
25009type Subnet struct {
25010	// Name - The subnet name.
25011	Name *string `json:"name,omitempty"`
25012	// FriendlyName - The subnet friendly name.
25013	FriendlyName *string `json:"friendlyName,omitempty"`
25014	// AddressList - The list of addresses for the subnet.
25015	AddressList *[]string `json:"addressList,omitempty"`
25016}
25017
25018// SupportedOperatingSystems response object for supported operating systems API.
25019type SupportedOperatingSystems struct {
25020	autorest.Response `json:"-"`
25021	// Properties - Properties model for supported OS API.
25022	Properties *SupportedOSProperties `json:"properties,omitempty"`
25023	// ID - READ-ONLY; Resource Id
25024	ID *string `json:"id,omitempty"`
25025	// Name - READ-ONLY; Resource Name
25026	Name *string `json:"name,omitempty"`
25027	// Type - READ-ONLY; Resource Type
25028	Type *string `json:"type,omitempty"`
25029	// Location - Resource Location
25030	Location *string `json:"location,omitempty"`
25031}
25032
25033// MarshalJSON is the custom marshaler for SupportedOperatingSystems.
25034func (sos SupportedOperatingSystems) MarshalJSON() ([]byte, error) {
25035	objectMap := make(map[string]interface{})
25036	if sos.Properties != nil {
25037		objectMap["properties"] = sos.Properties
25038	}
25039	if sos.Location != nil {
25040		objectMap["location"] = sos.Location
25041	}
25042	return json.Marshal(objectMap)
25043}
25044
25045// SupportedOSDetails supported Operating system details.
25046type SupportedOSDetails struct {
25047	// OsName - The name.
25048	OsName *string `json:"osName,omitempty"`
25049	// OsType - The type.
25050	OsType *string `json:"osType,omitempty"`
25051	// OsVersions - List of version for OS.
25052	OsVersions *[]OSVersionWrapper `json:"osVersions,omitempty"`
25053}
25054
25055// SupportedOSProperties properties model for supported OS API.
25056type SupportedOSProperties struct {
25057	// SupportedOsList - The supported OS List.
25058	SupportedOsList *[]SupportedOSProperty `json:"supportedOsList,omitempty"`
25059}
25060
25061// SupportedOSProperty property object for supported OS api.
25062type SupportedOSProperty struct {
25063	// InstanceType - READ-ONLY; Gets the replication provider type.
25064	InstanceType *string `json:"instanceType,omitempty"`
25065	// SupportedOs - List of supported OS.
25066	SupportedOs *[]SupportedOSDetails `json:"supportedOs,omitempty"`
25067}
25068
25069// MarshalJSON is the custom marshaler for SupportedOSProperty.
25070func (sop SupportedOSProperty) MarshalJSON() ([]byte, error) {
25071	objectMap := make(map[string]interface{})
25072	if sop.SupportedOs != nil {
25073		objectMap["supportedOs"] = sop.SupportedOs
25074	}
25075	return json.Marshal(objectMap)
25076}
25077
25078// SwitchProtectionInput switch protection input.
25079type SwitchProtectionInput struct {
25080	// Properties - Switch protection properties
25081	Properties *SwitchProtectionInputProperties `json:"properties,omitempty"`
25082}
25083
25084// SwitchProtectionInputProperties switch protection input properties.
25085type SwitchProtectionInputProperties struct {
25086	// ReplicationProtectedItemName - The unique replication protected item name.
25087	ReplicationProtectedItemName *string `json:"replicationProtectedItemName,omitempty"`
25088	// ProviderSpecificDetails - Provider specific switch protection input.
25089	ProviderSpecificDetails BasicSwitchProtectionProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
25090}
25091
25092// UnmarshalJSON is the custom unmarshaler for SwitchProtectionInputProperties struct.
25093func (spip *SwitchProtectionInputProperties) UnmarshalJSON(body []byte) error {
25094	var m map[string]*json.RawMessage
25095	err := json.Unmarshal(body, &m)
25096	if err != nil {
25097		return err
25098	}
25099	for k, v := range m {
25100		switch k {
25101		case "replicationProtectedItemName":
25102			if v != nil {
25103				var replicationProtectedItemName string
25104				err = json.Unmarshal(*v, &replicationProtectedItemName)
25105				if err != nil {
25106					return err
25107				}
25108				spip.ReplicationProtectedItemName = &replicationProtectedItemName
25109			}
25110		case "providerSpecificDetails":
25111			if v != nil {
25112				providerSpecificDetails, err := unmarshalBasicSwitchProtectionProviderSpecificInput(*v)
25113				if err != nil {
25114					return err
25115				}
25116				spip.ProviderSpecificDetails = providerSpecificDetails
25117			}
25118		}
25119	}
25120
25121	return nil
25122}
25123
25124// SwitchProtectionJobDetails this class represents details for switch protection job.
25125type SwitchProtectionJobDetails struct {
25126	// NewReplicationProtectedItemID - ARM Id of the new replication protected item.
25127	NewReplicationProtectedItemID *string `json:"newReplicationProtectedItemId,omitempty"`
25128	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
25129	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
25130	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
25131	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
25132}
25133
25134// MarshalJSON is the custom marshaler for SwitchProtectionJobDetails.
25135func (spjd SwitchProtectionJobDetails) MarshalJSON() ([]byte, error) {
25136	spjd.InstanceType = InstanceTypeSwitchProtectionJobDetails
25137	objectMap := make(map[string]interface{})
25138	if spjd.NewReplicationProtectedItemID != nil {
25139		objectMap["newReplicationProtectedItemId"] = spjd.NewReplicationProtectedItemID
25140	}
25141	if spjd.AffectedObjectDetails != nil {
25142		objectMap["affectedObjectDetails"] = spjd.AffectedObjectDetails
25143	}
25144	if spjd.InstanceType != "" {
25145		objectMap["instanceType"] = spjd.InstanceType
25146	}
25147	return json.Marshal(objectMap)
25148}
25149
25150// AsAsrJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
25151func (spjd SwitchProtectionJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
25152	return nil, false
25153}
25154
25155// AsExportJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
25156func (spjd SwitchProtectionJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
25157	return nil, false
25158}
25159
25160// AsFailoverJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
25161func (spjd SwitchProtectionJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
25162	return nil, false
25163}
25164
25165// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
25166func (spjd SwitchProtectionJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
25167	return &spjd, true
25168}
25169
25170// AsTestFailoverJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
25171func (spjd SwitchProtectionJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
25172	return nil, false
25173}
25174
25175// AsJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
25176func (spjd SwitchProtectionJobDetails) AsJobDetails() (*JobDetails, bool) {
25177	return nil, false
25178}
25179
25180// AsBasicJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
25181func (spjd SwitchProtectionJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
25182	return &spjd, true
25183}
25184
25185// BasicSwitchProtectionProviderSpecificInput provider specific switch protection input.
25186type BasicSwitchProtectionProviderSpecificInput interface {
25187	AsA2ASwitchProtectionInput() (*A2ASwitchProtectionInput, bool)
25188	AsSwitchProtectionProviderSpecificInput() (*SwitchProtectionProviderSpecificInput, bool)
25189}
25190
25191// SwitchProtectionProviderSpecificInput provider specific switch protection input.
25192type SwitchProtectionProviderSpecificInput struct {
25193	// InstanceType - Possible values include: 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeSwitchProtectionProviderSpecificInput', 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A'
25194	InstanceType InstanceTypeBasicSwitchProtectionProviderSpecificInput `json:"instanceType,omitempty"`
25195}
25196
25197func unmarshalBasicSwitchProtectionProviderSpecificInput(body []byte) (BasicSwitchProtectionProviderSpecificInput, error) {
25198	var m map[string]interface{}
25199	err := json.Unmarshal(body, &m)
25200	if err != nil {
25201		return nil, err
25202	}
25203
25204	switch m["instanceType"] {
25205	case string(InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A):
25206		var aspi A2ASwitchProtectionInput
25207		err := json.Unmarshal(body, &aspi)
25208		return aspi, err
25209	default:
25210		var sppsi SwitchProtectionProviderSpecificInput
25211		err := json.Unmarshal(body, &sppsi)
25212		return sppsi, err
25213	}
25214}
25215func unmarshalBasicSwitchProtectionProviderSpecificInputArray(body []byte) ([]BasicSwitchProtectionProviderSpecificInput, error) {
25216	var rawMessages []*json.RawMessage
25217	err := json.Unmarshal(body, &rawMessages)
25218	if err != nil {
25219		return nil, err
25220	}
25221
25222	sppsiArray := make([]BasicSwitchProtectionProviderSpecificInput, len(rawMessages))
25223
25224	for index, rawMessage := range rawMessages {
25225		sppsi, err := unmarshalBasicSwitchProtectionProviderSpecificInput(*rawMessage)
25226		if err != nil {
25227			return nil, err
25228		}
25229		sppsiArray[index] = sppsi
25230	}
25231	return sppsiArray, nil
25232}
25233
25234// MarshalJSON is the custom marshaler for SwitchProtectionProviderSpecificInput.
25235func (sppsi SwitchProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
25236	sppsi.InstanceType = InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeSwitchProtectionProviderSpecificInput
25237	objectMap := make(map[string]interface{})
25238	if sppsi.InstanceType != "" {
25239		objectMap["instanceType"] = sppsi.InstanceType
25240	}
25241	return json.Marshal(objectMap)
25242}
25243
25244// AsA2ASwitchProtectionInput is the BasicSwitchProtectionProviderSpecificInput implementation for SwitchProtectionProviderSpecificInput.
25245func (sppsi SwitchProtectionProviderSpecificInput) AsA2ASwitchProtectionInput() (*A2ASwitchProtectionInput, bool) {
25246	return nil, false
25247}
25248
25249// AsSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for SwitchProtectionProviderSpecificInput.
25250func (sppsi SwitchProtectionProviderSpecificInput) AsSwitchProtectionProviderSpecificInput() (*SwitchProtectionProviderSpecificInput, bool) {
25251	return &sppsi, true
25252}
25253
25254// AsBasicSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for SwitchProtectionProviderSpecificInput.
25255func (sppsi SwitchProtectionProviderSpecificInput) AsBasicSwitchProtectionProviderSpecificInput() (BasicSwitchProtectionProviderSpecificInput, bool) {
25256	return &sppsi, true
25257}
25258
25259// TargetComputeSize represents applicable recovery vm sizes.
25260type TargetComputeSize struct {
25261	// ID - The Id.
25262	ID *string `json:"id,omitempty"`
25263	// Name - The name.
25264	Name *string `json:"name,omitempty"`
25265	// Type - The Type of the object.
25266	Type *string `json:"type,omitempty"`
25267	// Properties - The custom data.
25268	Properties *TargetComputeSizeProperties `json:"properties,omitempty"`
25269}
25270
25271// TargetComputeSizeCollection target compute size collection.
25272type TargetComputeSizeCollection struct {
25273	autorest.Response `json:"-"`
25274	// Value - The list of target compute sizes.
25275	Value *[]TargetComputeSize `json:"value,omitempty"`
25276	// NextLink - The value of next link.
25277	NextLink *string `json:"nextLink,omitempty"`
25278}
25279
25280// TargetComputeSizeCollectionIterator provides access to a complete listing of TargetComputeSize values.
25281type TargetComputeSizeCollectionIterator struct {
25282	i    int
25283	page TargetComputeSizeCollectionPage
25284}
25285
25286// NextWithContext advances to the next value.  If there was an error making
25287// the request the iterator does not advance and the error is returned.
25288func (iter *TargetComputeSizeCollectionIterator) NextWithContext(ctx context.Context) (err error) {
25289	if tracing.IsEnabled() {
25290		ctx = tracing.StartSpan(ctx, fqdn+"/TargetComputeSizeCollectionIterator.NextWithContext")
25291		defer func() {
25292			sc := -1
25293			if iter.Response().Response.Response != nil {
25294				sc = iter.Response().Response.Response.StatusCode
25295			}
25296			tracing.EndSpan(ctx, sc, err)
25297		}()
25298	}
25299	iter.i++
25300	if iter.i < len(iter.page.Values()) {
25301		return nil
25302	}
25303	err = iter.page.NextWithContext(ctx)
25304	if err != nil {
25305		iter.i--
25306		return err
25307	}
25308	iter.i = 0
25309	return nil
25310}
25311
25312// Next advances to the next value.  If there was an error making
25313// the request the iterator does not advance and the error is returned.
25314// Deprecated: Use NextWithContext() instead.
25315func (iter *TargetComputeSizeCollectionIterator) Next() error {
25316	return iter.NextWithContext(context.Background())
25317}
25318
25319// NotDone returns true if the enumeration should be started or is not yet complete.
25320func (iter TargetComputeSizeCollectionIterator) NotDone() bool {
25321	return iter.page.NotDone() && iter.i < len(iter.page.Values())
25322}
25323
25324// Response returns the raw server response from the last page request.
25325func (iter TargetComputeSizeCollectionIterator) Response() TargetComputeSizeCollection {
25326	return iter.page.Response()
25327}
25328
25329// Value returns the current value or a zero-initialized value if the
25330// iterator has advanced beyond the end of the collection.
25331func (iter TargetComputeSizeCollectionIterator) Value() TargetComputeSize {
25332	if !iter.page.NotDone() {
25333		return TargetComputeSize{}
25334	}
25335	return iter.page.Values()[iter.i]
25336}
25337
25338// Creates a new instance of the TargetComputeSizeCollectionIterator type.
25339func NewTargetComputeSizeCollectionIterator(page TargetComputeSizeCollectionPage) TargetComputeSizeCollectionIterator {
25340	return TargetComputeSizeCollectionIterator{page: page}
25341}
25342
25343// IsEmpty returns true if the ListResult contains no values.
25344func (tcsc TargetComputeSizeCollection) IsEmpty() bool {
25345	return tcsc.Value == nil || len(*tcsc.Value) == 0
25346}
25347
25348// hasNextLink returns true if the NextLink is not empty.
25349func (tcsc TargetComputeSizeCollection) hasNextLink() bool {
25350	return tcsc.NextLink != nil && len(*tcsc.NextLink) != 0
25351}
25352
25353// targetComputeSizeCollectionPreparer prepares a request to retrieve the next set of results.
25354// It returns nil if no more results exist.
25355func (tcsc TargetComputeSizeCollection) targetComputeSizeCollectionPreparer(ctx context.Context) (*http.Request, error) {
25356	if !tcsc.hasNextLink() {
25357		return nil, nil
25358	}
25359	return autorest.Prepare((&http.Request{}).WithContext(ctx),
25360		autorest.AsJSON(),
25361		autorest.AsGet(),
25362		autorest.WithBaseURL(to.String(tcsc.NextLink)))
25363}
25364
25365// TargetComputeSizeCollectionPage contains a page of TargetComputeSize values.
25366type TargetComputeSizeCollectionPage struct {
25367	fn   func(context.Context, TargetComputeSizeCollection) (TargetComputeSizeCollection, error)
25368	tcsc TargetComputeSizeCollection
25369}
25370
25371// NextWithContext advances to the next page of values.  If there was an error making
25372// the request the page does not advance and the error is returned.
25373func (page *TargetComputeSizeCollectionPage) NextWithContext(ctx context.Context) (err error) {
25374	if tracing.IsEnabled() {
25375		ctx = tracing.StartSpan(ctx, fqdn+"/TargetComputeSizeCollectionPage.NextWithContext")
25376		defer func() {
25377			sc := -1
25378			if page.Response().Response.Response != nil {
25379				sc = page.Response().Response.Response.StatusCode
25380			}
25381			tracing.EndSpan(ctx, sc, err)
25382		}()
25383	}
25384	for {
25385		next, err := page.fn(ctx, page.tcsc)
25386		if err != nil {
25387			return err
25388		}
25389		page.tcsc = next
25390		if !next.hasNextLink() || !next.IsEmpty() {
25391			break
25392		}
25393	}
25394	return nil
25395}
25396
25397// Next advances to the next page of values.  If there was an error making
25398// the request the page does not advance and the error is returned.
25399// Deprecated: Use NextWithContext() instead.
25400func (page *TargetComputeSizeCollectionPage) Next() error {
25401	return page.NextWithContext(context.Background())
25402}
25403
25404// NotDone returns true if the page enumeration should be started or is not yet complete.
25405func (page TargetComputeSizeCollectionPage) NotDone() bool {
25406	return !page.tcsc.IsEmpty()
25407}
25408
25409// Response returns the raw server response from the last page request.
25410func (page TargetComputeSizeCollectionPage) Response() TargetComputeSizeCollection {
25411	return page.tcsc
25412}
25413
25414// Values returns the slice of values for the current page or nil if there are no values.
25415func (page TargetComputeSizeCollectionPage) Values() []TargetComputeSize {
25416	if page.tcsc.IsEmpty() {
25417		return nil
25418	}
25419	return *page.tcsc.Value
25420}
25421
25422// Creates a new instance of the TargetComputeSizeCollectionPage type.
25423func NewTargetComputeSizeCollectionPage(cur TargetComputeSizeCollection, getNextPage func(context.Context, TargetComputeSizeCollection) (TargetComputeSizeCollection, error)) TargetComputeSizeCollectionPage {
25424	return TargetComputeSizeCollectionPage{
25425		fn:   getNextPage,
25426		tcsc: cur,
25427	}
25428}
25429
25430// TargetComputeSizeProperties represents applicable recovery vm sizes properties.
25431type TargetComputeSizeProperties struct {
25432	// Name - Target compute size name.
25433	Name *string `json:"name,omitempty"`
25434	// FriendlyName - Target compute size display name.
25435	FriendlyName *string `json:"friendlyName,omitempty"`
25436	// CPUCoresCount - The maximum cpu cores count supported by target compute size.
25437	CPUCoresCount *int32 `json:"cpuCoresCount,omitempty"`
25438	// VCPUsAvailable - READ-ONLY; The Available vCPUs supported by target compute size.
25439	VCPUsAvailable *int32 `json:"vCPUsAvailable,omitempty"`
25440	// MemoryInGB - The maximum memory in GB supported by target compute size.
25441	MemoryInGB *float64 `json:"memoryInGB,omitempty"`
25442	// MaxDataDiskCount - The maximum data disks count supported by target compute size.
25443	MaxDataDiskCount *int32 `json:"maxDataDiskCount,omitempty"`
25444	// MaxNicsCount - The maximum Nics count supported by target compute size.
25445	MaxNicsCount *int32 `json:"maxNicsCount,omitempty"`
25446	// Errors - The reasons why the target compute size is not applicable for the protected item.
25447	Errors *[]ComputeSizeErrorDetails `json:"errors,omitempty"`
25448	// HighIopsSupported - The value indicating whether the target compute size supports high Iops.
25449	HighIopsSupported *string `json:"highIopsSupported,omitempty"`
25450	// HyperVGenerations - READ-ONLY; The supported HyperV Generations.
25451	HyperVGenerations *[]string `json:"hyperVGenerations,omitempty"`
25452}
25453
25454// MarshalJSON is the custom marshaler for TargetComputeSizeProperties.
25455func (tcsp TargetComputeSizeProperties) MarshalJSON() ([]byte, error) {
25456	objectMap := make(map[string]interface{})
25457	if tcsp.Name != nil {
25458		objectMap["name"] = tcsp.Name
25459	}
25460	if tcsp.FriendlyName != nil {
25461		objectMap["friendlyName"] = tcsp.FriendlyName
25462	}
25463	if tcsp.CPUCoresCount != nil {
25464		objectMap["cpuCoresCount"] = tcsp.CPUCoresCount
25465	}
25466	if tcsp.MemoryInGB != nil {
25467		objectMap["memoryInGB"] = tcsp.MemoryInGB
25468	}
25469	if tcsp.MaxDataDiskCount != nil {
25470		objectMap["maxDataDiskCount"] = tcsp.MaxDataDiskCount
25471	}
25472	if tcsp.MaxNicsCount != nil {
25473		objectMap["maxNicsCount"] = tcsp.MaxNicsCount
25474	}
25475	if tcsp.Errors != nil {
25476		objectMap["errors"] = tcsp.Errors
25477	}
25478	if tcsp.HighIopsSupported != nil {
25479		objectMap["highIopsSupported"] = tcsp.HighIopsSupported
25480	}
25481	return json.Marshal(objectMap)
25482}
25483
25484// BasicTaskTypeDetails task details based on specific task type.
25485type BasicTaskTypeDetails interface {
25486	AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool)
25487	AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool)
25488	AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool)
25489	AsJobTaskDetails() (*JobTaskDetails, bool)
25490	AsManualActionTaskDetails() (*ManualActionTaskDetails, bool)
25491	AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool)
25492	AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool)
25493	AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool)
25494	AsTaskTypeDetails() (*TaskTypeDetails, bool)
25495}
25496
25497// TaskTypeDetails task details based on specific task type.
25498type TaskTypeDetails struct {
25499	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
25500	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
25501}
25502
25503func unmarshalBasicTaskTypeDetails(body []byte) (BasicTaskTypeDetails, error) {
25504	var m map[string]interface{}
25505	err := json.Unmarshal(body, &m)
25506	if err != nil {
25507		return nil, err
25508	}
25509
25510	switch m["instanceType"] {
25511	case string(InstanceTypeAutomationRunbookTaskDetails):
25512		var artd AutomationRunbookTaskDetails
25513		err := json.Unmarshal(body, &artd)
25514		return artd, err
25515	case string(InstanceTypeConsistencyCheckTaskDetails):
25516		var cctd ConsistencyCheckTaskDetails
25517		err := json.Unmarshal(body, &cctd)
25518		return cctd, err
25519	case string(InstanceTypeFabricReplicationGroupTaskDetails):
25520		var frgtd FabricReplicationGroupTaskDetails
25521		err := json.Unmarshal(body, &frgtd)
25522		return frgtd, err
25523	case string(InstanceTypeJobTaskDetails):
25524		var jtd JobTaskDetails
25525		err := json.Unmarshal(body, &jtd)
25526		return jtd, err
25527	case string(InstanceTypeManualActionTaskDetails):
25528		var matd ManualActionTaskDetails
25529		err := json.Unmarshal(body, &matd)
25530		return matd, err
25531	case string(InstanceTypeScriptActionTaskDetails):
25532		var satd ScriptActionTaskDetails
25533		err := json.Unmarshal(body, &satd)
25534		return satd, err
25535	case string(InstanceTypeVirtualMachineTaskDetails):
25536		var vmtd VirtualMachineTaskDetails
25537		err := json.Unmarshal(body, &vmtd)
25538		return vmtd, err
25539	case string(InstanceTypeVMNicUpdatesTaskDetails):
25540		var vnutd VMNicUpdatesTaskDetails
25541		err := json.Unmarshal(body, &vnutd)
25542		return vnutd, err
25543	default:
25544		var ttd TaskTypeDetails
25545		err := json.Unmarshal(body, &ttd)
25546		return ttd, err
25547	}
25548}
25549func unmarshalBasicTaskTypeDetailsArray(body []byte) ([]BasicTaskTypeDetails, error) {
25550	var rawMessages []*json.RawMessage
25551	err := json.Unmarshal(body, &rawMessages)
25552	if err != nil {
25553		return nil, err
25554	}
25555
25556	ttdArray := make([]BasicTaskTypeDetails, len(rawMessages))
25557
25558	for index, rawMessage := range rawMessages {
25559		ttd, err := unmarshalBasicTaskTypeDetails(*rawMessage)
25560		if err != nil {
25561			return nil, err
25562		}
25563		ttdArray[index] = ttd
25564	}
25565	return ttdArray, nil
25566}
25567
25568// MarshalJSON is the custom marshaler for TaskTypeDetails.
25569func (ttd TaskTypeDetails) MarshalJSON() ([]byte, error) {
25570	ttd.InstanceType = InstanceTypeTaskTypeDetails
25571	objectMap := make(map[string]interface{})
25572	if ttd.InstanceType != "" {
25573		objectMap["instanceType"] = ttd.InstanceType
25574	}
25575	return json.Marshal(objectMap)
25576}
25577
25578// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25579func (ttd TaskTypeDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
25580	return nil, false
25581}
25582
25583// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25584func (ttd TaskTypeDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
25585	return nil, false
25586}
25587
25588// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25589func (ttd TaskTypeDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
25590	return nil, false
25591}
25592
25593// AsJobTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25594func (ttd TaskTypeDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
25595	return nil, false
25596}
25597
25598// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25599func (ttd TaskTypeDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
25600	return nil, false
25601}
25602
25603// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25604func (ttd TaskTypeDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
25605	return nil, false
25606}
25607
25608// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25609func (ttd TaskTypeDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
25610	return nil, false
25611}
25612
25613// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25614func (ttd TaskTypeDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
25615	return nil, false
25616}
25617
25618// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25619func (ttd TaskTypeDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
25620	return &ttd, true
25621}
25622
25623// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
25624func (ttd TaskTypeDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
25625	return &ttd, true
25626}
25627
25628// TestFailoverCleanupInput input definition for test failover cleanup.
25629type TestFailoverCleanupInput struct {
25630	// Properties - Test failover cleanup input properties.
25631	Properties *TestFailoverCleanupInputProperties `json:"properties,omitempty"`
25632}
25633
25634// TestFailoverCleanupInputProperties input definition for test failover cleanup input properties.
25635type TestFailoverCleanupInputProperties struct {
25636	// Comments - Test failover cleanup comments.
25637	Comments *string `json:"comments,omitempty"`
25638}
25639
25640// TestFailoverInput input definition for test failover.
25641type TestFailoverInput struct {
25642	// Properties - test failover input properties
25643	Properties *TestFailoverInputProperties `json:"properties,omitempty"`
25644}
25645
25646// TestFailoverInputProperties input definition for test failover input properties.
25647type TestFailoverInputProperties struct {
25648	// FailoverDirection - Test failover direction.
25649	FailoverDirection *string `json:"failoverDirection,omitempty"`
25650	// NetworkType - Network type to be used for test failover.
25651	NetworkType *string `json:"networkType,omitempty"`
25652	// NetworkID - The id of the network to be used for test failover
25653	NetworkID *string `json:"networkId,omitempty"`
25654	// SkipTestFailoverCleanup - A value indicating whether the test failover cleanup is to be skipped.
25655	SkipTestFailoverCleanup *string `json:"skipTestFailoverCleanup,omitempty"`
25656	// ProviderSpecificDetails - Provider specific settings
25657	ProviderSpecificDetails BasicTestFailoverProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
25658}
25659
25660// UnmarshalJSON is the custom unmarshaler for TestFailoverInputProperties struct.
25661func (tfip *TestFailoverInputProperties) UnmarshalJSON(body []byte) error {
25662	var m map[string]*json.RawMessage
25663	err := json.Unmarshal(body, &m)
25664	if err != nil {
25665		return err
25666	}
25667	for k, v := range m {
25668		switch k {
25669		case "failoverDirection":
25670			if v != nil {
25671				var failoverDirection string
25672				err = json.Unmarshal(*v, &failoverDirection)
25673				if err != nil {
25674					return err
25675				}
25676				tfip.FailoverDirection = &failoverDirection
25677			}
25678		case "networkType":
25679			if v != nil {
25680				var networkType string
25681				err = json.Unmarshal(*v, &networkType)
25682				if err != nil {
25683					return err
25684				}
25685				tfip.NetworkType = &networkType
25686			}
25687		case "networkId":
25688			if v != nil {
25689				var networkID string
25690				err = json.Unmarshal(*v, &networkID)
25691				if err != nil {
25692					return err
25693				}
25694				tfip.NetworkID = &networkID
25695			}
25696		case "skipTestFailoverCleanup":
25697			if v != nil {
25698				var skipTestFailoverCleanup string
25699				err = json.Unmarshal(*v, &skipTestFailoverCleanup)
25700				if err != nil {
25701					return err
25702				}
25703				tfip.SkipTestFailoverCleanup = &skipTestFailoverCleanup
25704			}
25705		case "providerSpecificDetails":
25706			if v != nil {
25707				providerSpecificDetails, err := unmarshalBasicTestFailoverProviderSpecificInput(*v)
25708				if err != nil {
25709					return err
25710				}
25711				tfip.ProviderSpecificDetails = providerSpecificDetails
25712			}
25713		}
25714	}
25715
25716	return nil
25717}
25718
25719// TestFailoverJobDetails this class represents the details for a test failover job.
25720type TestFailoverJobDetails struct {
25721	// TestFailoverStatus - The test failover status.
25722	TestFailoverStatus *string `json:"testFailoverStatus,omitempty"`
25723	// Comments - The test failover comments.
25724	Comments *string `json:"comments,omitempty"`
25725	// NetworkName - The test network name.
25726	NetworkName *string `json:"networkName,omitempty"`
25727	// NetworkFriendlyName - The test network friendly name.
25728	NetworkFriendlyName *string `json:"networkFriendlyName,omitempty"`
25729	// NetworkType - The test network type (see TestFailoverInput enum for possible values).
25730	NetworkType *string `json:"networkType,omitempty"`
25731	// ProtectedItemDetails - The test VM details.
25732	ProtectedItemDetails *[]FailoverReplicationProtectedItemDetails `json:"protectedItemDetails,omitempty"`
25733	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
25734	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
25735	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
25736	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
25737}
25738
25739// MarshalJSON is the custom marshaler for TestFailoverJobDetails.
25740func (tfjd TestFailoverJobDetails) MarshalJSON() ([]byte, error) {
25741	tfjd.InstanceType = InstanceTypeTestFailoverJobDetails
25742	objectMap := make(map[string]interface{})
25743	if tfjd.TestFailoverStatus != nil {
25744		objectMap["testFailoverStatus"] = tfjd.TestFailoverStatus
25745	}
25746	if tfjd.Comments != nil {
25747		objectMap["comments"] = tfjd.Comments
25748	}
25749	if tfjd.NetworkName != nil {
25750		objectMap["networkName"] = tfjd.NetworkName
25751	}
25752	if tfjd.NetworkFriendlyName != nil {
25753		objectMap["networkFriendlyName"] = tfjd.NetworkFriendlyName
25754	}
25755	if tfjd.NetworkType != nil {
25756		objectMap["networkType"] = tfjd.NetworkType
25757	}
25758	if tfjd.ProtectedItemDetails != nil {
25759		objectMap["protectedItemDetails"] = tfjd.ProtectedItemDetails
25760	}
25761	if tfjd.AffectedObjectDetails != nil {
25762		objectMap["affectedObjectDetails"] = tfjd.AffectedObjectDetails
25763	}
25764	if tfjd.InstanceType != "" {
25765		objectMap["instanceType"] = tfjd.InstanceType
25766	}
25767	return json.Marshal(objectMap)
25768}
25769
25770// AsAsrJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
25771func (tfjd TestFailoverJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
25772	return nil, false
25773}
25774
25775// AsExportJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
25776func (tfjd TestFailoverJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
25777	return nil, false
25778}
25779
25780// AsFailoverJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
25781func (tfjd TestFailoverJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
25782	return nil, false
25783}
25784
25785// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
25786func (tfjd TestFailoverJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
25787	return nil, false
25788}
25789
25790// AsTestFailoverJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
25791func (tfjd TestFailoverJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
25792	return &tfjd, true
25793}
25794
25795// AsJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
25796func (tfjd TestFailoverJobDetails) AsJobDetails() (*JobDetails, bool) {
25797	return nil, false
25798}
25799
25800// AsBasicJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
25801func (tfjd TestFailoverJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
25802	return &tfjd, true
25803}
25804
25805// BasicTestFailoverProviderSpecificInput provider specific test failover input.
25806type BasicTestFailoverProviderSpecificInput interface {
25807	AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool)
25808	AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool)
25809	AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool)
25810	AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool)
25811	AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool)
25812	AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool)
25813}
25814
25815// TestFailoverProviderSpecificInput provider specific test failover input.
25816type TestFailoverProviderSpecificInput struct {
25817	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
25818	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
25819}
25820
25821func unmarshalBasicTestFailoverProviderSpecificInput(body []byte) (BasicTestFailoverProviderSpecificInput, error) {
25822	var m map[string]interface{}
25823	err := json.Unmarshal(body, &m)
25824	if err != nil {
25825		return nil, err
25826	}
25827
25828	switch m["instanceType"] {
25829	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A):
25830		var atfi A2ATestFailoverInput
25831		err := json.Unmarshal(body, &atfi)
25832		return atfi, err
25833	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure):
25834		var hvratfi HyperVReplicaAzureTestFailoverInput
25835		err := json.Unmarshal(body, &hvratfi)
25836		return hvratfi, err
25837	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2):
25838		var imavtfi InMageAzureV2TestFailoverInput
25839		err := json.Unmarshal(body, &imavtfi)
25840		return imavtfi, err
25841	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm):
25842		var imrtfi InMageRcmTestFailoverInput
25843		err := json.Unmarshal(body, &imrtfi)
25844		return imrtfi, err
25845	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage):
25846		var imtfi InMageTestFailoverInput
25847		err := json.Unmarshal(body, &imtfi)
25848		return imtfi, err
25849	default:
25850		var tfpsi TestFailoverProviderSpecificInput
25851		err := json.Unmarshal(body, &tfpsi)
25852		return tfpsi, err
25853	}
25854}
25855func unmarshalBasicTestFailoverProviderSpecificInputArray(body []byte) ([]BasicTestFailoverProviderSpecificInput, error) {
25856	var rawMessages []*json.RawMessage
25857	err := json.Unmarshal(body, &rawMessages)
25858	if err != nil {
25859		return nil, err
25860	}
25861
25862	tfpsiArray := make([]BasicTestFailoverProviderSpecificInput, len(rawMessages))
25863
25864	for index, rawMessage := range rawMessages {
25865		tfpsi, err := unmarshalBasicTestFailoverProviderSpecificInput(*rawMessage)
25866		if err != nil {
25867			return nil, err
25868		}
25869		tfpsiArray[index] = tfpsi
25870	}
25871	return tfpsiArray, nil
25872}
25873
25874// MarshalJSON is the custom marshaler for TestFailoverProviderSpecificInput.
25875func (tfpsi TestFailoverProviderSpecificInput) MarshalJSON() ([]byte, error) {
25876	tfpsi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput
25877	objectMap := make(map[string]interface{})
25878	if tfpsi.InstanceType != "" {
25879		objectMap["instanceType"] = tfpsi.InstanceType
25880	}
25881	return json.Marshal(objectMap)
25882}
25883
25884// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
25885func (tfpsi TestFailoverProviderSpecificInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
25886	return nil, false
25887}
25888
25889// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
25890func (tfpsi TestFailoverProviderSpecificInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
25891	return nil, false
25892}
25893
25894// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
25895func (tfpsi TestFailoverProviderSpecificInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
25896	return nil, false
25897}
25898
25899// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
25900func (tfpsi TestFailoverProviderSpecificInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
25901	return nil, false
25902}
25903
25904// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
25905func (tfpsi TestFailoverProviderSpecificInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
25906	return nil, false
25907}
25908
25909// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
25910func (tfpsi TestFailoverProviderSpecificInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
25911	return &tfpsi, true
25912}
25913
25914// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
25915func (tfpsi TestFailoverProviderSpecificInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
25916	return &tfpsi, true
25917}
25918
25919// TestMigrateCleanupInput input for test migrate cleanup.
25920type TestMigrateCleanupInput struct {
25921	// Properties - Test migrate cleanup input properties.
25922	Properties *TestMigrateCleanupInputProperties `json:"properties,omitempty"`
25923}
25924
25925// TestMigrateCleanupInputProperties test migrate cleanup input properties.
25926type TestMigrateCleanupInputProperties struct {
25927	// Comments - Test migrate cleanup comments.
25928	Comments *string `json:"comments,omitempty"`
25929}
25930
25931// TestMigrateInput input for test migrate.
25932type TestMigrateInput struct {
25933	// Properties - Test migrate input properties.
25934	Properties *TestMigrateInputProperties `json:"properties,omitempty"`
25935}
25936
25937// TestMigrateInputProperties test migrate input properties.
25938type TestMigrateInputProperties struct {
25939	// ProviderSpecificDetails - The provider specific details.
25940	ProviderSpecificDetails BasicTestMigrateProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
25941}
25942
25943// UnmarshalJSON is the custom unmarshaler for TestMigrateInputProperties struct.
25944func (tmip *TestMigrateInputProperties) UnmarshalJSON(body []byte) error {
25945	var m map[string]*json.RawMessage
25946	err := json.Unmarshal(body, &m)
25947	if err != nil {
25948		return err
25949	}
25950	for k, v := range m {
25951		switch k {
25952		case "providerSpecificDetails":
25953			if v != nil {
25954				providerSpecificDetails, err := unmarshalBasicTestMigrateProviderSpecificInput(*v)
25955				if err != nil {
25956					return err
25957				}
25958				tmip.ProviderSpecificDetails = providerSpecificDetails
25959			}
25960		}
25961	}
25962
25963	return nil
25964}
25965
25966// BasicTestMigrateProviderSpecificInput test migrate provider specific input.
25967type BasicTestMigrateProviderSpecificInput interface {
25968	AsVMwareCbtTestMigrateInput() (*VMwareCbtTestMigrateInput, bool)
25969	AsTestMigrateProviderSpecificInput() (*TestMigrateProviderSpecificInput, bool)
25970}
25971
25972// TestMigrateProviderSpecificInput test migrate provider specific input.
25973type TestMigrateProviderSpecificInput struct {
25974	// InstanceType - Possible values include: 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeTestMigrateProviderSpecificInput', 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt'
25975	InstanceType InstanceTypeBasicTestMigrateProviderSpecificInput `json:"instanceType,omitempty"`
25976}
25977
25978func unmarshalBasicTestMigrateProviderSpecificInput(body []byte) (BasicTestMigrateProviderSpecificInput, error) {
25979	var m map[string]interface{}
25980	err := json.Unmarshal(body, &m)
25981	if err != nil {
25982		return nil, err
25983	}
25984
25985	switch m["instanceType"] {
25986	case string(InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt):
25987		var vmctmi VMwareCbtTestMigrateInput
25988		err := json.Unmarshal(body, &vmctmi)
25989		return vmctmi, err
25990	default:
25991		var tmpsi TestMigrateProviderSpecificInput
25992		err := json.Unmarshal(body, &tmpsi)
25993		return tmpsi, err
25994	}
25995}
25996func unmarshalBasicTestMigrateProviderSpecificInputArray(body []byte) ([]BasicTestMigrateProviderSpecificInput, error) {
25997	var rawMessages []*json.RawMessage
25998	err := json.Unmarshal(body, &rawMessages)
25999	if err != nil {
26000		return nil, err
26001	}
26002
26003	tmpsiArray := make([]BasicTestMigrateProviderSpecificInput, len(rawMessages))
26004
26005	for index, rawMessage := range rawMessages {
26006		tmpsi, err := unmarshalBasicTestMigrateProviderSpecificInput(*rawMessage)
26007		if err != nil {
26008			return nil, err
26009		}
26010		tmpsiArray[index] = tmpsi
26011	}
26012	return tmpsiArray, nil
26013}
26014
26015// MarshalJSON is the custom marshaler for TestMigrateProviderSpecificInput.
26016func (tmpsi TestMigrateProviderSpecificInput) MarshalJSON() ([]byte, error) {
26017	tmpsi.InstanceType = InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeTestMigrateProviderSpecificInput
26018	objectMap := make(map[string]interface{})
26019	if tmpsi.InstanceType != "" {
26020		objectMap["instanceType"] = tmpsi.InstanceType
26021	}
26022	return json.Marshal(objectMap)
26023}
26024
26025// AsVMwareCbtTestMigrateInput is the BasicTestMigrateProviderSpecificInput implementation for TestMigrateProviderSpecificInput.
26026func (tmpsi TestMigrateProviderSpecificInput) AsVMwareCbtTestMigrateInput() (*VMwareCbtTestMigrateInput, bool) {
26027	return nil, false
26028}
26029
26030// AsTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for TestMigrateProviderSpecificInput.
26031func (tmpsi TestMigrateProviderSpecificInput) AsTestMigrateProviderSpecificInput() (*TestMigrateProviderSpecificInput, bool) {
26032	return &tmpsi, true
26033}
26034
26035// AsBasicTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for TestMigrateProviderSpecificInput.
26036func (tmpsi TestMigrateProviderSpecificInput) AsBasicTestMigrateProviderSpecificInput() (BasicTestMigrateProviderSpecificInput, bool) {
26037	return &tmpsi, true
26038}
26039
26040// UnplannedFailoverInput input definition for unplanned failover.
26041type UnplannedFailoverInput struct {
26042	// Properties - Unplanned failover input properties.
26043	Properties *UnplannedFailoverInputProperties `json:"properties,omitempty"`
26044}
26045
26046// UnplannedFailoverInputProperties input definition for unplanned failover input properties.
26047type UnplannedFailoverInputProperties struct {
26048	// FailoverDirection - Failover direction.
26049	FailoverDirection *string `json:"failoverDirection,omitempty"`
26050	// SourceSiteOperations - Source site operations status
26051	SourceSiteOperations *string `json:"sourceSiteOperations,omitempty"`
26052	// ProviderSpecificDetails - Provider specific settings
26053	ProviderSpecificDetails BasicUnplannedFailoverProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
26054}
26055
26056// UnmarshalJSON is the custom unmarshaler for UnplannedFailoverInputProperties struct.
26057func (ufip *UnplannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
26058	var m map[string]*json.RawMessage
26059	err := json.Unmarshal(body, &m)
26060	if err != nil {
26061		return err
26062	}
26063	for k, v := range m {
26064		switch k {
26065		case "failoverDirection":
26066			if v != nil {
26067				var failoverDirection string
26068				err = json.Unmarshal(*v, &failoverDirection)
26069				if err != nil {
26070					return err
26071				}
26072				ufip.FailoverDirection = &failoverDirection
26073			}
26074		case "sourceSiteOperations":
26075			if v != nil {
26076				var sourceSiteOperations string
26077				err = json.Unmarshal(*v, &sourceSiteOperations)
26078				if err != nil {
26079					return err
26080				}
26081				ufip.SourceSiteOperations = &sourceSiteOperations
26082			}
26083		case "providerSpecificDetails":
26084			if v != nil {
26085				providerSpecificDetails, err := unmarshalBasicUnplannedFailoverProviderSpecificInput(*v)
26086				if err != nil {
26087					return err
26088				}
26089				ufip.ProviderSpecificDetails = providerSpecificDetails
26090			}
26091		}
26092	}
26093
26094	return nil
26095}
26096
26097// BasicUnplannedFailoverProviderSpecificInput provider specific unplanned failover input.
26098type BasicUnplannedFailoverProviderSpecificInput interface {
26099	AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool)
26100	AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool)
26101	AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool)
26102	AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool)
26103	AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool)
26104	AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool)
26105}
26106
26107// UnplannedFailoverProviderSpecificInput provider specific unplanned failover input.
26108type UnplannedFailoverProviderSpecificInput struct {
26109	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
26110	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
26111}
26112
26113func unmarshalBasicUnplannedFailoverProviderSpecificInput(body []byte) (BasicUnplannedFailoverProviderSpecificInput, error) {
26114	var m map[string]interface{}
26115	err := json.Unmarshal(body, &m)
26116	if err != nil {
26117		return nil, err
26118	}
26119
26120	switch m["instanceType"] {
26121	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A):
26122		var aufi A2AUnplannedFailoverInput
26123		err := json.Unmarshal(body, &aufi)
26124		return aufi, err
26125	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure):
26126		var hvraufi HyperVReplicaAzureUnplannedFailoverInput
26127		err := json.Unmarshal(body, &hvraufi)
26128		return hvraufi, err
26129	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2):
26130		var imavufi InMageAzureV2UnplannedFailoverInput
26131		err := json.Unmarshal(body, &imavufi)
26132		return imavufi, err
26133	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm):
26134		var imrufi InMageRcmUnplannedFailoverInput
26135		err := json.Unmarshal(body, &imrufi)
26136		return imrufi, err
26137	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage):
26138		var imufi InMageUnplannedFailoverInput
26139		err := json.Unmarshal(body, &imufi)
26140		return imufi, err
26141	default:
26142		var ufpsi UnplannedFailoverProviderSpecificInput
26143		err := json.Unmarshal(body, &ufpsi)
26144		return ufpsi, err
26145	}
26146}
26147func unmarshalBasicUnplannedFailoverProviderSpecificInputArray(body []byte) ([]BasicUnplannedFailoverProviderSpecificInput, error) {
26148	var rawMessages []*json.RawMessage
26149	err := json.Unmarshal(body, &rawMessages)
26150	if err != nil {
26151		return nil, err
26152	}
26153
26154	ufpsiArray := make([]BasicUnplannedFailoverProviderSpecificInput, len(rawMessages))
26155
26156	for index, rawMessage := range rawMessages {
26157		ufpsi, err := unmarshalBasicUnplannedFailoverProviderSpecificInput(*rawMessage)
26158		if err != nil {
26159			return nil, err
26160		}
26161		ufpsiArray[index] = ufpsi
26162	}
26163	return ufpsiArray, nil
26164}
26165
26166// MarshalJSON is the custom marshaler for UnplannedFailoverProviderSpecificInput.
26167func (ufpsi UnplannedFailoverProviderSpecificInput) MarshalJSON() ([]byte, error) {
26168	ufpsi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput
26169	objectMap := make(map[string]interface{})
26170	if ufpsi.InstanceType != "" {
26171		objectMap["instanceType"] = ufpsi.InstanceType
26172	}
26173	return json.Marshal(objectMap)
26174}
26175
26176// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
26177func (ufpsi UnplannedFailoverProviderSpecificInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
26178	return nil, false
26179}
26180
26181// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
26182func (ufpsi UnplannedFailoverProviderSpecificInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
26183	return nil, false
26184}
26185
26186// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
26187func (ufpsi UnplannedFailoverProviderSpecificInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
26188	return nil, false
26189}
26190
26191// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
26192func (ufpsi UnplannedFailoverProviderSpecificInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
26193	return nil, false
26194}
26195
26196// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
26197func (ufpsi UnplannedFailoverProviderSpecificInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
26198	return nil, false
26199}
26200
26201// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
26202func (ufpsi UnplannedFailoverProviderSpecificInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
26203	return &ufpsi, true
26204}
26205
26206// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
26207func (ufpsi UnplannedFailoverProviderSpecificInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
26208	return &ufpsi, true
26209}
26210
26211// UpdateMigrationItemInput update migration item input.
26212type UpdateMigrationItemInput struct {
26213	// Properties - Update migration item input properties.
26214	Properties *UpdateMigrationItemInputProperties `json:"properties,omitempty"`
26215}
26216
26217// UpdateMigrationItemInputProperties update migration item input properties.
26218type UpdateMigrationItemInputProperties struct {
26219	// ProviderSpecificDetails - The provider specific input to update migration item.
26220	ProviderSpecificDetails BasicUpdateMigrationItemProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
26221}
26222
26223// UnmarshalJSON is the custom unmarshaler for UpdateMigrationItemInputProperties struct.
26224func (umiip *UpdateMigrationItemInputProperties) UnmarshalJSON(body []byte) error {
26225	var m map[string]*json.RawMessage
26226	err := json.Unmarshal(body, &m)
26227	if err != nil {
26228		return err
26229	}
26230	for k, v := range m {
26231		switch k {
26232		case "providerSpecificDetails":
26233			if v != nil {
26234				providerSpecificDetails, err := unmarshalBasicUpdateMigrationItemProviderSpecificInput(*v)
26235				if err != nil {
26236					return err
26237				}
26238				umiip.ProviderSpecificDetails = providerSpecificDetails
26239			}
26240		}
26241	}
26242
26243	return nil
26244}
26245
26246// BasicUpdateMigrationItemProviderSpecificInput update migration item provider specific input.
26247type BasicUpdateMigrationItemProviderSpecificInput interface {
26248	AsVMwareCbtUpdateMigrationItemInput() (*VMwareCbtUpdateMigrationItemInput, bool)
26249	AsUpdateMigrationItemProviderSpecificInput() (*UpdateMigrationItemProviderSpecificInput, bool)
26250}
26251
26252// UpdateMigrationItemProviderSpecificInput update migration item provider specific input.
26253type UpdateMigrationItemProviderSpecificInput struct {
26254	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeUpdateMigrationItemProviderSpecificInput', 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt'
26255	InstanceType InstanceTypeBasicUpdateMigrationItemProviderSpecificInput `json:"instanceType,omitempty"`
26256}
26257
26258func unmarshalBasicUpdateMigrationItemProviderSpecificInput(body []byte) (BasicUpdateMigrationItemProviderSpecificInput, error) {
26259	var m map[string]interface{}
26260	err := json.Unmarshal(body, &m)
26261	if err != nil {
26262		return nil, err
26263	}
26264
26265	switch m["instanceType"] {
26266	case string(InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt):
26267		var vmcumii VMwareCbtUpdateMigrationItemInput
26268		err := json.Unmarshal(body, &vmcumii)
26269		return vmcumii, err
26270	default:
26271		var umipsi UpdateMigrationItemProviderSpecificInput
26272		err := json.Unmarshal(body, &umipsi)
26273		return umipsi, err
26274	}
26275}
26276func unmarshalBasicUpdateMigrationItemProviderSpecificInputArray(body []byte) ([]BasicUpdateMigrationItemProviderSpecificInput, error) {
26277	var rawMessages []*json.RawMessage
26278	err := json.Unmarshal(body, &rawMessages)
26279	if err != nil {
26280		return nil, err
26281	}
26282
26283	umipsiArray := make([]BasicUpdateMigrationItemProviderSpecificInput, len(rawMessages))
26284
26285	for index, rawMessage := range rawMessages {
26286		umipsi, err := unmarshalBasicUpdateMigrationItemProviderSpecificInput(*rawMessage)
26287		if err != nil {
26288			return nil, err
26289		}
26290		umipsiArray[index] = umipsi
26291	}
26292	return umipsiArray, nil
26293}
26294
26295// MarshalJSON is the custom marshaler for UpdateMigrationItemProviderSpecificInput.
26296func (umipsi UpdateMigrationItemProviderSpecificInput) MarshalJSON() ([]byte, error) {
26297	umipsi.InstanceType = InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeUpdateMigrationItemProviderSpecificInput
26298	objectMap := make(map[string]interface{})
26299	if umipsi.InstanceType != "" {
26300		objectMap["instanceType"] = umipsi.InstanceType
26301	}
26302	return json.Marshal(objectMap)
26303}
26304
26305// AsVMwareCbtUpdateMigrationItemInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for UpdateMigrationItemProviderSpecificInput.
26306func (umipsi UpdateMigrationItemProviderSpecificInput) AsVMwareCbtUpdateMigrationItemInput() (*VMwareCbtUpdateMigrationItemInput, bool) {
26307	return nil, false
26308}
26309
26310// AsUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for UpdateMigrationItemProviderSpecificInput.
26311func (umipsi UpdateMigrationItemProviderSpecificInput) AsUpdateMigrationItemProviderSpecificInput() (*UpdateMigrationItemProviderSpecificInput, bool) {
26312	return &umipsi, true
26313}
26314
26315// AsBasicUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for UpdateMigrationItemProviderSpecificInput.
26316func (umipsi UpdateMigrationItemProviderSpecificInput) AsBasicUpdateMigrationItemProviderSpecificInput() (BasicUpdateMigrationItemProviderSpecificInput, bool) {
26317	return &umipsi, true
26318}
26319
26320// UpdateMobilityServiceRequest request to update the mobility service on a protected item.
26321type UpdateMobilityServiceRequest struct {
26322	// Properties - The properties of the update mobility service request.
26323	Properties *UpdateMobilityServiceRequestProperties `json:"properties,omitempty"`
26324}
26325
26326// UpdateMobilityServiceRequestProperties the properties of an update mobility service request.
26327type UpdateMobilityServiceRequestProperties struct {
26328	// RunAsAccountID - The CS run as account Id.
26329	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
26330}
26331
26332// UpdateNetworkMappingInput update network mapping input.
26333type UpdateNetworkMappingInput struct {
26334	// Properties - The input properties needed to update network mapping.
26335	Properties *UpdateNetworkMappingInputProperties `json:"properties,omitempty"`
26336}
26337
26338// UpdateNetworkMappingInputProperties common input details for network mapping operation.
26339type UpdateNetworkMappingInputProperties struct {
26340	// RecoveryFabricName - Recovery fabric name.
26341	RecoveryFabricName *string `json:"recoveryFabricName,omitempty"`
26342	// RecoveryNetworkID - Recovery network Id.
26343	RecoveryNetworkID *string `json:"recoveryNetworkId,omitempty"`
26344	// FabricSpecificDetails - Fabrics specific input network Id.
26345	FabricSpecificDetails BasicFabricSpecificUpdateNetworkMappingInput `json:"fabricSpecificDetails,omitempty"`
26346}
26347
26348// UnmarshalJSON is the custom unmarshaler for UpdateNetworkMappingInputProperties struct.
26349func (unmip *UpdateNetworkMappingInputProperties) UnmarshalJSON(body []byte) error {
26350	var m map[string]*json.RawMessage
26351	err := json.Unmarshal(body, &m)
26352	if err != nil {
26353		return err
26354	}
26355	for k, v := range m {
26356		switch k {
26357		case "recoveryFabricName":
26358			if v != nil {
26359				var recoveryFabricName string
26360				err = json.Unmarshal(*v, &recoveryFabricName)
26361				if err != nil {
26362					return err
26363				}
26364				unmip.RecoveryFabricName = &recoveryFabricName
26365			}
26366		case "recoveryNetworkId":
26367			if v != nil {
26368				var recoveryNetworkID string
26369				err = json.Unmarshal(*v, &recoveryNetworkID)
26370				if err != nil {
26371					return err
26372				}
26373				unmip.RecoveryNetworkID = &recoveryNetworkID
26374			}
26375		case "fabricSpecificDetails":
26376			if v != nil {
26377				fabricSpecificDetails, err := unmarshalBasicFabricSpecificUpdateNetworkMappingInput(*v)
26378				if err != nil {
26379					return err
26380				}
26381				unmip.FabricSpecificDetails = fabricSpecificDetails
26382			}
26383		}
26384	}
26385
26386	return nil
26387}
26388
26389// UpdatePolicyInput update policy input.
26390type UpdatePolicyInput struct {
26391	// Properties - The ReplicationProviderSettings.
26392	Properties *UpdatePolicyInputProperties `json:"properties,omitempty"`
26393}
26394
26395// UpdatePolicyInputProperties policy update properties.
26396type UpdatePolicyInputProperties struct {
26397	// ReplicationProviderSettings - The ReplicationProviderSettings.
26398	ReplicationProviderSettings BasicPolicyProviderSpecificInput `json:"replicationProviderSettings,omitempty"`
26399}
26400
26401// UnmarshalJSON is the custom unmarshaler for UpdatePolicyInputProperties struct.
26402func (upip *UpdatePolicyInputProperties) UnmarshalJSON(body []byte) error {
26403	var m map[string]*json.RawMessage
26404	err := json.Unmarshal(body, &m)
26405	if err != nil {
26406		return err
26407	}
26408	for k, v := range m {
26409		switch k {
26410		case "replicationProviderSettings":
26411			if v != nil {
26412				replicationProviderSettings, err := unmarshalBasicPolicyProviderSpecificInput(*v)
26413				if err != nil {
26414					return err
26415				}
26416				upip.ReplicationProviderSettings = replicationProviderSettings
26417			}
26418		}
26419	}
26420
26421	return nil
26422}
26423
26424// UpdateProtectionContainerMappingInput container pairing update input.
26425type UpdateProtectionContainerMappingInput struct {
26426	// Properties - Update protection container mapping input properties.
26427	Properties *UpdateProtectionContainerMappingInputProperties `json:"properties,omitempty"`
26428}
26429
26430// UpdateProtectionContainerMappingInputProperties container pairing update input.
26431type UpdateProtectionContainerMappingInputProperties struct {
26432	// ProviderSpecificInput - Provider specific input for updating protection container mapping.
26433	ProviderSpecificInput BasicReplicationProviderSpecificUpdateContainerMappingInput `json:"providerSpecificInput,omitempty"`
26434}
26435
26436// UnmarshalJSON is the custom unmarshaler for UpdateProtectionContainerMappingInputProperties struct.
26437func (upcmip *UpdateProtectionContainerMappingInputProperties) UnmarshalJSON(body []byte) error {
26438	var m map[string]*json.RawMessage
26439	err := json.Unmarshal(body, &m)
26440	if err != nil {
26441		return err
26442	}
26443	for k, v := range m {
26444		switch k {
26445		case "providerSpecificInput":
26446			if v != nil {
26447				providerSpecificInput, err := unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInput(*v)
26448				if err != nil {
26449					return err
26450				}
26451				upcmip.ProviderSpecificInput = providerSpecificInput
26452			}
26453		}
26454	}
26455
26456	return nil
26457}
26458
26459// UpdateRecoveryPlanInput update recovery plan input class.
26460type UpdateRecoveryPlanInput struct {
26461	// Properties - Recovery plan update properties.
26462	Properties *UpdateRecoveryPlanInputProperties `json:"properties,omitempty"`
26463}
26464
26465// UpdateRecoveryPlanInputProperties recovery plan update properties.
26466type UpdateRecoveryPlanInputProperties struct {
26467	// Groups - The recovery plan groups.
26468	Groups *[]RecoveryPlanGroup `json:"groups,omitempty"`
26469}
26470
26471// UpdateReplicationProtectedItemInput update replication protected item input.
26472type UpdateReplicationProtectedItemInput struct {
26473	// Properties - Update replication protected item properties.
26474	Properties *UpdateReplicationProtectedItemInputProperties `json:"properties,omitempty"`
26475}
26476
26477// UpdateReplicationProtectedItemInputProperties update protected item input properties.
26478type UpdateReplicationProtectedItemInputProperties struct {
26479	// RecoveryAzureVMName - Target azure VM name given by the user.
26480	RecoveryAzureVMName *string `json:"recoveryAzureVMName,omitempty"`
26481	// RecoveryAzureVMSize - Target Azure Vm size.
26482	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
26483	// SelectedRecoveryAzureNetworkID - Target Azure Network Id.
26484	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
26485	// SelectedTfoAzureNetworkID - The Azure Network Id for test failover.
26486	SelectedTfoAzureNetworkID *string `json:"selectedTfoAzureNetworkId,omitempty"`
26487	// SelectedSourceNicID - The selected source nic Id which will be used as the primary nic during failover.
26488	SelectedSourceNicID *string `json:"selectedSourceNicId,omitempty"`
26489	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
26490	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
26491	// VMNics - The list of vm nic details.
26492	VMNics *[]VMNicInputDetails `json:"vmNics,omitempty"`
26493	// LicenseType - License type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
26494	LicenseType LicenseType `json:"licenseType,omitempty"`
26495	// RecoveryAvailabilitySetID - The target availability set id.
26496	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
26497	// ProviderSpecificDetails - The provider specific input to update replication protected item.
26498	ProviderSpecificDetails BasicUpdateReplicationProtectedItemProviderInput `json:"providerSpecificDetails,omitempty"`
26499}
26500
26501// UnmarshalJSON is the custom unmarshaler for UpdateReplicationProtectedItemInputProperties struct.
26502func (urpiip *UpdateReplicationProtectedItemInputProperties) UnmarshalJSON(body []byte) error {
26503	var m map[string]*json.RawMessage
26504	err := json.Unmarshal(body, &m)
26505	if err != nil {
26506		return err
26507	}
26508	for k, v := range m {
26509		switch k {
26510		case "recoveryAzureVMName":
26511			if v != nil {
26512				var recoveryAzureVMName string
26513				err = json.Unmarshal(*v, &recoveryAzureVMName)
26514				if err != nil {
26515					return err
26516				}
26517				urpiip.RecoveryAzureVMName = &recoveryAzureVMName
26518			}
26519		case "recoveryAzureVMSize":
26520			if v != nil {
26521				var recoveryAzureVMSize string
26522				err = json.Unmarshal(*v, &recoveryAzureVMSize)
26523				if err != nil {
26524					return err
26525				}
26526				urpiip.RecoveryAzureVMSize = &recoveryAzureVMSize
26527			}
26528		case "selectedRecoveryAzureNetworkId":
26529			if v != nil {
26530				var selectedRecoveryAzureNetworkID string
26531				err = json.Unmarshal(*v, &selectedRecoveryAzureNetworkID)
26532				if err != nil {
26533					return err
26534				}
26535				urpiip.SelectedRecoveryAzureNetworkID = &selectedRecoveryAzureNetworkID
26536			}
26537		case "selectedTfoAzureNetworkId":
26538			if v != nil {
26539				var selectedTfoAzureNetworkID string
26540				err = json.Unmarshal(*v, &selectedTfoAzureNetworkID)
26541				if err != nil {
26542					return err
26543				}
26544				urpiip.SelectedTfoAzureNetworkID = &selectedTfoAzureNetworkID
26545			}
26546		case "selectedSourceNicId":
26547			if v != nil {
26548				var selectedSourceNicID string
26549				err = json.Unmarshal(*v, &selectedSourceNicID)
26550				if err != nil {
26551					return err
26552				}
26553				urpiip.SelectedSourceNicID = &selectedSourceNicID
26554			}
26555		case "enableRdpOnTargetOption":
26556			if v != nil {
26557				var enableRdpOnTargetOption string
26558				err = json.Unmarshal(*v, &enableRdpOnTargetOption)
26559				if err != nil {
26560					return err
26561				}
26562				urpiip.EnableRdpOnTargetOption = &enableRdpOnTargetOption
26563			}
26564		case "vmNics":
26565			if v != nil {
26566				var VMNics []VMNicInputDetails
26567				err = json.Unmarshal(*v, &VMNics)
26568				if err != nil {
26569					return err
26570				}
26571				urpiip.VMNics = &VMNics
26572			}
26573		case "licenseType":
26574			if v != nil {
26575				var licenseType LicenseType
26576				err = json.Unmarshal(*v, &licenseType)
26577				if err != nil {
26578					return err
26579				}
26580				urpiip.LicenseType = licenseType
26581			}
26582		case "recoveryAvailabilitySetId":
26583			if v != nil {
26584				var recoveryAvailabilitySetID string
26585				err = json.Unmarshal(*v, &recoveryAvailabilitySetID)
26586				if err != nil {
26587					return err
26588				}
26589				urpiip.RecoveryAvailabilitySetID = &recoveryAvailabilitySetID
26590			}
26591		case "providerSpecificDetails":
26592			if v != nil {
26593				providerSpecificDetails, err := unmarshalBasicUpdateReplicationProtectedItemProviderInput(*v)
26594				if err != nil {
26595					return err
26596				}
26597				urpiip.ProviderSpecificDetails = providerSpecificDetails
26598			}
26599		}
26600	}
26601
26602	return nil
26603}
26604
26605// BasicUpdateReplicationProtectedItemProviderInput update replication protected item provider specific input.
26606type BasicUpdateReplicationProtectedItemProviderInput interface {
26607	AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool)
26608	AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool)
26609	AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool)
26610	AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool)
26611	AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool)
26612}
26613
26614// UpdateReplicationProtectedItemProviderInput update replication protected item provider specific input.
26615type UpdateReplicationProtectedItemProviderInput struct {
26616	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
26617	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
26618}
26619
26620func unmarshalBasicUpdateReplicationProtectedItemProviderInput(body []byte) (BasicUpdateReplicationProtectedItemProviderInput, error) {
26621	var m map[string]interface{}
26622	err := json.Unmarshal(body, &m)
26623	if err != nil {
26624		return nil, err
26625	}
26626
26627	switch m["instanceType"] {
26628	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A):
26629		var aurpii A2AUpdateReplicationProtectedItemInput
26630		err := json.Unmarshal(body, &aurpii)
26631		return aurpii, err
26632	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure):
26633		var hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput
26634		err := json.Unmarshal(body, &hvraurpii)
26635		return hvraurpii, err
26636	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2):
26637		var imavurpii InMageAzureV2UpdateReplicationProtectedItemInput
26638		err := json.Unmarshal(body, &imavurpii)
26639		return imavurpii, err
26640	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm):
26641		var imrurpii InMageRcmUpdateReplicationProtectedItemInput
26642		err := json.Unmarshal(body, &imrurpii)
26643		return imrurpii, err
26644	default:
26645		var urpipi UpdateReplicationProtectedItemProviderInput
26646		err := json.Unmarshal(body, &urpipi)
26647		return urpipi, err
26648	}
26649}
26650func unmarshalBasicUpdateReplicationProtectedItemProviderInputArray(body []byte) ([]BasicUpdateReplicationProtectedItemProviderInput, error) {
26651	var rawMessages []*json.RawMessage
26652	err := json.Unmarshal(body, &rawMessages)
26653	if err != nil {
26654		return nil, err
26655	}
26656
26657	urpipiArray := make([]BasicUpdateReplicationProtectedItemProviderInput, len(rawMessages))
26658
26659	for index, rawMessage := range rawMessages {
26660		urpipi, err := unmarshalBasicUpdateReplicationProtectedItemProviderInput(*rawMessage)
26661		if err != nil {
26662			return nil, err
26663		}
26664		urpipiArray[index] = urpipi
26665	}
26666	return urpipiArray, nil
26667}
26668
26669// MarshalJSON is the custom marshaler for UpdateReplicationProtectedItemProviderInput.
26670func (urpipi UpdateReplicationProtectedItemProviderInput) MarshalJSON() ([]byte, error) {
26671	urpipi.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput
26672	objectMap := make(map[string]interface{})
26673	if urpipi.InstanceType != "" {
26674		objectMap["instanceType"] = urpipi.InstanceType
26675	}
26676	return json.Marshal(objectMap)
26677}
26678
26679// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
26680func (urpipi UpdateReplicationProtectedItemProviderInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
26681	return nil, false
26682}
26683
26684// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
26685func (urpipi UpdateReplicationProtectedItemProviderInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
26686	return nil, false
26687}
26688
26689// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
26690func (urpipi UpdateReplicationProtectedItemProviderInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
26691	return nil, false
26692}
26693
26694// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
26695func (urpipi UpdateReplicationProtectedItemProviderInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
26696	return nil, false
26697}
26698
26699// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
26700func (urpipi UpdateReplicationProtectedItemProviderInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
26701	return &urpipi, true
26702}
26703
26704// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
26705func (urpipi UpdateReplicationProtectedItemProviderInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
26706	return &urpipi, true
26707}
26708
26709// UpdateVCenterRequest input required to update vCenter.
26710type UpdateVCenterRequest struct {
26711	// Properties - The update VCenter Request Properties.
26712	Properties *UpdateVCenterRequestProperties `json:"properties,omitempty"`
26713}
26714
26715// UpdateVCenterRequestProperties the properties of an update vCenter request.
26716type UpdateVCenterRequestProperties struct {
26717	// FriendlyName - The friendly name of the vCenter.
26718	FriendlyName *string `json:"friendlyName,omitempty"`
26719	// IPAddress - The IP address of the vCenter to be discovered.
26720	IPAddress *string `json:"ipAddress,omitempty"`
26721	// ProcessServerID - The process server Id from where the update can be orchestrated.
26722	ProcessServerID *string `json:"processServerId,omitempty"`
26723	// Port - The port number for discovery.
26724	Port *string `json:"port,omitempty"`
26725	// RunAsAccountID - The CS account Id which has privileges to update the vCenter.
26726	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
26727}
26728
26729// VaultHealthDetails vault health details definition.
26730type VaultHealthDetails struct {
26731	autorest.Response `json:"-"`
26732	// Properties - The vault health related data.
26733	Properties *VaultHealthProperties `json:"properties,omitempty"`
26734	// ID - READ-ONLY; Resource Id
26735	ID *string `json:"id,omitempty"`
26736	// Name - READ-ONLY; Resource Name
26737	Name *string `json:"name,omitempty"`
26738	// Type - READ-ONLY; Resource Type
26739	Type *string `json:"type,omitempty"`
26740	// Location - Resource Location
26741	Location *string `json:"location,omitempty"`
26742}
26743
26744// MarshalJSON is the custom marshaler for VaultHealthDetails.
26745func (vhd VaultHealthDetails) MarshalJSON() ([]byte, error) {
26746	objectMap := make(map[string]interface{})
26747	if vhd.Properties != nil {
26748		objectMap["properties"] = vhd.Properties
26749	}
26750	if vhd.Location != nil {
26751		objectMap["location"] = vhd.Location
26752	}
26753	return json.Marshal(objectMap)
26754}
26755
26756// VaultHealthProperties class to define the health summary of the Vault.
26757type VaultHealthProperties struct {
26758	// VaultErrors - The list of errors on the vault.
26759	VaultErrors *[]HealthError `json:"vaultErrors,omitempty"`
26760	// ProtectedItemsHealth - The list of the health detail of the protected items in the vault.
26761	ProtectedItemsHealth *ResourceHealthSummary `json:"protectedItemsHealth,omitempty"`
26762	// FabricsHealth - The list of the health detail of the fabrics in the vault.
26763	FabricsHealth *ResourceHealthSummary `json:"fabricsHealth,omitempty"`
26764	// ContainersHealth - The list of the health detail of the containers in the vault.
26765	ContainersHealth *ResourceHealthSummary `json:"containersHealth,omitempty"`
26766}
26767
26768// VaultSetting vault setting.
26769type VaultSetting struct {
26770	autorest.Response `json:"-"`
26771	// Properties - The vault setting properties.
26772	Properties *VaultSettingProperties `json:"properties,omitempty"`
26773	// ID - READ-ONLY; Resource Id
26774	ID *string `json:"id,omitempty"`
26775	// Name - READ-ONLY; Resource Name
26776	Name *string `json:"name,omitempty"`
26777	// Type - READ-ONLY; Resource Type
26778	Type *string `json:"type,omitempty"`
26779	// Location - Resource Location
26780	Location *string `json:"location,omitempty"`
26781}
26782
26783// MarshalJSON is the custom marshaler for VaultSetting.
26784func (vs VaultSetting) MarshalJSON() ([]byte, error) {
26785	objectMap := make(map[string]interface{})
26786	if vs.Properties != nil {
26787		objectMap["properties"] = vs.Properties
26788	}
26789	if vs.Location != nil {
26790		objectMap["location"] = vs.Location
26791	}
26792	return json.Marshal(objectMap)
26793}
26794
26795// VaultSettingCollection vault setting collection.
26796type VaultSettingCollection struct {
26797	autorest.Response `json:"-"`
26798	// Value - The list of vault setting.
26799	Value *[]VaultSetting `json:"value,omitempty"`
26800	// NextLink - The value of next link.
26801	NextLink *string `json:"nextLink,omitempty"`
26802}
26803
26804// VaultSettingCollectionIterator provides access to a complete listing of VaultSetting values.
26805type VaultSettingCollectionIterator struct {
26806	i    int
26807	page VaultSettingCollectionPage
26808}
26809
26810// NextWithContext advances to the next value.  If there was an error making
26811// the request the iterator does not advance and the error is returned.
26812func (iter *VaultSettingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
26813	if tracing.IsEnabled() {
26814		ctx = tracing.StartSpan(ctx, fqdn+"/VaultSettingCollectionIterator.NextWithContext")
26815		defer func() {
26816			sc := -1
26817			if iter.Response().Response.Response != nil {
26818				sc = iter.Response().Response.Response.StatusCode
26819			}
26820			tracing.EndSpan(ctx, sc, err)
26821		}()
26822	}
26823	iter.i++
26824	if iter.i < len(iter.page.Values()) {
26825		return nil
26826	}
26827	err = iter.page.NextWithContext(ctx)
26828	if err != nil {
26829		iter.i--
26830		return err
26831	}
26832	iter.i = 0
26833	return nil
26834}
26835
26836// Next advances to the next value.  If there was an error making
26837// the request the iterator does not advance and the error is returned.
26838// Deprecated: Use NextWithContext() instead.
26839func (iter *VaultSettingCollectionIterator) Next() error {
26840	return iter.NextWithContext(context.Background())
26841}
26842
26843// NotDone returns true if the enumeration should be started or is not yet complete.
26844func (iter VaultSettingCollectionIterator) NotDone() bool {
26845	return iter.page.NotDone() && iter.i < len(iter.page.Values())
26846}
26847
26848// Response returns the raw server response from the last page request.
26849func (iter VaultSettingCollectionIterator) Response() VaultSettingCollection {
26850	return iter.page.Response()
26851}
26852
26853// Value returns the current value or a zero-initialized value if the
26854// iterator has advanced beyond the end of the collection.
26855func (iter VaultSettingCollectionIterator) Value() VaultSetting {
26856	if !iter.page.NotDone() {
26857		return VaultSetting{}
26858	}
26859	return iter.page.Values()[iter.i]
26860}
26861
26862// Creates a new instance of the VaultSettingCollectionIterator type.
26863func NewVaultSettingCollectionIterator(page VaultSettingCollectionPage) VaultSettingCollectionIterator {
26864	return VaultSettingCollectionIterator{page: page}
26865}
26866
26867// IsEmpty returns true if the ListResult contains no values.
26868func (vsc VaultSettingCollection) IsEmpty() bool {
26869	return vsc.Value == nil || len(*vsc.Value) == 0
26870}
26871
26872// hasNextLink returns true if the NextLink is not empty.
26873func (vsc VaultSettingCollection) hasNextLink() bool {
26874	return vsc.NextLink != nil && len(*vsc.NextLink) != 0
26875}
26876
26877// vaultSettingCollectionPreparer prepares a request to retrieve the next set of results.
26878// It returns nil if no more results exist.
26879func (vsc VaultSettingCollection) vaultSettingCollectionPreparer(ctx context.Context) (*http.Request, error) {
26880	if !vsc.hasNextLink() {
26881		return nil, nil
26882	}
26883	return autorest.Prepare((&http.Request{}).WithContext(ctx),
26884		autorest.AsJSON(),
26885		autorest.AsGet(),
26886		autorest.WithBaseURL(to.String(vsc.NextLink)))
26887}
26888
26889// VaultSettingCollectionPage contains a page of VaultSetting values.
26890type VaultSettingCollectionPage struct {
26891	fn  func(context.Context, VaultSettingCollection) (VaultSettingCollection, error)
26892	vsc VaultSettingCollection
26893}
26894
26895// NextWithContext advances to the next page of values.  If there was an error making
26896// the request the page does not advance and the error is returned.
26897func (page *VaultSettingCollectionPage) NextWithContext(ctx context.Context) (err error) {
26898	if tracing.IsEnabled() {
26899		ctx = tracing.StartSpan(ctx, fqdn+"/VaultSettingCollectionPage.NextWithContext")
26900		defer func() {
26901			sc := -1
26902			if page.Response().Response.Response != nil {
26903				sc = page.Response().Response.Response.StatusCode
26904			}
26905			tracing.EndSpan(ctx, sc, err)
26906		}()
26907	}
26908	for {
26909		next, err := page.fn(ctx, page.vsc)
26910		if err != nil {
26911			return err
26912		}
26913		page.vsc = next
26914		if !next.hasNextLink() || !next.IsEmpty() {
26915			break
26916		}
26917	}
26918	return nil
26919}
26920
26921// Next advances to the next page of values.  If there was an error making
26922// the request the page does not advance and the error is returned.
26923// Deprecated: Use NextWithContext() instead.
26924func (page *VaultSettingCollectionPage) Next() error {
26925	return page.NextWithContext(context.Background())
26926}
26927
26928// NotDone returns true if the page enumeration should be started or is not yet complete.
26929func (page VaultSettingCollectionPage) NotDone() bool {
26930	return !page.vsc.IsEmpty()
26931}
26932
26933// Response returns the raw server response from the last page request.
26934func (page VaultSettingCollectionPage) Response() VaultSettingCollection {
26935	return page.vsc
26936}
26937
26938// Values returns the slice of values for the current page or nil if there are no values.
26939func (page VaultSettingCollectionPage) Values() []VaultSetting {
26940	if page.vsc.IsEmpty() {
26941		return nil
26942	}
26943	return *page.vsc.Value
26944}
26945
26946// Creates a new instance of the VaultSettingCollectionPage type.
26947func NewVaultSettingCollectionPage(cur VaultSettingCollection, getNextPage func(context.Context, VaultSettingCollection) (VaultSettingCollection, error)) VaultSettingCollectionPage {
26948	return VaultSettingCollectionPage{
26949		fn:  getNextPage,
26950		vsc: cur,
26951	}
26952}
26953
26954// VaultSettingCreationInput input to create vault setting.
26955type VaultSettingCreationInput struct {
26956	// Properties - Vault setting creation input properties.
26957	Properties *VaultSettingCreationInputProperties `json:"properties,omitempty"`
26958}
26959
26960// VaultSettingCreationInputProperties input to create vault setting.
26961type VaultSettingCreationInputProperties struct {
26962	// MigrationSolutionID - The migration solution Id.
26963	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
26964}
26965
26966// VaultSettingProperties vault setting properties.
26967type VaultSettingProperties struct {
26968	// MigrationSolutionID - The migration solution ARM Id.
26969	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
26970}
26971
26972// VCenter vCenter definition.
26973type VCenter struct {
26974	autorest.Response `json:"-"`
26975	// Properties - VCenter related data.
26976	Properties *VCenterProperties `json:"properties,omitempty"`
26977	// ID - READ-ONLY; Resource Id
26978	ID *string `json:"id,omitempty"`
26979	// Name - READ-ONLY; Resource Name
26980	Name *string `json:"name,omitempty"`
26981	// Type - READ-ONLY; Resource Type
26982	Type *string `json:"type,omitempty"`
26983	// Location - Resource Location
26984	Location *string `json:"location,omitempty"`
26985}
26986
26987// MarshalJSON is the custom marshaler for VCenter.
26988func (vc VCenter) MarshalJSON() ([]byte, error) {
26989	objectMap := make(map[string]interface{})
26990	if vc.Properties != nil {
26991		objectMap["properties"] = vc.Properties
26992	}
26993	if vc.Location != nil {
26994		objectMap["location"] = vc.Location
26995	}
26996	return json.Marshal(objectMap)
26997}
26998
26999// VCenterCollection collection of vCenter details.
27000type VCenterCollection struct {
27001	autorest.Response `json:"-"`
27002	// Value - The vCenter details.
27003	Value *[]VCenter `json:"value,omitempty"`
27004	// NextLink - The value of next link.
27005	NextLink *string `json:"nextLink,omitempty"`
27006}
27007
27008// VCenterCollectionIterator provides access to a complete listing of VCenter values.
27009type VCenterCollectionIterator struct {
27010	i    int
27011	page VCenterCollectionPage
27012}
27013
27014// NextWithContext advances to the next value.  If there was an error making
27015// the request the iterator does not advance and the error is returned.
27016func (iter *VCenterCollectionIterator) NextWithContext(ctx context.Context) (err error) {
27017	if tracing.IsEnabled() {
27018		ctx = tracing.StartSpan(ctx, fqdn+"/VCenterCollectionIterator.NextWithContext")
27019		defer func() {
27020			sc := -1
27021			if iter.Response().Response.Response != nil {
27022				sc = iter.Response().Response.Response.StatusCode
27023			}
27024			tracing.EndSpan(ctx, sc, err)
27025		}()
27026	}
27027	iter.i++
27028	if iter.i < len(iter.page.Values()) {
27029		return nil
27030	}
27031	err = iter.page.NextWithContext(ctx)
27032	if err != nil {
27033		iter.i--
27034		return err
27035	}
27036	iter.i = 0
27037	return nil
27038}
27039
27040// Next advances to the next value.  If there was an error making
27041// the request the iterator does not advance and the error is returned.
27042// Deprecated: Use NextWithContext() instead.
27043func (iter *VCenterCollectionIterator) Next() error {
27044	return iter.NextWithContext(context.Background())
27045}
27046
27047// NotDone returns true if the enumeration should be started or is not yet complete.
27048func (iter VCenterCollectionIterator) NotDone() bool {
27049	return iter.page.NotDone() && iter.i < len(iter.page.Values())
27050}
27051
27052// Response returns the raw server response from the last page request.
27053func (iter VCenterCollectionIterator) Response() VCenterCollection {
27054	return iter.page.Response()
27055}
27056
27057// Value returns the current value or a zero-initialized value if the
27058// iterator has advanced beyond the end of the collection.
27059func (iter VCenterCollectionIterator) Value() VCenter {
27060	if !iter.page.NotDone() {
27061		return VCenter{}
27062	}
27063	return iter.page.Values()[iter.i]
27064}
27065
27066// Creates a new instance of the VCenterCollectionIterator type.
27067func NewVCenterCollectionIterator(page VCenterCollectionPage) VCenterCollectionIterator {
27068	return VCenterCollectionIterator{page: page}
27069}
27070
27071// IsEmpty returns true if the ListResult contains no values.
27072func (vcc VCenterCollection) IsEmpty() bool {
27073	return vcc.Value == nil || len(*vcc.Value) == 0
27074}
27075
27076// hasNextLink returns true if the NextLink is not empty.
27077func (vcc VCenterCollection) hasNextLink() bool {
27078	return vcc.NextLink != nil && len(*vcc.NextLink) != 0
27079}
27080
27081// vCenterCollectionPreparer prepares a request to retrieve the next set of results.
27082// It returns nil if no more results exist.
27083func (vcc VCenterCollection) vCenterCollectionPreparer(ctx context.Context) (*http.Request, error) {
27084	if !vcc.hasNextLink() {
27085		return nil, nil
27086	}
27087	return autorest.Prepare((&http.Request{}).WithContext(ctx),
27088		autorest.AsJSON(),
27089		autorest.AsGet(),
27090		autorest.WithBaseURL(to.String(vcc.NextLink)))
27091}
27092
27093// VCenterCollectionPage contains a page of VCenter values.
27094type VCenterCollectionPage struct {
27095	fn  func(context.Context, VCenterCollection) (VCenterCollection, error)
27096	vcc VCenterCollection
27097}
27098
27099// NextWithContext advances to the next page of values.  If there was an error making
27100// the request the page does not advance and the error is returned.
27101func (page *VCenterCollectionPage) NextWithContext(ctx context.Context) (err error) {
27102	if tracing.IsEnabled() {
27103		ctx = tracing.StartSpan(ctx, fqdn+"/VCenterCollectionPage.NextWithContext")
27104		defer func() {
27105			sc := -1
27106			if page.Response().Response.Response != nil {
27107				sc = page.Response().Response.Response.StatusCode
27108			}
27109			tracing.EndSpan(ctx, sc, err)
27110		}()
27111	}
27112	for {
27113		next, err := page.fn(ctx, page.vcc)
27114		if err != nil {
27115			return err
27116		}
27117		page.vcc = next
27118		if !next.hasNextLink() || !next.IsEmpty() {
27119			break
27120		}
27121	}
27122	return nil
27123}
27124
27125// Next advances to the next page of values.  If there was an error making
27126// the request the page does not advance and the error is returned.
27127// Deprecated: Use NextWithContext() instead.
27128func (page *VCenterCollectionPage) Next() error {
27129	return page.NextWithContext(context.Background())
27130}
27131
27132// NotDone returns true if the page enumeration should be started or is not yet complete.
27133func (page VCenterCollectionPage) NotDone() bool {
27134	return !page.vcc.IsEmpty()
27135}
27136
27137// Response returns the raw server response from the last page request.
27138func (page VCenterCollectionPage) Response() VCenterCollection {
27139	return page.vcc
27140}
27141
27142// Values returns the slice of values for the current page or nil if there are no values.
27143func (page VCenterCollectionPage) Values() []VCenter {
27144	if page.vcc.IsEmpty() {
27145		return nil
27146	}
27147	return *page.vcc.Value
27148}
27149
27150// Creates a new instance of the VCenterCollectionPage type.
27151func NewVCenterCollectionPage(cur VCenterCollection, getNextPage func(context.Context, VCenterCollection) (VCenterCollection, error)) VCenterCollectionPage {
27152	return VCenterCollectionPage{
27153		fn:  getNextPage,
27154		vcc: cur,
27155	}
27156}
27157
27158// VCenterProperties vCenter properties.
27159type VCenterProperties struct {
27160	// FriendlyName - Friendly name of the vCenter.
27161	FriendlyName *string `json:"friendlyName,omitempty"`
27162	// InternalID - VCenter internal ID.
27163	InternalID *string `json:"internalId,omitempty"`
27164	// LastHeartbeat - The time when the last heartbeat was received by vCenter.
27165	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
27166	// DiscoveryStatus - The VCenter discovery status.
27167	DiscoveryStatus *string `json:"discoveryStatus,omitempty"`
27168	// ProcessServerID - The process server Id.
27169	ProcessServerID *string `json:"processServerId,omitempty"`
27170	// IPAddress - The IP address of the vCenter.
27171	IPAddress *string `json:"ipAddress,omitempty"`
27172	// InfrastructureID - The infrastructure Id of vCenter.
27173	InfrastructureID *string `json:"infrastructureId,omitempty"`
27174	// Port - The port number for discovery.
27175	Port *string `json:"port,omitempty"`
27176	// RunAsAccountID - The account Id which has privileges to discover the vCenter.
27177	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
27178	// FabricArmResourceName - The ARM resource name of the fabric containing this VCenter.
27179	FabricArmResourceName *string `json:"fabricArmResourceName,omitempty"`
27180	// HealthErrors - The health errors for this VCenter.
27181	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
27182}
27183
27184// VersionDetails version related details.
27185type VersionDetails struct {
27186	// Version - The agent version.
27187	Version *string `json:"version,omitempty"`
27188	// ExpiryDate - Version expiry date.
27189	ExpiryDate *date.Time `json:"expiryDate,omitempty"`
27190	// Status - A value indicating whether security update required. Possible values include: 'Supported', 'NotSupported', 'Deprecated', 'UpdateRequired', 'SecurityUpdateRequired'
27191	Status AgentVersionStatus `json:"status,omitempty"`
27192}
27193
27194// VirtualMachineTaskDetails this class represents the virtual machine task details.
27195type VirtualMachineTaskDetails struct {
27196	// SkippedReason - The skipped reason.
27197	SkippedReason *string `json:"skippedReason,omitempty"`
27198	// SkippedReasonString - The skipped reason string.
27199	SkippedReasonString *string `json:"skippedReasonString,omitempty"`
27200	// JobTask - The job entity.
27201	JobTask *JobEntity `json:"jobTask,omitempty"`
27202	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
27203	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
27204}
27205
27206// MarshalJSON is the custom marshaler for VirtualMachineTaskDetails.
27207func (vmtd VirtualMachineTaskDetails) MarshalJSON() ([]byte, error) {
27208	vmtd.InstanceType = InstanceTypeVirtualMachineTaskDetails
27209	objectMap := make(map[string]interface{})
27210	if vmtd.SkippedReason != nil {
27211		objectMap["skippedReason"] = vmtd.SkippedReason
27212	}
27213	if vmtd.SkippedReasonString != nil {
27214		objectMap["skippedReasonString"] = vmtd.SkippedReasonString
27215	}
27216	if vmtd.JobTask != nil {
27217		objectMap["jobTask"] = vmtd.JobTask
27218	}
27219	if vmtd.InstanceType != "" {
27220		objectMap["instanceType"] = vmtd.InstanceType
27221	}
27222	return json.Marshal(objectMap)
27223}
27224
27225// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27226func (vmtd VirtualMachineTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
27227	return nil, false
27228}
27229
27230// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27231func (vmtd VirtualMachineTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
27232	return nil, false
27233}
27234
27235// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27236func (vmtd VirtualMachineTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
27237	return nil, false
27238}
27239
27240// AsJobTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27241func (vmtd VirtualMachineTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
27242	return nil, false
27243}
27244
27245// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27246func (vmtd VirtualMachineTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
27247	return nil, false
27248}
27249
27250// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27251func (vmtd VirtualMachineTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
27252	return nil, false
27253}
27254
27255// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27256func (vmtd VirtualMachineTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
27257	return &vmtd, true
27258}
27259
27260// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27261func (vmtd VirtualMachineTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
27262	return nil, false
27263}
27264
27265// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27266func (vmtd VirtualMachineTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
27267	return nil, false
27268}
27269
27270// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
27271func (vmtd VirtualMachineTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
27272	return &vmtd, true
27273}
27274
27275// VmmDetails VMM fabric specific details.
27276type VmmDetails struct {
27277	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
27278	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
27279}
27280
27281// MarshalJSON is the custom marshaler for VmmDetails.
27282func (vd VmmDetails) MarshalJSON() ([]byte, error) {
27283	vd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM
27284	objectMap := make(map[string]interface{})
27285	if vd.InstanceType != "" {
27286		objectMap["instanceType"] = vd.InstanceType
27287	}
27288	return json.Marshal(objectMap)
27289}
27290
27291// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27292func (vd VmmDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
27293	return nil, false
27294}
27295
27296// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27297func (vd VmmDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
27298	return nil, false
27299}
27300
27301// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27302func (vd VmmDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
27303	return nil, false
27304}
27305
27306// AsVmmDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27307func (vd VmmDetails) AsVmmDetails() (*VmmDetails, bool) {
27308	return &vd, true
27309}
27310
27311// AsVMwareDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27312func (vd VmmDetails) AsVMwareDetails() (*VMwareDetails, bool) {
27313	return nil, false
27314}
27315
27316// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27317func (vd VmmDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
27318	return nil, false
27319}
27320
27321// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27322func (vd VmmDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
27323	return nil, false
27324}
27325
27326// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
27327func (vd VmmDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
27328	return &vd, true
27329}
27330
27331// VmmToAzureCreateNetworkMappingInput create network mappings input properties/behavior specific to Vmm to
27332// Azure Network mapping.
27333type VmmToAzureCreateNetworkMappingInput struct {
27334	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
27335	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
27336}
27337
27338// MarshalJSON is the custom marshaler for VmmToAzureCreateNetworkMappingInput.
27339func (vtacnmi VmmToAzureCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
27340	vtacnmi.InstanceType = InstanceTypeVmmToAzure
27341	objectMap := make(map[string]interface{})
27342	if vtacnmi.InstanceType != "" {
27343		objectMap["instanceType"] = vtacnmi.InstanceType
27344	}
27345	return json.Marshal(objectMap)
27346}
27347
27348// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
27349func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
27350	return nil, false
27351}
27352
27353// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
27354func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
27355	return &vtacnmi, true
27356}
27357
27358// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
27359func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
27360	return nil, false
27361}
27362
27363// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
27364func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
27365	return nil, false
27366}
27367
27368// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
27369func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
27370	return &vtacnmi, true
27371}
27372
27373// VmmToAzureNetworkMappingSettings e2A Network Mapping fabric specific settings.
27374type VmmToAzureNetworkMappingSettings struct {
27375	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
27376	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
27377}
27378
27379// MarshalJSON is the custom marshaler for VmmToAzureNetworkMappingSettings.
27380func (vtanms VmmToAzureNetworkMappingSettings) MarshalJSON() ([]byte, error) {
27381	vtanms.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure
27382	objectMap := make(map[string]interface{})
27383	if vtanms.InstanceType != "" {
27384		objectMap["instanceType"] = vtanms.InstanceType
27385	}
27386	return json.Marshal(objectMap)
27387}
27388
27389// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
27390func (vtanms VmmToAzureNetworkMappingSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
27391	return nil, false
27392}
27393
27394// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
27395func (vtanms VmmToAzureNetworkMappingSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
27396	return &vtanms, true
27397}
27398
27399// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
27400func (vtanms VmmToAzureNetworkMappingSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
27401	return nil, false
27402}
27403
27404// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
27405func (vtanms VmmToAzureNetworkMappingSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
27406	return nil, false
27407}
27408
27409// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
27410func (vtanms VmmToAzureNetworkMappingSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
27411	return &vtanms, true
27412}
27413
27414// VmmToAzureUpdateNetworkMappingInput update network mappings input properties/behavior specific to vmm to
27415// azure.
27416type VmmToAzureUpdateNetworkMappingInput struct {
27417	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
27418	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
27419}
27420
27421// MarshalJSON is the custom marshaler for VmmToAzureUpdateNetworkMappingInput.
27422func (vtaunmi VmmToAzureUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
27423	vtaunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure
27424	objectMap := make(map[string]interface{})
27425	if vtaunmi.InstanceType != "" {
27426		objectMap["instanceType"] = vtaunmi.InstanceType
27427	}
27428	return json.Marshal(objectMap)
27429}
27430
27431// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
27432func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
27433	return nil, false
27434}
27435
27436// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
27437func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
27438	return &vtaunmi, true
27439}
27440
27441// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
27442func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
27443	return nil, false
27444}
27445
27446// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
27447func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
27448	return nil, false
27449}
27450
27451// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
27452func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
27453	return &vtaunmi, true
27454}
27455
27456// VmmToVmmCreateNetworkMappingInput create network mappings input properties/behavior specific to vmm to
27457// vmm Network mapping.
27458type VmmToVmmCreateNetworkMappingInput struct {
27459	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
27460	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
27461}
27462
27463// MarshalJSON is the custom marshaler for VmmToVmmCreateNetworkMappingInput.
27464func (vtvcnmi VmmToVmmCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
27465	vtvcnmi.InstanceType = InstanceTypeVmmToVmm
27466	objectMap := make(map[string]interface{})
27467	if vtvcnmi.InstanceType != "" {
27468		objectMap["instanceType"] = vtvcnmi.InstanceType
27469	}
27470	return json.Marshal(objectMap)
27471}
27472
27473// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
27474func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
27475	return nil, false
27476}
27477
27478// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
27479func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
27480	return nil, false
27481}
27482
27483// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
27484func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
27485	return &vtvcnmi, true
27486}
27487
27488// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
27489func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
27490	return nil, false
27491}
27492
27493// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
27494func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
27495	return &vtvcnmi, true
27496}
27497
27498// VmmToVmmNetworkMappingSettings e2E Network Mapping fabric specific settings.
27499type VmmToVmmNetworkMappingSettings struct {
27500	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
27501	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
27502}
27503
27504// MarshalJSON is the custom marshaler for VmmToVmmNetworkMappingSettings.
27505func (vtvnms VmmToVmmNetworkMappingSettings) MarshalJSON() ([]byte, error) {
27506	vtvnms.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm
27507	objectMap := make(map[string]interface{})
27508	if vtvnms.InstanceType != "" {
27509		objectMap["instanceType"] = vtvnms.InstanceType
27510	}
27511	return json.Marshal(objectMap)
27512}
27513
27514// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
27515func (vtvnms VmmToVmmNetworkMappingSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
27516	return nil, false
27517}
27518
27519// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
27520func (vtvnms VmmToVmmNetworkMappingSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
27521	return nil, false
27522}
27523
27524// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
27525func (vtvnms VmmToVmmNetworkMappingSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
27526	return &vtvnms, true
27527}
27528
27529// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
27530func (vtvnms VmmToVmmNetworkMappingSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
27531	return nil, false
27532}
27533
27534// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
27535func (vtvnms VmmToVmmNetworkMappingSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
27536	return &vtvnms, true
27537}
27538
27539// VmmToVmmUpdateNetworkMappingInput update network mappings input properties/behavior specific to vmm to
27540// vmm.
27541type VmmToVmmUpdateNetworkMappingInput struct {
27542	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
27543	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
27544}
27545
27546// MarshalJSON is the custom marshaler for VmmToVmmUpdateNetworkMappingInput.
27547func (vtvunmi VmmToVmmUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
27548	vtvunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm
27549	objectMap := make(map[string]interface{})
27550	if vtvunmi.InstanceType != "" {
27551		objectMap["instanceType"] = vtvunmi.InstanceType
27552	}
27553	return json.Marshal(objectMap)
27554}
27555
27556// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
27557func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
27558	return nil, false
27559}
27560
27561// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
27562func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
27563	return nil, false
27564}
27565
27566// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
27567func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
27568	return &vtvunmi, true
27569}
27570
27571// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
27572func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
27573	return nil, false
27574}
27575
27576// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
27577func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
27578	return &vtvunmi, true
27579}
27580
27581// VmmVirtualMachineDetails VMM fabric provider specific VM settings.
27582type VmmVirtualMachineDetails struct {
27583	// SourceItemID - The source id of the object.
27584	SourceItemID *string `json:"sourceItemId,omitempty"`
27585	// Generation - The id of the object in fabric.
27586	Generation *string `json:"generation,omitempty"`
27587	// OsDetails - The Last replication time.
27588	OsDetails *OSDetails `json:"osDetails,omitempty"`
27589	// DiskDetails - The Last successful failover time.
27590	DiskDetails *[]DiskDetails `json:"diskDetails,omitempty"`
27591	// HasPhysicalDisk - A value indicating whether the VM has a physical disk attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
27592	HasPhysicalDisk PresenceStatus `json:"hasPhysicalDisk,omitempty"`
27593	// HasFibreChannelAdapter - A value indicating whether the VM has a fibre channel adapter attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
27594	HasFibreChannelAdapter PresenceStatus `json:"hasFibreChannelAdapter,omitempty"`
27595	// HasSharedVhd - A value indicating whether the VM has a shared VHD attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
27596	HasSharedVhd PresenceStatus `json:"hasSharedVhd,omitempty"`
27597	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
27598	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
27599}
27600
27601// MarshalJSON is the custom marshaler for VmmVirtualMachineDetails.
27602func (vvmd VmmVirtualMachineDetails) MarshalJSON() ([]byte, error) {
27603	vvmd.InstanceType = InstanceTypeVmmVirtualMachine
27604	objectMap := make(map[string]interface{})
27605	if vvmd.SourceItemID != nil {
27606		objectMap["sourceItemId"] = vvmd.SourceItemID
27607	}
27608	if vvmd.Generation != nil {
27609		objectMap["generation"] = vvmd.Generation
27610	}
27611	if vvmd.OsDetails != nil {
27612		objectMap["osDetails"] = vvmd.OsDetails
27613	}
27614	if vvmd.DiskDetails != nil {
27615		objectMap["diskDetails"] = vvmd.DiskDetails
27616	}
27617	if vvmd.HasPhysicalDisk != "" {
27618		objectMap["hasPhysicalDisk"] = vvmd.HasPhysicalDisk
27619	}
27620	if vvmd.HasFibreChannelAdapter != "" {
27621		objectMap["hasFibreChannelAdapter"] = vvmd.HasFibreChannelAdapter
27622	}
27623	if vvmd.HasSharedVhd != "" {
27624		objectMap["hasSharedVhd"] = vvmd.HasSharedVhd
27625	}
27626	if vvmd.InstanceType != "" {
27627		objectMap["instanceType"] = vvmd.InstanceType
27628	}
27629	return json.Marshal(objectMap)
27630}
27631
27632// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
27633func (vvmd VmmVirtualMachineDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
27634	return nil, false
27635}
27636
27637// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
27638func (vvmd VmmVirtualMachineDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
27639	return nil, false
27640}
27641
27642// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
27643func (vvmd VmmVirtualMachineDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
27644	return &vvmd, true
27645}
27646
27647// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
27648func (vvmd VmmVirtualMachineDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
27649	return nil, false
27650}
27651
27652// AsConfigurationSettings is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
27653func (vvmd VmmVirtualMachineDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
27654	return nil, false
27655}
27656
27657// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
27658func (vvmd VmmVirtualMachineDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
27659	return &vvmd, true
27660}
27661
27662// VMNicDetails hyper V VM network details.
27663type VMNicDetails struct {
27664	// NicID - The nic Id.
27665	NicID *string `json:"nicId,omitempty"`
27666	// ReplicaNicID - The replica nic Id.
27667	ReplicaNicID *string `json:"replicaNicId,omitempty"`
27668	// SourceNicArmID - The source nic ARM Id.
27669	SourceNicArmID *string `json:"sourceNicArmId,omitempty"`
27670	// VMSubnetName - VM subnet name.
27671	VMSubnetName *string `json:"vMSubnetName,omitempty"`
27672	// VMNetworkName - VM network name.
27673	VMNetworkName *string `json:"vMNetworkName,omitempty"`
27674	// RecoveryVMNetworkID - Recovery VM network Id.
27675	RecoveryVMNetworkID *string `json:"recoveryVMNetworkId,omitempty"`
27676	// RecoveryVMSubnetName - Recovery VM subnet name.
27677	RecoveryVMSubnetName *string `json:"recoveryVMSubnetName,omitempty"`
27678	// IPAddressType - Ip address type.
27679	IPAddressType *string `json:"ipAddressType,omitempty"`
27680	// PrimaryNicStaticIPAddress - Primary nic static IP address.
27681	PrimaryNicStaticIPAddress *string `json:"primaryNicStaticIPAddress,omitempty"`
27682	// ReplicaNicStaticIPAddress - Replica nic static IP address.
27683	ReplicaNicStaticIPAddress *string `json:"replicaNicStaticIPAddress,omitempty"`
27684	// SelectionType - Selection type for failover.
27685	SelectionType *string `json:"selectionType,omitempty"`
27686	// RecoveryNicIPAddressType - IP allocation type for recovery VM.
27687	RecoveryNicIPAddressType *string `json:"recoveryNicIpAddressType,omitempty"`
27688	// RecoveryPublicIPAddressID - The id of the public IP address resource associated with the NIC.
27689	RecoveryPublicIPAddressID *string `json:"recoveryPublicIpAddressId,omitempty"`
27690	// RecoveryNetworkSecurityGroupID - The id of the NSG associated with the NIC.
27691	RecoveryNetworkSecurityGroupID *string `json:"recoveryNetworkSecurityGroupId,omitempty"`
27692	// RecoveryLBBackendAddressPoolIds - The target backend address pools for the NIC.
27693	RecoveryLBBackendAddressPoolIds *[]string `json:"recoveryLBBackendAddressPoolIds,omitempty"`
27694	// EnableAcceleratedNetworkingOnRecovery - A value indicating whether the NIC has accelerated networking enabled.
27695	EnableAcceleratedNetworkingOnRecovery *bool `json:"enableAcceleratedNetworkingOnRecovery,omitempty"`
27696	// TfoVMNetworkID - The network to be used by NIC during test failover.
27697	TfoVMNetworkID *string `json:"tfoVMNetworkId,omitempty"`
27698	// TfoVMSubnetName - The subnet to be used by NIC during test failover.
27699	TfoVMSubnetName *string `json:"tfoVMSubnetName,omitempty"`
27700	// TfoNetworkSecurityGroupID - The NSG to be used by NIC during test failover.
27701	TfoNetworkSecurityGroupID *string `json:"tfoNetworkSecurityGroupId,omitempty"`
27702	// EnableAcceleratedNetworkingOnTfo - Whether the test failover NIC has accelerated networking enabled.
27703	EnableAcceleratedNetworkingOnTfo *bool `json:"enableAcceleratedNetworkingOnTfo,omitempty"`
27704	// TfoIPConfigs - The IP configurations to be used by NIC during test failover.
27705	TfoIPConfigs *[]IPConfig `json:"tfoIPConfigs,omitempty"`
27706	// RecoveryNicName - The name of the NIC to be used when creating target NICs.
27707	RecoveryNicName *string `json:"recoveryNicName,omitempty"`
27708	// RecoveryNicResourceGroupName - The resource group of the NIC to be used when creating target NICs.
27709	RecoveryNicResourceGroupName *string `json:"recoveryNicResourceGroupName,omitempty"`
27710	// ReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during failover subject to availability.
27711	ReuseExistingNic *bool `json:"reuseExistingNic,omitempty"`
27712	// TfoRecoveryNicName - The name of the NIC to be used when creating target NICs in TFO.
27713	TfoRecoveryNicName *string `json:"tfoRecoveryNicName,omitempty"`
27714	// TfoRecoveryNicResourceGroupName - The resource group of the NIC to be used when creating target NICs in TFO.
27715	TfoRecoveryNicResourceGroupName *string `json:"tfoRecoveryNicResourceGroupName,omitempty"`
27716	// TfoReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during test failover subject to availability.
27717	TfoReuseExistingNic *bool `json:"tfoReuseExistingNic,omitempty"`
27718}
27719
27720// VMNicInputDetails hyper V VM network input details.
27721type VMNicInputDetails struct {
27722	// NicID - The nic Id.
27723	NicID *string `json:"nicId,omitempty"`
27724	// RecoveryVMSubnetName - Recovery VM subnet name.
27725	RecoveryVMSubnetName *string `json:"recoveryVMSubnetName,omitempty"`
27726	// ReplicaNicStaticIPAddress - Replica nic static IP address.
27727	ReplicaNicStaticIPAddress *string `json:"replicaNicStaticIPAddress,omitempty"`
27728	// SelectionType - Selection type for failover.
27729	SelectionType *string `json:"selectionType,omitempty"`
27730	// RecoveryPublicIPAddressID - The id of the public IP address resource associated with the NIC.
27731	RecoveryPublicIPAddressID *string `json:"recoveryPublicIpAddressId,omitempty"`
27732	// RecoveryNetworkSecurityGroupID - The id of the NSG associated with the NIC.
27733	RecoveryNetworkSecurityGroupID *string `json:"recoveryNetworkSecurityGroupId,omitempty"`
27734	// RecoveryLBBackendAddressPoolIds - The target backend address pools for the NIC.
27735	RecoveryLBBackendAddressPoolIds *[]string `json:"recoveryLBBackendAddressPoolIds,omitempty"`
27736	// EnableAcceleratedNetworkingOnRecovery - Whether the NIC has accelerated networking enabled.
27737	EnableAcceleratedNetworkingOnRecovery *bool `json:"enableAcceleratedNetworkingOnRecovery,omitempty"`
27738	// TfoVMSubnetName - The subnet to be used by NIC during test failover.
27739	TfoVMSubnetName *string `json:"tfoVMSubnetName,omitempty"`
27740	// TfoNetworkSecurityGroupID - The NSG to be used by NIC during test failover.
27741	TfoNetworkSecurityGroupID *string `json:"tfoNetworkSecurityGroupId,omitempty"`
27742	// EnableAcceleratedNetworkingOnTfo - Whether the test NIC has accelerated networking enabled.
27743	EnableAcceleratedNetworkingOnTfo *bool `json:"enableAcceleratedNetworkingOnTfo,omitempty"`
27744	// TfoIPConfigs - The IP configurations to be used by NIC during test failover.
27745	TfoIPConfigs *[]IPConfig `json:"tfoIPConfigs,omitempty"`
27746	// RecoveryNicName - The name of the NIC to be used when creating target NICs.
27747	RecoveryNicName *string `json:"recoveryNicName,omitempty"`
27748	// RecoveryNicResourceGroupName - The resource group of the NIC to be used when creating target NICs.
27749	RecoveryNicResourceGroupName *string `json:"recoveryNicResourceGroupName,omitempty"`
27750	// ReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during failover subject to availability.
27751	ReuseExistingNic *bool `json:"reuseExistingNic,omitempty"`
27752	// TfoNicName - The name of the NIC to be used when creating target NICs in TFO.
27753	TfoNicName *string `json:"tfoNicName,omitempty"`
27754	// TfoNicResourceGroupName - The resource group of the NIC to be used when creating target NICs in TFO.
27755	TfoNicResourceGroupName *string `json:"tfoNicResourceGroupName,omitempty"`
27756	// TfoReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during test failover subject to availability.
27757	TfoReuseExistingNic *bool `json:"tfoReuseExistingNic,omitempty"`
27758}
27759
27760// VMNicUpdatesTaskDetails this class represents the vm NicUpdates task details.
27761type VMNicUpdatesTaskDetails struct {
27762	// VMID - Virtual machine Id.
27763	VMID *string `json:"vmId,omitempty"`
27764	// NicID - Nic Id.
27765	NicID *string `json:"nicId,omitempty"`
27766	// Name - Name of the Nic.
27767	Name *string `json:"name,omitempty"`
27768	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
27769	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
27770}
27771
27772// MarshalJSON is the custom marshaler for VMNicUpdatesTaskDetails.
27773func (vnutd VMNicUpdatesTaskDetails) MarshalJSON() ([]byte, error) {
27774	vnutd.InstanceType = InstanceTypeVMNicUpdatesTaskDetails
27775	objectMap := make(map[string]interface{})
27776	if vnutd.VMID != nil {
27777		objectMap["vmId"] = vnutd.VMID
27778	}
27779	if vnutd.NicID != nil {
27780		objectMap["nicId"] = vnutd.NicID
27781	}
27782	if vnutd.Name != nil {
27783		objectMap["name"] = vnutd.Name
27784	}
27785	if vnutd.InstanceType != "" {
27786		objectMap["instanceType"] = vnutd.InstanceType
27787	}
27788	return json.Marshal(objectMap)
27789}
27790
27791// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27792func (vnutd VMNicUpdatesTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
27793	return nil, false
27794}
27795
27796// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27797func (vnutd VMNicUpdatesTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
27798	return nil, false
27799}
27800
27801// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27802func (vnutd VMNicUpdatesTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
27803	return nil, false
27804}
27805
27806// AsJobTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27807func (vnutd VMNicUpdatesTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
27808	return nil, false
27809}
27810
27811// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27812func (vnutd VMNicUpdatesTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
27813	return nil, false
27814}
27815
27816// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27817func (vnutd VMNicUpdatesTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
27818	return nil, false
27819}
27820
27821// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27822func (vnutd VMNicUpdatesTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
27823	return nil, false
27824}
27825
27826// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27827func (vnutd VMNicUpdatesTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
27828	return &vnutd, true
27829}
27830
27831// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27832func (vnutd VMNicUpdatesTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
27833	return nil, false
27834}
27835
27836// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
27837func (vnutd VMNicUpdatesTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
27838	return &vnutd, true
27839}
27840
27841// VMwareCbtContainerCreationInput vMwareCbt container creation input.
27842type VMwareCbtContainerCreationInput struct {
27843	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero'
27844	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerCreationInput `json:"instanceType,omitempty"`
27845}
27846
27847// MarshalJSON is the custom marshaler for VMwareCbtContainerCreationInput.
27848func (vmccci VMwareCbtContainerCreationInput) MarshalJSON() ([]byte, error) {
27849	vmccci.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero
27850	objectMap := make(map[string]interface{})
27851	if vmccci.InstanceType != "" {
27852		objectMap["instanceType"] = vmccci.InstanceType
27853	}
27854	return json.Marshal(objectMap)
27855}
27856
27857// AsA2AContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
27858func (vmccci VMwareCbtContainerCreationInput) AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool) {
27859	return nil, false
27860}
27861
27862// AsVMwareCbtContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
27863func (vmccci VMwareCbtContainerCreationInput) AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool) {
27864	return &vmccci, true
27865}
27866
27867// AsReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
27868func (vmccci VMwareCbtContainerCreationInput) AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool) {
27869	return nil, false
27870}
27871
27872// AsBasicReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
27873func (vmccci VMwareCbtContainerCreationInput) AsBasicReplicationProviderSpecificContainerCreationInput() (BasicReplicationProviderSpecificContainerCreationInput, bool) {
27874	return &vmccci, true
27875}
27876
27877// VMwareCbtContainerMappingInput vMwareCbt container mapping input.
27878type VMwareCbtContainerMappingInput struct {
27879	// KeyVaultID - The target key vault ARM Id.
27880	KeyVaultID *string `json:"keyVaultId,omitempty"`
27881	// KeyVaultURI - The target key vault URL.
27882	KeyVaultURI *string `json:"keyVaultUri,omitempty"`
27883	// StorageAccountID - The storage account ARM Id.
27884	StorageAccountID *string `json:"storageAccountId,omitempty"`
27885	// StorageAccountSasSecretName - The secret name of the storage account.
27886	StorageAccountSasSecretName *string `json:"storageAccountSasSecretName,omitempty"`
27887	// ServiceBusConnectionStringSecretName - The secret name of the service bus connection string.
27888	ServiceBusConnectionStringSecretName *string `json:"serviceBusConnectionStringSecretName,omitempty"`
27889	// TargetLocation - The target location.
27890	TargetLocation *string `json:"targetLocation,omitempty"`
27891	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt'
27892	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerMappingInput `json:"instanceType,omitempty"`
27893}
27894
27895// MarshalJSON is the custom marshaler for VMwareCbtContainerMappingInput.
27896func (vmccmi VMwareCbtContainerMappingInput) MarshalJSON() ([]byte, error) {
27897	vmccmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt
27898	objectMap := make(map[string]interface{})
27899	if vmccmi.KeyVaultID != nil {
27900		objectMap["keyVaultId"] = vmccmi.KeyVaultID
27901	}
27902	if vmccmi.KeyVaultURI != nil {
27903		objectMap["keyVaultUri"] = vmccmi.KeyVaultURI
27904	}
27905	if vmccmi.StorageAccountID != nil {
27906		objectMap["storageAccountId"] = vmccmi.StorageAccountID
27907	}
27908	if vmccmi.StorageAccountSasSecretName != nil {
27909		objectMap["storageAccountSasSecretName"] = vmccmi.StorageAccountSasSecretName
27910	}
27911	if vmccmi.ServiceBusConnectionStringSecretName != nil {
27912		objectMap["serviceBusConnectionStringSecretName"] = vmccmi.ServiceBusConnectionStringSecretName
27913	}
27914	if vmccmi.TargetLocation != nil {
27915		objectMap["targetLocation"] = vmccmi.TargetLocation
27916	}
27917	if vmccmi.InstanceType != "" {
27918		objectMap["instanceType"] = vmccmi.InstanceType
27919	}
27920	return json.Marshal(objectMap)
27921}
27922
27923// AsA2AContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
27924func (vmccmi VMwareCbtContainerMappingInput) AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool) {
27925	return nil, false
27926}
27927
27928// AsVMwareCbtContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
27929func (vmccmi VMwareCbtContainerMappingInput) AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool) {
27930	return &vmccmi, true
27931}
27932
27933// AsReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
27934func (vmccmi VMwareCbtContainerMappingInput) AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool) {
27935	return nil, false
27936}
27937
27938// AsBasicReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
27939func (vmccmi VMwareCbtContainerMappingInput) AsBasicReplicationProviderSpecificContainerMappingInput() (BasicReplicationProviderSpecificContainerMappingInput, bool) {
27940	return &vmccmi, true
27941}
27942
27943// VMwareCbtDiskInput vMwareCbt disk input.
27944type VMwareCbtDiskInput struct {
27945	// DiskID - The disk Id.
27946	DiskID *string `json:"diskId,omitempty"`
27947	// IsOSDisk - A value indicating whether the disk is the OS disk.
27948	IsOSDisk *string `json:"isOSDisk,omitempty"`
27949	// LogStorageAccountID - The log storage account ARM Id.
27950	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
27951	// LogStorageAccountSasSecretName - The key vault secret name of the log storage account.
27952	LogStorageAccountSasSecretName *string `json:"logStorageAccountSasSecretName,omitempty"`
27953	// DiskType - The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
27954	DiskType DiskAccountType `json:"diskType,omitempty"`
27955}
27956
27957// VMwareCbtEnableMigrationInput vMwareCbt specific enable migration input.
27958type VMwareCbtEnableMigrationInput struct {
27959	// VmwareMachineID - The ARM Id of the VM discovered in VMware.
27960	VmwareMachineID *string `json:"vmwareMachineId,omitempty"`
27961	// DisksToInclude - The disks to include list.
27962	DisksToInclude *[]VMwareCbtDiskInput `json:"disksToInclude,omitempty"`
27963	// LicenseType - License type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
27964	LicenseType LicenseType `json:"licenseType,omitempty"`
27965	// DataMoverRunAsAccountID - The data mover RunAs account Id.
27966	DataMoverRunAsAccountID *string `json:"dataMoverRunAsAccountId,omitempty"`
27967	// SnapshotRunAsAccountID - The snapshot RunAs account Id.
27968	SnapshotRunAsAccountID *string `json:"snapshotRunAsAccountId,omitempty"`
27969	// TargetVMName - The target VM name.
27970	TargetVMName *string `json:"targetVmName,omitempty"`
27971	// TargetVMSize - The target VM size.
27972	TargetVMSize *string `json:"targetVmSize,omitempty"`
27973	// TargetResourceGroupID - The target resource group ARM Id.
27974	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
27975	// TargetNetworkID - The target network ARM Id.
27976	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
27977	// TargetSubnetName - The target subnet name.
27978	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
27979	// TargetAvailabilitySetID - The target availability set ARM Id.
27980	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
27981	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
27982	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
27983	// InstanceType - Possible values include: 'InstanceTypeEnableMigrationProviderSpecificInput', 'InstanceTypeVMwareCbt'
27984	InstanceType InstanceTypeBasicEnableMigrationProviderSpecificInput `json:"instanceType,omitempty"`
27985}
27986
27987// MarshalJSON is the custom marshaler for VMwareCbtEnableMigrationInput.
27988func (vmcemi VMwareCbtEnableMigrationInput) MarshalJSON() ([]byte, error) {
27989	vmcemi.InstanceType = InstanceTypeVMwareCbt
27990	objectMap := make(map[string]interface{})
27991	if vmcemi.VmwareMachineID != nil {
27992		objectMap["vmwareMachineId"] = vmcemi.VmwareMachineID
27993	}
27994	if vmcemi.DisksToInclude != nil {
27995		objectMap["disksToInclude"] = vmcemi.DisksToInclude
27996	}
27997	if vmcemi.LicenseType != "" {
27998		objectMap["licenseType"] = vmcemi.LicenseType
27999	}
28000	if vmcemi.DataMoverRunAsAccountID != nil {
28001		objectMap["dataMoverRunAsAccountId"] = vmcemi.DataMoverRunAsAccountID
28002	}
28003	if vmcemi.SnapshotRunAsAccountID != nil {
28004		objectMap["snapshotRunAsAccountId"] = vmcemi.SnapshotRunAsAccountID
28005	}
28006	if vmcemi.TargetVMName != nil {
28007		objectMap["targetVmName"] = vmcemi.TargetVMName
28008	}
28009	if vmcemi.TargetVMSize != nil {
28010		objectMap["targetVmSize"] = vmcemi.TargetVMSize
28011	}
28012	if vmcemi.TargetResourceGroupID != nil {
28013		objectMap["targetResourceGroupId"] = vmcemi.TargetResourceGroupID
28014	}
28015	if vmcemi.TargetNetworkID != nil {
28016		objectMap["targetNetworkId"] = vmcemi.TargetNetworkID
28017	}
28018	if vmcemi.TargetSubnetName != nil {
28019		objectMap["targetSubnetName"] = vmcemi.TargetSubnetName
28020	}
28021	if vmcemi.TargetAvailabilitySetID != nil {
28022		objectMap["targetAvailabilitySetId"] = vmcemi.TargetAvailabilitySetID
28023	}
28024	if vmcemi.TargetBootDiagnosticsStorageAccountID != nil {
28025		objectMap["targetBootDiagnosticsStorageAccountId"] = vmcemi.TargetBootDiagnosticsStorageAccountID
28026	}
28027	if vmcemi.InstanceType != "" {
28028		objectMap["instanceType"] = vmcemi.InstanceType
28029	}
28030	return json.Marshal(objectMap)
28031}
28032
28033// AsVMwareCbtEnableMigrationInput is the BasicEnableMigrationProviderSpecificInput implementation for VMwareCbtEnableMigrationInput.
28034func (vmcemi VMwareCbtEnableMigrationInput) AsVMwareCbtEnableMigrationInput() (*VMwareCbtEnableMigrationInput, bool) {
28035	return &vmcemi, true
28036}
28037
28038// AsEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for VMwareCbtEnableMigrationInput.
28039func (vmcemi VMwareCbtEnableMigrationInput) AsEnableMigrationProviderSpecificInput() (*EnableMigrationProviderSpecificInput, bool) {
28040	return nil, false
28041}
28042
28043// AsBasicEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for VMwareCbtEnableMigrationInput.
28044func (vmcemi VMwareCbtEnableMigrationInput) AsBasicEnableMigrationProviderSpecificInput() (BasicEnableMigrationProviderSpecificInput, bool) {
28045	return &vmcemi, true
28046}
28047
28048// VMwareCbtMigrateInput vMwareCbt specific migrate input.
28049type VMwareCbtMigrateInput struct {
28050	// PerformShutdown - A value indicating whether VM is to be shutdown.
28051	PerformShutdown *string `json:"performShutdown,omitempty"`
28052	// InstanceType - Possible values include: 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeMigrateProviderSpecificInput', 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt'
28053	InstanceType InstanceTypeBasicMigrateProviderSpecificInput `json:"instanceType,omitempty"`
28054}
28055
28056// MarshalJSON is the custom marshaler for VMwareCbtMigrateInput.
28057func (vmcmi VMwareCbtMigrateInput) MarshalJSON() ([]byte, error) {
28058	vmcmi.InstanceType = InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt
28059	objectMap := make(map[string]interface{})
28060	if vmcmi.PerformShutdown != nil {
28061		objectMap["performShutdown"] = vmcmi.PerformShutdown
28062	}
28063	if vmcmi.InstanceType != "" {
28064		objectMap["instanceType"] = vmcmi.InstanceType
28065	}
28066	return json.Marshal(objectMap)
28067}
28068
28069// AsVMwareCbtMigrateInput is the BasicMigrateProviderSpecificInput implementation for VMwareCbtMigrateInput.
28070func (vmcmi VMwareCbtMigrateInput) AsVMwareCbtMigrateInput() (*VMwareCbtMigrateInput, bool) {
28071	return &vmcmi, true
28072}
28073
28074// AsMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for VMwareCbtMigrateInput.
28075func (vmcmi VMwareCbtMigrateInput) AsMigrateProviderSpecificInput() (*MigrateProviderSpecificInput, bool) {
28076	return nil, false
28077}
28078
28079// AsBasicMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for VMwareCbtMigrateInput.
28080func (vmcmi VMwareCbtMigrateInput) AsBasicMigrateProviderSpecificInput() (BasicMigrateProviderSpecificInput, bool) {
28081	return &vmcmi, true
28082}
28083
28084// VMwareCbtMigrationDetails vMwareCbt provider specific settings
28085type VMwareCbtMigrationDetails struct {
28086	// VmwareMachineID - READ-ONLY; The ARM Id of the VM discovered in VMware.
28087	VmwareMachineID *string `json:"vmwareMachineId,omitempty"`
28088	// OsType - READ-ONLY; The type of the OS on the VM.
28089	OsType *string `json:"osType,omitempty"`
28090	// LicenseType - License Type of the VM to be used.
28091	LicenseType *string `json:"licenseType,omitempty"`
28092	// DataMoverRunAsAccountID - READ-ONLY; The data mover RunAs account Id.
28093	DataMoverRunAsAccountID *string `json:"dataMoverRunAsAccountId,omitempty"`
28094	// SnapshotRunAsAccountID - READ-ONLY; The snapshot RunAs account Id.
28095	SnapshotRunAsAccountID *string `json:"snapshotRunAsAccountId,omitempty"`
28096	// TargetVMName - Target VM name.
28097	TargetVMName *string `json:"targetVmName,omitempty"`
28098	// TargetVMSize - The target VM size.
28099	TargetVMSize *string `json:"targetVmSize,omitempty"`
28100	// TargetLocation - READ-ONLY; The target location.
28101	TargetLocation *string `json:"targetLocation,omitempty"`
28102	// TargetResourceGroupID - The target resource group Id.
28103	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
28104	// TargetAvailabilitySetID - The target availability set Id.
28105	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
28106	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
28107	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
28108	// ProtectedDisks - The list of protected disks.
28109	ProtectedDisks *[]VMwareCbtProtectedDiskDetails `json:"protectedDisks,omitempty"`
28110	// TargetNetworkID - The target network Id.
28111	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
28112	// VMNics - The network details.
28113	VMNics *[]VMwareCbtNicDetails `json:"vmNics,omitempty"`
28114	// MigrationRecoveryPointID - READ-ONLY; The recovery point Id to which the VM was migrated.
28115	MigrationRecoveryPointID *string `json:"migrationRecoveryPointId,omitempty"`
28116	// LastRecoveryPointReceived - READ-ONLY; The last recovery point received time.
28117	LastRecoveryPointReceived *date.Time `json:"lastRecoveryPointReceived,omitempty"`
28118	// InstanceType - Possible values include: 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeMigrationProviderSpecificSettings', 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt'
28119	InstanceType InstanceTypeBasicMigrationProviderSpecificSettings `json:"instanceType,omitempty"`
28120}
28121
28122// MarshalJSON is the custom marshaler for VMwareCbtMigrationDetails.
28123func (vmcmd VMwareCbtMigrationDetails) MarshalJSON() ([]byte, error) {
28124	vmcmd.InstanceType = InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt
28125	objectMap := make(map[string]interface{})
28126	if vmcmd.LicenseType != nil {
28127		objectMap["licenseType"] = vmcmd.LicenseType
28128	}
28129	if vmcmd.TargetVMName != nil {
28130		objectMap["targetVmName"] = vmcmd.TargetVMName
28131	}
28132	if vmcmd.TargetVMSize != nil {
28133		objectMap["targetVmSize"] = vmcmd.TargetVMSize
28134	}
28135	if vmcmd.TargetResourceGroupID != nil {
28136		objectMap["targetResourceGroupId"] = vmcmd.TargetResourceGroupID
28137	}
28138	if vmcmd.TargetAvailabilitySetID != nil {
28139		objectMap["targetAvailabilitySetId"] = vmcmd.TargetAvailabilitySetID
28140	}
28141	if vmcmd.TargetBootDiagnosticsStorageAccountID != nil {
28142		objectMap["targetBootDiagnosticsStorageAccountId"] = vmcmd.TargetBootDiagnosticsStorageAccountID
28143	}
28144	if vmcmd.ProtectedDisks != nil {
28145		objectMap["protectedDisks"] = vmcmd.ProtectedDisks
28146	}
28147	if vmcmd.TargetNetworkID != nil {
28148		objectMap["targetNetworkId"] = vmcmd.TargetNetworkID
28149	}
28150	if vmcmd.VMNics != nil {
28151		objectMap["vmNics"] = vmcmd.VMNics
28152	}
28153	if vmcmd.InstanceType != "" {
28154		objectMap["instanceType"] = vmcmd.InstanceType
28155	}
28156	return json.Marshal(objectMap)
28157}
28158
28159// AsVMwareCbtMigrationDetails is the BasicMigrationProviderSpecificSettings implementation for VMwareCbtMigrationDetails.
28160func (vmcmd VMwareCbtMigrationDetails) AsVMwareCbtMigrationDetails() (*VMwareCbtMigrationDetails, bool) {
28161	return &vmcmd, true
28162}
28163
28164// AsMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for VMwareCbtMigrationDetails.
28165func (vmcmd VMwareCbtMigrationDetails) AsMigrationProviderSpecificSettings() (*MigrationProviderSpecificSettings, bool) {
28166	return nil, false
28167}
28168
28169// AsBasicMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for VMwareCbtMigrationDetails.
28170func (vmcmd VMwareCbtMigrationDetails) AsBasicMigrationProviderSpecificSettings() (BasicMigrationProviderSpecificSettings, bool) {
28171	return &vmcmd, true
28172}
28173
28174// VMwareCbtNicDetails vMwareCbt NIC details.
28175type VMwareCbtNicDetails struct {
28176	// NicID - READ-ONLY; The NIC Id.
28177	NicID *string `json:"nicId,omitempty"`
28178	// IsPrimaryNic - A value indicating whether this is the primary NIC.
28179	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
28180	// SourceIPAddress - READ-ONLY; The source IP address.
28181	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
28182	// SourceIPAddressType - READ-ONLY; The source IP address type. Possible values include: 'Dynamic', 'Static'
28183	SourceIPAddressType EthernetAddressType `json:"sourceIPAddressType,omitempty"`
28184	// SourceNetworkID - READ-ONLY; Source network Id.
28185	SourceNetworkID *string `json:"sourceNetworkId,omitempty"`
28186	// TargetIPAddress - The target IP address.
28187	TargetIPAddress *string `json:"targetIPAddress,omitempty"`
28188	// TargetIPAddressType - The target IP address type. Possible values include: 'Dynamic', 'Static'
28189	TargetIPAddressType EthernetAddressType `json:"targetIPAddressType,omitempty"`
28190	// TargetSubnetName - Target subnet name.
28191	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
28192	// IsSelectedForMigration - A value indicating whether this NIC is selected for migration.
28193	IsSelectedForMigration *string `json:"isSelectedForMigration,omitempty"`
28194}
28195
28196// MarshalJSON is the custom marshaler for VMwareCbtNicDetails.
28197func (vmcnd VMwareCbtNicDetails) MarshalJSON() ([]byte, error) {
28198	objectMap := make(map[string]interface{})
28199	if vmcnd.IsPrimaryNic != nil {
28200		objectMap["isPrimaryNic"] = vmcnd.IsPrimaryNic
28201	}
28202	if vmcnd.TargetIPAddress != nil {
28203		objectMap["targetIPAddress"] = vmcnd.TargetIPAddress
28204	}
28205	if vmcnd.TargetIPAddressType != "" {
28206		objectMap["targetIPAddressType"] = vmcnd.TargetIPAddressType
28207	}
28208	if vmcnd.TargetSubnetName != nil {
28209		objectMap["targetSubnetName"] = vmcnd.TargetSubnetName
28210	}
28211	if vmcnd.IsSelectedForMigration != nil {
28212		objectMap["isSelectedForMigration"] = vmcnd.IsSelectedForMigration
28213	}
28214	return json.Marshal(objectMap)
28215}
28216
28217// VMwareCbtNicInput vMwareCbt NIC input.
28218type VMwareCbtNicInput struct {
28219	// NicID - The NIC Id.
28220	NicID *string `json:"nicId,omitempty"`
28221	// IsPrimaryNic - A value indicating whether this is the primary NIC.
28222	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
28223	// TargetSubnetName - Target subnet name.
28224	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
28225	// TargetStaticIPAddress - The static IP address.
28226	TargetStaticIPAddress *string `json:"targetStaticIPAddress,omitempty"`
28227	// IsSelectedForMigration - A value indicating whether this NIC is selected for migration.
28228	IsSelectedForMigration *string `json:"isSelectedForMigration,omitempty"`
28229}
28230
28231// VMwareCbtPolicyCreationInput vMware Cbt policy creation input.
28232type VMwareCbtPolicyCreationInput struct {
28233	// RecoveryPointHistoryInMinutes - The duration in minutes until which the recovery points need to be stored.
28234	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
28235	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
28236	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
28237	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
28238	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
28239	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
28240	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
28241}
28242
28243// MarshalJSON is the custom marshaler for VMwareCbtPolicyCreationInput.
28244func (vmcpci VMwareCbtPolicyCreationInput) MarshalJSON() ([]byte, error) {
28245	vmcpci.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt
28246	objectMap := make(map[string]interface{})
28247	if vmcpci.RecoveryPointHistoryInMinutes != nil {
28248		objectMap["recoveryPointHistoryInMinutes"] = vmcpci.RecoveryPointHistoryInMinutes
28249	}
28250	if vmcpci.CrashConsistentFrequencyInMinutes != nil {
28251		objectMap["crashConsistentFrequencyInMinutes"] = vmcpci.CrashConsistentFrequencyInMinutes
28252	}
28253	if vmcpci.AppConsistentFrequencyInMinutes != nil {
28254		objectMap["appConsistentFrequencyInMinutes"] = vmcpci.AppConsistentFrequencyInMinutes
28255	}
28256	if vmcpci.InstanceType != "" {
28257		objectMap["instanceType"] = vmcpci.InstanceType
28258	}
28259	return json.Marshal(objectMap)
28260}
28261
28262// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28263func (vmcpci VMwareCbtPolicyCreationInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
28264	return nil, false
28265}
28266
28267// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28268func (vmcpci VMwareCbtPolicyCreationInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
28269	return nil, false
28270}
28271
28272// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28273func (vmcpci VMwareCbtPolicyCreationInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
28274	return nil, false
28275}
28276
28277// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28278func (vmcpci VMwareCbtPolicyCreationInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
28279	return nil, false
28280}
28281
28282// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28283func (vmcpci VMwareCbtPolicyCreationInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
28284	return nil, false
28285}
28286
28287// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28288func (vmcpci VMwareCbtPolicyCreationInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
28289	return nil, false
28290}
28291
28292// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28293func (vmcpci VMwareCbtPolicyCreationInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
28294	return nil, false
28295}
28296
28297// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28298func (vmcpci VMwareCbtPolicyCreationInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
28299	return &vmcpci, true
28300}
28301
28302// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28303func (vmcpci VMwareCbtPolicyCreationInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
28304	return nil, false
28305}
28306
28307// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
28308func (vmcpci VMwareCbtPolicyCreationInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
28309	return &vmcpci, true
28310}
28311
28312// VmwareCbtPolicyDetails vMware Cbt specific policy details.
28313type VmwareCbtPolicyDetails struct {
28314	// RecoveryPointHistoryInMinutes - The duration in minutes until which the recovery points need to be stored.
28315	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
28316	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
28317	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
28318	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
28319	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
28320	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
28321	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
28322}
28323
28324// MarshalJSON is the custom marshaler for VmwareCbtPolicyDetails.
28325func (vcpd VmwareCbtPolicyDetails) MarshalJSON() ([]byte, error) {
28326	vcpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt
28327	objectMap := make(map[string]interface{})
28328	if vcpd.RecoveryPointHistoryInMinutes != nil {
28329		objectMap["recoveryPointHistoryInMinutes"] = vcpd.RecoveryPointHistoryInMinutes
28330	}
28331	if vcpd.AppConsistentFrequencyInMinutes != nil {
28332		objectMap["appConsistentFrequencyInMinutes"] = vcpd.AppConsistentFrequencyInMinutes
28333	}
28334	if vcpd.CrashConsistentFrequencyInMinutes != nil {
28335		objectMap["crashConsistentFrequencyInMinutes"] = vcpd.CrashConsistentFrequencyInMinutes
28336	}
28337	if vcpd.InstanceType != "" {
28338		objectMap["instanceType"] = vcpd.InstanceType
28339	}
28340	return json.Marshal(objectMap)
28341}
28342
28343// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28344func (vcpd VmwareCbtPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
28345	return nil, false
28346}
28347
28348// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28349func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
28350	return nil, false
28351}
28352
28353// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28354func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
28355	return nil, false
28356}
28357
28358// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28359func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
28360	return nil, false
28361}
28362
28363// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28364func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
28365	return nil, false
28366}
28367
28368// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28369func (vcpd VmwareCbtPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
28370	return nil, false
28371}
28372
28373// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28374func (vcpd VmwareCbtPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
28375	return nil, false
28376}
28377
28378// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28379func (vcpd VmwareCbtPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
28380	return nil, false
28381}
28382
28383// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28384func (vcpd VmwareCbtPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
28385	return nil, false
28386}
28387
28388// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28389func (vcpd VmwareCbtPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
28390	return nil, false
28391}
28392
28393// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28394func (vcpd VmwareCbtPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
28395	return &vcpd, true
28396}
28397
28398// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28399func (vcpd VmwareCbtPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
28400	return nil, false
28401}
28402
28403// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
28404func (vcpd VmwareCbtPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
28405	return &vcpd, true
28406}
28407
28408// VMwareCbtProtectedDiskDetails vMwareCbt protected disk details.
28409type VMwareCbtProtectedDiskDetails struct {
28410	// DiskID - READ-ONLY; The disk id.
28411	DiskID *string `json:"diskId,omitempty"`
28412	// DiskName - READ-ONLY; The disk name.
28413	DiskName *string `json:"diskName,omitempty"`
28414	// DiskPath - READ-ONLY; The disk path.
28415	DiskPath *string `json:"diskPath,omitempty"`
28416	// IsOSDisk - READ-ONLY; A value indicating whether the disk is the OS disk.
28417	IsOSDisk *string `json:"isOSDisk,omitempty"`
28418	// CapacityInBytes - READ-ONLY; The disk capacity in bytes.
28419	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
28420	// LogStorageAccountID - READ-ONLY; The log storage account ARM Id.
28421	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
28422	// LogStorageAccountSasSecretName - READ-ONLY; The key vault secret name of the log storage account.
28423	LogStorageAccountSasSecretName *string `json:"logStorageAccountSasSecretName,omitempty"`
28424	// SeedManagedDiskID - READ-ONLY; The ARM Id of the seed managed disk.
28425	SeedManagedDiskID *string `json:"seedManagedDiskId,omitempty"`
28426	// TargetManagedDiskID - READ-ONLY; The ARM Id of the target managed disk.
28427	TargetManagedDiskID *string `json:"targetManagedDiskId,omitempty"`
28428	// DiskType - The disk type. Possible values include: 'DiskTypeStandardLRS', 'DiskTypePremiumLRS', 'DiskTypeStandardSSDLRS'
28429	DiskType DiskType `json:"diskType,omitempty"`
28430}
28431
28432// MarshalJSON is the custom marshaler for VMwareCbtProtectedDiskDetails.
28433func (vmcpdd VMwareCbtProtectedDiskDetails) MarshalJSON() ([]byte, error) {
28434	objectMap := make(map[string]interface{})
28435	if vmcpdd.DiskType != "" {
28436		objectMap["diskType"] = vmcpdd.DiskType
28437	}
28438	return json.Marshal(objectMap)
28439}
28440
28441// VMwareCbtProtectionContainerMappingDetails vMwareCbt provider specific container mapping details.
28442type VMwareCbtProtectionContainerMappingDetails struct {
28443	// KeyVaultID - READ-ONLY; The target key vault ARM Id.
28444	KeyVaultID *string `json:"keyVaultId,omitempty"`
28445	// KeyVaultURI - READ-ONLY; The target key vault URI.
28446	KeyVaultURI *string `json:"keyVaultUri,omitempty"`
28447	// StorageAccountID - READ-ONLY; The storage account ARM Id.
28448	StorageAccountID *string `json:"storageAccountId,omitempty"`
28449	// StorageAccountSasSecretName - READ-ONLY; The secret name of the storage account.
28450	StorageAccountSasSecretName *string `json:"storageAccountSasSecretName,omitempty"`
28451	// ServiceBusConnectionStringSecretName - READ-ONLY; The secret name of the service bus connection string.
28452	ServiceBusConnectionStringSecretName *string `json:"serviceBusConnectionStringSecretName,omitempty"`
28453	// TargetLocation - READ-ONLY; The target location.
28454	TargetLocation *string `json:"targetLocation,omitempty"`
28455	// InstanceType - Possible values include: 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt'
28456	InstanceType InstanceTypeBasicProtectionContainerMappingProviderSpecificDetails `json:"instanceType,omitempty"`
28457}
28458
28459// MarshalJSON is the custom marshaler for VMwareCbtProtectionContainerMappingDetails.
28460func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) MarshalJSON() ([]byte, error) {
28461	vmcpcmd.InstanceType = InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt
28462	objectMap := make(map[string]interface{})
28463	if vmcpcmd.InstanceType != "" {
28464		objectMap["instanceType"] = vmcpcmd.InstanceType
28465	}
28466	return json.Marshal(objectMap)
28467}
28468
28469// AsA2AProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
28470func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool) {
28471	return nil, false
28472}
28473
28474// AsVMwareCbtProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
28475func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool) {
28476	return &vmcpcmd, true
28477}
28478
28479// AsProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
28480func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool) {
28481	return nil, false
28482}
28483
28484// AsBasicProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
28485func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsBasicProtectionContainerMappingProviderSpecificDetails() (BasicProtectionContainerMappingProviderSpecificDetails, bool) {
28486	return &vmcpcmd, true
28487}
28488
28489// VMwareCbtTestMigrateInput vMwareCbt specific test migrate input.
28490type VMwareCbtTestMigrateInput struct {
28491	// RecoveryPointID - The recovery point Id.
28492	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
28493	// NetworkID - The test network Id.
28494	NetworkID *string `json:"networkId,omitempty"`
28495	// InstanceType - Possible values include: 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeTestMigrateProviderSpecificInput', 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt'
28496	InstanceType InstanceTypeBasicTestMigrateProviderSpecificInput `json:"instanceType,omitempty"`
28497}
28498
28499// MarshalJSON is the custom marshaler for VMwareCbtTestMigrateInput.
28500func (vmctmi VMwareCbtTestMigrateInput) MarshalJSON() ([]byte, error) {
28501	vmctmi.InstanceType = InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt
28502	objectMap := make(map[string]interface{})
28503	if vmctmi.RecoveryPointID != nil {
28504		objectMap["recoveryPointId"] = vmctmi.RecoveryPointID
28505	}
28506	if vmctmi.NetworkID != nil {
28507		objectMap["networkId"] = vmctmi.NetworkID
28508	}
28509	if vmctmi.InstanceType != "" {
28510		objectMap["instanceType"] = vmctmi.InstanceType
28511	}
28512	return json.Marshal(objectMap)
28513}
28514
28515// AsVMwareCbtTestMigrateInput is the BasicTestMigrateProviderSpecificInput implementation for VMwareCbtTestMigrateInput.
28516func (vmctmi VMwareCbtTestMigrateInput) AsVMwareCbtTestMigrateInput() (*VMwareCbtTestMigrateInput, bool) {
28517	return &vmctmi, true
28518}
28519
28520// AsTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for VMwareCbtTestMigrateInput.
28521func (vmctmi VMwareCbtTestMigrateInput) AsTestMigrateProviderSpecificInput() (*TestMigrateProviderSpecificInput, bool) {
28522	return nil, false
28523}
28524
28525// AsBasicTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for VMwareCbtTestMigrateInput.
28526func (vmctmi VMwareCbtTestMigrateInput) AsBasicTestMigrateProviderSpecificInput() (BasicTestMigrateProviderSpecificInput, bool) {
28527	return &vmctmi, true
28528}
28529
28530// VMwareCbtUpdateMigrationItemInput vMwareCbt specific update migration item input.
28531type VMwareCbtUpdateMigrationItemInput struct {
28532	// TargetVMName - The target VM name.
28533	TargetVMName *string `json:"targetVmName,omitempty"`
28534	// TargetVMSize - The target VM size.
28535	TargetVMSize *string `json:"targetVmSize,omitempty"`
28536	// TargetResourceGroupID - The target resource group ARM Id.
28537	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
28538	// TargetAvailabilitySetID - The target availability set ARM Id.
28539	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
28540	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
28541	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
28542	// TargetNetworkID - The target network ARM Id.
28543	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
28544	// VMNics - The list of NIC details.
28545	VMNics *[]VMwareCbtNicInput `json:"vmNics,omitempty"`
28546	// LicenseType - The license type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
28547	LicenseType LicenseType `json:"licenseType,omitempty"`
28548	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeUpdateMigrationItemProviderSpecificInput', 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt'
28549	InstanceType InstanceTypeBasicUpdateMigrationItemProviderSpecificInput `json:"instanceType,omitempty"`
28550}
28551
28552// MarshalJSON is the custom marshaler for VMwareCbtUpdateMigrationItemInput.
28553func (vmcumii VMwareCbtUpdateMigrationItemInput) MarshalJSON() ([]byte, error) {
28554	vmcumii.InstanceType = InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt
28555	objectMap := make(map[string]interface{})
28556	if vmcumii.TargetVMName != nil {
28557		objectMap["targetVmName"] = vmcumii.TargetVMName
28558	}
28559	if vmcumii.TargetVMSize != nil {
28560		objectMap["targetVmSize"] = vmcumii.TargetVMSize
28561	}
28562	if vmcumii.TargetResourceGroupID != nil {
28563		objectMap["targetResourceGroupId"] = vmcumii.TargetResourceGroupID
28564	}
28565	if vmcumii.TargetAvailabilitySetID != nil {
28566		objectMap["targetAvailabilitySetId"] = vmcumii.TargetAvailabilitySetID
28567	}
28568	if vmcumii.TargetBootDiagnosticsStorageAccountID != nil {
28569		objectMap["targetBootDiagnosticsStorageAccountId"] = vmcumii.TargetBootDiagnosticsStorageAccountID
28570	}
28571	if vmcumii.TargetNetworkID != nil {
28572		objectMap["targetNetworkId"] = vmcumii.TargetNetworkID
28573	}
28574	if vmcumii.VMNics != nil {
28575		objectMap["vmNics"] = vmcumii.VMNics
28576	}
28577	if vmcumii.LicenseType != "" {
28578		objectMap["licenseType"] = vmcumii.LicenseType
28579	}
28580	if vmcumii.InstanceType != "" {
28581		objectMap["instanceType"] = vmcumii.InstanceType
28582	}
28583	return json.Marshal(objectMap)
28584}
28585
28586// AsVMwareCbtUpdateMigrationItemInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for VMwareCbtUpdateMigrationItemInput.
28587func (vmcumii VMwareCbtUpdateMigrationItemInput) AsVMwareCbtUpdateMigrationItemInput() (*VMwareCbtUpdateMigrationItemInput, bool) {
28588	return &vmcumii, true
28589}
28590
28591// AsUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for VMwareCbtUpdateMigrationItemInput.
28592func (vmcumii VMwareCbtUpdateMigrationItemInput) AsUpdateMigrationItemProviderSpecificInput() (*UpdateMigrationItemProviderSpecificInput, bool) {
28593	return nil, false
28594}
28595
28596// AsBasicUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for VMwareCbtUpdateMigrationItemInput.
28597func (vmcumii VMwareCbtUpdateMigrationItemInput) AsBasicUpdateMigrationItemProviderSpecificInput() (BasicUpdateMigrationItemProviderSpecificInput, bool) {
28598	return &vmcumii, true
28599}
28600
28601// VMwareDetails store the fabric details specific to the VMware fabric.
28602type VMwareDetails struct {
28603	// ProcessServers - The list of Process Servers associated with the fabric.
28604	ProcessServers *[]ProcessServer `json:"processServers,omitempty"`
28605	// MasterTargetServers - The list of Master Target servers associated with the fabric.
28606	MasterTargetServers *[]MasterTargetServer `json:"masterTargetServers,omitempty"`
28607	// RunAsAccounts - The list of run as accounts created on the server.
28608	RunAsAccounts *[]RunAsAccount `json:"runAsAccounts,omitempty"`
28609	// ReplicationPairCount - The number of replication pairs configured in this CS.
28610	ReplicationPairCount *string `json:"replicationPairCount,omitempty"`
28611	// ProcessServerCount - The number of process servers.
28612	ProcessServerCount *string `json:"processServerCount,omitempty"`
28613	// AgentCount - The number of source and target servers configured to talk to this CS.
28614	AgentCount *string `json:"agentCount,omitempty"`
28615	// ProtectedServers - The number of protected servers.
28616	ProtectedServers *string `json:"protectedServers,omitempty"`
28617	// SystemLoad - The percentage of the system load.
28618	SystemLoad *string `json:"systemLoad,omitempty"`
28619	// SystemLoadStatus - The system load status.
28620	SystemLoadStatus *string `json:"systemLoadStatus,omitempty"`
28621	// CPULoad - The percentage of the CPU load.
28622	CPULoad *string `json:"cpuLoad,omitempty"`
28623	// CPULoadStatus - The CPU load status.
28624	CPULoadStatus *string `json:"cpuLoadStatus,omitempty"`
28625	// TotalMemoryInBytes - The total memory.
28626	TotalMemoryInBytes *int64 `json:"totalMemoryInBytes,omitempty"`
28627	// AvailableMemoryInBytes - The available memory.
28628	AvailableMemoryInBytes *int64 `json:"availableMemoryInBytes,omitempty"`
28629	// MemoryUsageStatus - The memory usage status.
28630	MemoryUsageStatus *string `json:"memoryUsageStatus,omitempty"`
28631	// TotalSpaceInBytes - The total space.
28632	TotalSpaceInBytes *int64 `json:"totalSpaceInBytes,omitempty"`
28633	// AvailableSpaceInBytes - The available space.
28634	AvailableSpaceInBytes *int64 `json:"availableSpaceInBytes,omitempty"`
28635	// SpaceUsageStatus - The space usage status.
28636	SpaceUsageStatus *string `json:"spaceUsageStatus,omitempty"`
28637	// WebLoad - The web load.
28638	WebLoad *string `json:"webLoad,omitempty"`
28639	// WebLoadStatus - The web load status.
28640	WebLoadStatus *string `json:"webLoadStatus,omitempty"`
28641	// DatabaseServerLoad - The database server load.
28642	DatabaseServerLoad *string `json:"databaseServerLoad,omitempty"`
28643	// DatabaseServerLoadStatus - The database server load status.
28644	DatabaseServerLoadStatus *string `json:"databaseServerLoadStatus,omitempty"`
28645	// CsServiceStatus - The CS service status.
28646	CsServiceStatus *string `json:"csServiceStatus,omitempty"`
28647	// IPAddress - The IP address.
28648	IPAddress *string `json:"ipAddress,omitempty"`
28649	// AgentVersion - The agent Version.
28650	AgentVersion *string `json:"agentVersion,omitempty"`
28651	// HostName - The host name.
28652	HostName *string `json:"hostName,omitempty"`
28653	// LastHeartbeat - The last heartbeat received from CS server.
28654	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
28655	// VersionStatus - Version status
28656	VersionStatus *string `json:"versionStatus,omitempty"`
28657	// SslCertExpiryDate - CS SSL cert expiry date.
28658	SslCertExpiryDate *date.Time `json:"sslCertExpiryDate,omitempty"`
28659	// SslCertExpiryRemainingDays - CS SSL cert expiry date.
28660	SslCertExpiryRemainingDays *int32 `json:"sslCertExpiryRemainingDays,omitempty"`
28661	// PsTemplateVersion - PS template version.
28662	PsTemplateVersion *string `json:"psTemplateVersion,omitempty"`
28663	// AgentExpiryDate - Agent expiry date.
28664	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
28665	// AgentVersionDetails - The agent version details.
28666	AgentVersionDetails *VersionDetails `json:"agentVersionDetails,omitempty"`
28667	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
28668	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
28669}
28670
28671// MarshalJSON is the custom marshaler for VMwareDetails.
28672func (vmd VMwareDetails) MarshalJSON() ([]byte, error) {
28673	vmd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware
28674	objectMap := make(map[string]interface{})
28675	if vmd.ProcessServers != nil {
28676		objectMap["processServers"] = vmd.ProcessServers
28677	}
28678	if vmd.MasterTargetServers != nil {
28679		objectMap["masterTargetServers"] = vmd.MasterTargetServers
28680	}
28681	if vmd.RunAsAccounts != nil {
28682		objectMap["runAsAccounts"] = vmd.RunAsAccounts
28683	}
28684	if vmd.ReplicationPairCount != nil {
28685		objectMap["replicationPairCount"] = vmd.ReplicationPairCount
28686	}
28687	if vmd.ProcessServerCount != nil {
28688		objectMap["processServerCount"] = vmd.ProcessServerCount
28689	}
28690	if vmd.AgentCount != nil {
28691		objectMap["agentCount"] = vmd.AgentCount
28692	}
28693	if vmd.ProtectedServers != nil {
28694		objectMap["protectedServers"] = vmd.ProtectedServers
28695	}
28696	if vmd.SystemLoad != nil {
28697		objectMap["systemLoad"] = vmd.SystemLoad
28698	}
28699	if vmd.SystemLoadStatus != nil {
28700		objectMap["systemLoadStatus"] = vmd.SystemLoadStatus
28701	}
28702	if vmd.CPULoad != nil {
28703		objectMap["cpuLoad"] = vmd.CPULoad
28704	}
28705	if vmd.CPULoadStatus != nil {
28706		objectMap["cpuLoadStatus"] = vmd.CPULoadStatus
28707	}
28708	if vmd.TotalMemoryInBytes != nil {
28709		objectMap["totalMemoryInBytes"] = vmd.TotalMemoryInBytes
28710	}
28711	if vmd.AvailableMemoryInBytes != nil {
28712		objectMap["availableMemoryInBytes"] = vmd.AvailableMemoryInBytes
28713	}
28714	if vmd.MemoryUsageStatus != nil {
28715		objectMap["memoryUsageStatus"] = vmd.MemoryUsageStatus
28716	}
28717	if vmd.TotalSpaceInBytes != nil {
28718		objectMap["totalSpaceInBytes"] = vmd.TotalSpaceInBytes
28719	}
28720	if vmd.AvailableSpaceInBytes != nil {
28721		objectMap["availableSpaceInBytes"] = vmd.AvailableSpaceInBytes
28722	}
28723	if vmd.SpaceUsageStatus != nil {
28724		objectMap["spaceUsageStatus"] = vmd.SpaceUsageStatus
28725	}
28726	if vmd.WebLoad != nil {
28727		objectMap["webLoad"] = vmd.WebLoad
28728	}
28729	if vmd.WebLoadStatus != nil {
28730		objectMap["webLoadStatus"] = vmd.WebLoadStatus
28731	}
28732	if vmd.DatabaseServerLoad != nil {
28733		objectMap["databaseServerLoad"] = vmd.DatabaseServerLoad
28734	}
28735	if vmd.DatabaseServerLoadStatus != nil {
28736		objectMap["databaseServerLoadStatus"] = vmd.DatabaseServerLoadStatus
28737	}
28738	if vmd.CsServiceStatus != nil {
28739		objectMap["csServiceStatus"] = vmd.CsServiceStatus
28740	}
28741	if vmd.IPAddress != nil {
28742		objectMap["ipAddress"] = vmd.IPAddress
28743	}
28744	if vmd.AgentVersion != nil {
28745		objectMap["agentVersion"] = vmd.AgentVersion
28746	}
28747	if vmd.HostName != nil {
28748		objectMap["hostName"] = vmd.HostName
28749	}
28750	if vmd.LastHeartbeat != nil {
28751		objectMap["lastHeartbeat"] = vmd.LastHeartbeat
28752	}
28753	if vmd.VersionStatus != nil {
28754		objectMap["versionStatus"] = vmd.VersionStatus
28755	}
28756	if vmd.SslCertExpiryDate != nil {
28757		objectMap["sslCertExpiryDate"] = vmd.SslCertExpiryDate
28758	}
28759	if vmd.SslCertExpiryRemainingDays != nil {
28760		objectMap["sslCertExpiryRemainingDays"] = vmd.SslCertExpiryRemainingDays
28761	}
28762	if vmd.PsTemplateVersion != nil {
28763		objectMap["psTemplateVersion"] = vmd.PsTemplateVersion
28764	}
28765	if vmd.AgentExpiryDate != nil {
28766		objectMap["agentExpiryDate"] = vmd.AgentExpiryDate
28767	}
28768	if vmd.AgentVersionDetails != nil {
28769		objectMap["agentVersionDetails"] = vmd.AgentVersionDetails
28770	}
28771	if vmd.InstanceType != "" {
28772		objectMap["instanceType"] = vmd.InstanceType
28773	}
28774	return json.Marshal(objectMap)
28775}
28776
28777// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28778func (vmd VMwareDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
28779	return nil, false
28780}
28781
28782// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28783func (vmd VMwareDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
28784	return nil, false
28785}
28786
28787// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28788func (vmd VMwareDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
28789	return nil, false
28790}
28791
28792// AsVmmDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28793func (vmd VMwareDetails) AsVmmDetails() (*VmmDetails, bool) {
28794	return nil, false
28795}
28796
28797// AsVMwareDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28798func (vmd VMwareDetails) AsVMwareDetails() (*VMwareDetails, bool) {
28799	return &vmd, true
28800}
28801
28802// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28803func (vmd VMwareDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
28804	return nil, false
28805}
28806
28807// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28808func (vmd VMwareDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
28809	return nil, false
28810}
28811
28812// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
28813func (vmd VMwareDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
28814	return &vmd, true
28815}
28816
28817// VMwareV2FabricCreationInput vMwareV2 fabric provider specific settings.
28818type VMwareV2FabricCreationInput struct {
28819	// VmwareSiteID - The ARM Id of the VMware site.
28820	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
28821	// MigrationSolutionID - The ARM Id of the migration solution.
28822	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
28823	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
28824	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
28825}
28826
28827// MarshalJSON is the custom marshaler for VMwareV2FabricCreationInput.
28828func (vmvfci VMwareV2FabricCreationInput) MarshalJSON() ([]byte, error) {
28829	vmvfci.InstanceType = InstanceTypeVMwareV2
28830	objectMap := make(map[string]interface{})
28831	if vmvfci.VmwareSiteID != nil {
28832		objectMap["vmwareSiteId"] = vmvfci.VmwareSiteID
28833	}
28834	if vmvfci.MigrationSolutionID != nil {
28835		objectMap["migrationSolutionId"] = vmvfci.MigrationSolutionID
28836	}
28837	if vmvfci.InstanceType != "" {
28838		objectMap["instanceType"] = vmvfci.InstanceType
28839	}
28840	return json.Marshal(objectMap)
28841}
28842
28843// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
28844func (vmvfci VMwareV2FabricCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
28845	return nil, false
28846}
28847
28848// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
28849func (vmvfci VMwareV2FabricCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
28850	return nil, false
28851}
28852
28853// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
28854func (vmvfci VMwareV2FabricCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
28855	return &vmvfci, true
28856}
28857
28858// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
28859func (vmvfci VMwareV2FabricCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
28860	return nil, false
28861}
28862
28863// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
28864func (vmvfci VMwareV2FabricCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
28865	return &vmvfci, true
28866}
28867
28868// VMwareV2FabricSpecificDetails vMwareV2 fabric specific details.
28869type VMwareV2FabricSpecificDetails struct {
28870	// VmwareSiteID - READ-ONLY; The ARM Id of the VMware site.
28871	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
28872	// MigrationSolutionID - READ-ONLY; The Migration solution ARM Id.
28873	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
28874	// ServiceEndpoint - READ-ONLY; The service endpoint.
28875	ServiceEndpoint *string `json:"serviceEndpoint,omitempty"`
28876	// ServiceResourceID - READ-ONLY; The service resource Id.
28877	ServiceResourceID *string `json:"serviceResourceId,omitempty"`
28878	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
28879	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
28880}
28881
28882// MarshalJSON is the custom marshaler for VMwareV2FabricSpecificDetails.
28883func (vmvfsd VMwareV2FabricSpecificDetails) MarshalJSON() ([]byte, error) {
28884	vmvfsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2
28885	objectMap := make(map[string]interface{})
28886	if vmvfsd.InstanceType != "" {
28887		objectMap["instanceType"] = vmvfsd.InstanceType
28888	}
28889	return json.Marshal(objectMap)
28890}
28891
28892// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28893func (vmvfsd VMwareV2FabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
28894	return nil, false
28895}
28896
28897// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28898func (vmvfsd VMwareV2FabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
28899	return nil, false
28900}
28901
28902// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28903func (vmvfsd VMwareV2FabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
28904	return nil, false
28905}
28906
28907// AsVmmDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28908func (vmvfsd VMwareV2FabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
28909	return nil, false
28910}
28911
28912// AsVMwareDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28913func (vmvfsd VMwareV2FabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
28914	return nil, false
28915}
28916
28917// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28918func (vmvfsd VMwareV2FabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
28919	return &vmvfsd, true
28920}
28921
28922// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28923func (vmvfsd VMwareV2FabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
28924	return nil, false
28925}
28926
28927// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
28928func (vmvfsd VMwareV2FabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
28929	return &vmvfsd, true
28930}
28931
28932// VMwareVirtualMachineDetails vMware provider specific settings
28933type VMwareVirtualMachineDetails struct {
28934	// AgentGeneratedID - The ID generated by the InMage agent after it gets installed on guest. This is the ID to be used during InMage CreateProtection.
28935	AgentGeneratedID *string `json:"agentGeneratedId,omitempty"`
28936	// AgentInstalled - The value indicating if InMage scout agent is installed on guest.
28937	AgentInstalled *string `json:"agentInstalled,omitempty"`
28938	// OsType - The OsType installed on VM.
28939	OsType *string `json:"osType,omitempty"`
28940	// AgentVersion - The agent version.
28941	AgentVersion *string `json:"agentVersion,omitempty"`
28942	// IPAddress - The IP address.
28943	IPAddress *string `json:"ipAddress,omitempty"`
28944	// PoweredOn - The value indicating whether VM is powered on.
28945	PoweredOn *string `json:"poweredOn,omitempty"`
28946	// VCenterInfrastructureID - The VCenter infrastructure Id.
28947	VCenterInfrastructureID *string `json:"vCenterInfrastructureId,omitempty"`
28948	// DiscoveryType - A value indicating the discovery type of the machine. Value can be vCenter or physical.
28949	DiscoveryType *string `json:"discoveryType,omitempty"`
28950	// DiskDetails - The disk details.
28951	DiskDetails *[]InMageDiskDetails `json:"diskDetails,omitempty"`
28952	// ValidationErrors - The validation errors.
28953	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
28954	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
28955	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
28956}
28957
28958// MarshalJSON is the custom marshaler for VMwareVirtualMachineDetails.
28959func (vmvmd VMwareVirtualMachineDetails) MarshalJSON() ([]byte, error) {
28960	vmvmd.InstanceType = InstanceTypeVMwareVirtualMachine
28961	objectMap := make(map[string]interface{})
28962	if vmvmd.AgentGeneratedID != nil {
28963		objectMap["agentGeneratedId"] = vmvmd.AgentGeneratedID
28964	}
28965	if vmvmd.AgentInstalled != nil {
28966		objectMap["agentInstalled"] = vmvmd.AgentInstalled
28967	}
28968	if vmvmd.OsType != nil {
28969		objectMap["osType"] = vmvmd.OsType
28970	}
28971	if vmvmd.AgentVersion != nil {
28972		objectMap["agentVersion"] = vmvmd.AgentVersion
28973	}
28974	if vmvmd.IPAddress != nil {
28975		objectMap["ipAddress"] = vmvmd.IPAddress
28976	}
28977	if vmvmd.PoweredOn != nil {
28978		objectMap["poweredOn"] = vmvmd.PoweredOn
28979	}
28980	if vmvmd.VCenterInfrastructureID != nil {
28981		objectMap["vCenterInfrastructureId"] = vmvmd.VCenterInfrastructureID
28982	}
28983	if vmvmd.DiscoveryType != nil {
28984		objectMap["discoveryType"] = vmvmd.DiscoveryType
28985	}
28986	if vmvmd.DiskDetails != nil {
28987		objectMap["diskDetails"] = vmvmd.DiskDetails
28988	}
28989	if vmvmd.ValidationErrors != nil {
28990		objectMap["validationErrors"] = vmvmd.ValidationErrors
28991	}
28992	if vmvmd.InstanceType != "" {
28993		objectMap["instanceType"] = vmvmd.InstanceType
28994	}
28995	return json.Marshal(objectMap)
28996}
28997
28998// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
28999func (vmvmd VMwareVirtualMachineDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
29000	return nil, false
29001}
29002
29003// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
29004func (vmvmd VMwareVirtualMachineDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
29005	return nil, false
29006}
29007
29008// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
29009func (vmvmd VMwareVirtualMachineDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
29010	return nil, false
29011}
29012
29013// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
29014func (vmvmd VMwareVirtualMachineDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
29015	return &vmvmd, true
29016}
29017
29018// AsConfigurationSettings is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
29019func (vmvmd VMwareVirtualMachineDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
29020	return nil, false
29021}
29022
29023// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
29024func (vmvmd VMwareVirtualMachineDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
29025	return &vmvmd, true
29026}
29027