1package siterecovery
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"encoding/json"
23	"github.com/Azure/go-autorest/autorest"
24	"github.com/Azure/go-autorest/autorest/azure"
25	"github.com/Azure/go-autorest/autorest/date"
26	"github.com/Azure/go-autorest/autorest/to"
27	"github.com/Azure/go-autorest/tracing"
28	"net/http"
29)
30
31// The package's fully qualified name.
32const fqdn = "github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2018-07-10/siterecovery"
33
34// A2AAddDisksInput a2A add disk(s) input.
35type A2AAddDisksInput struct {
36	// VMDisks - The list of vm disk details.
37	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
38	// VMManagedDisks - The list of vm managed disk details.
39	VMManagedDisks *[]A2AVMManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
40	// InstanceType - Possible values include: 'InstanceTypeAddDisksProviderSpecificInput', 'InstanceTypeA2A'
41	InstanceType InstanceType `json:"instanceType,omitempty"`
42}
43
44// MarshalJSON is the custom marshaler for A2AAddDisksInput.
45func (aadi A2AAddDisksInput) MarshalJSON() ([]byte, error) {
46	aadi.InstanceType = InstanceTypeA2A
47	objectMap := make(map[string]interface{})
48	if aadi.VMDisks != nil {
49		objectMap["vmDisks"] = aadi.VMDisks
50	}
51	if aadi.VMManagedDisks != nil {
52		objectMap["vmManagedDisks"] = aadi.VMManagedDisks
53	}
54	if aadi.InstanceType != "" {
55		objectMap["instanceType"] = aadi.InstanceType
56	}
57	return json.Marshal(objectMap)
58}
59
60// AsA2AAddDisksInput is the BasicAddDisksProviderSpecificInput implementation for A2AAddDisksInput.
61func (aadi A2AAddDisksInput) AsA2AAddDisksInput() (*A2AAddDisksInput, bool) {
62	return &aadi, true
63}
64
65// AsAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for A2AAddDisksInput.
66func (aadi A2AAddDisksInput) AsAddDisksProviderSpecificInput() (*AddDisksProviderSpecificInput, bool) {
67	return nil, false
68}
69
70// AsBasicAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for A2AAddDisksInput.
71func (aadi A2AAddDisksInput) AsBasicAddDisksProviderSpecificInput() (BasicAddDisksProviderSpecificInput, bool) {
72	return &aadi, true
73}
74
75// A2AApplyRecoveryPointInput applyRecoveryPoint input specific to A2A provider.
76type A2AApplyRecoveryPointInput struct {
77	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
78	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
79}
80
81// MarshalJSON is the custom marshaler for A2AApplyRecoveryPointInput.
82func (aarpi A2AApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
83	aarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A
84	objectMap := make(map[string]interface{})
85	if aarpi.InstanceType != "" {
86		objectMap["instanceType"] = aarpi.InstanceType
87	}
88	return json.Marshal(objectMap)
89}
90
91// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
92func (aarpi A2AApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
93	return &aarpi, true
94}
95
96// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
97func (aarpi A2AApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
98	return nil, false
99}
100
101// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
102func (aarpi A2AApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
103	return nil, false
104}
105
106// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
107func (aarpi A2AApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
108	return nil, false
109}
110
111// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
112func (aarpi A2AApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
113	return nil, false
114}
115
116// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for A2AApplyRecoveryPointInput.
117func (aarpi A2AApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
118	return &aarpi, true
119}
120
121// A2AContainerCreationInput a2A cloud creation input.
122type A2AContainerCreationInput struct {
123	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero'
124	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerCreationInput `json:"instanceType,omitempty"`
125}
126
127// MarshalJSON is the custom marshaler for A2AContainerCreationInput.
128func (acci A2AContainerCreationInput) MarshalJSON() ([]byte, error) {
129	acci.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A
130	objectMap := make(map[string]interface{})
131	if acci.InstanceType != "" {
132		objectMap["instanceType"] = acci.InstanceType
133	}
134	return json.Marshal(objectMap)
135}
136
137// AsA2AContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
138func (acci A2AContainerCreationInput) AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool) {
139	return &acci, true
140}
141
142// AsVMwareCbtContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
143func (acci A2AContainerCreationInput) AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool) {
144	return nil, false
145}
146
147// AsReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
148func (acci A2AContainerCreationInput) AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool) {
149	return nil, false
150}
151
152// AsBasicReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for A2AContainerCreationInput.
153func (acci A2AContainerCreationInput) AsBasicReplicationProviderSpecificContainerCreationInput() (BasicReplicationProviderSpecificContainerCreationInput, bool) {
154	return &acci, true
155}
156
157// A2AContainerMappingInput a2A container mapping input.
158type A2AContainerMappingInput struct {
159	// AgentAutoUpdateStatus - A value indicating whether the auto update is enabled. Possible values include: 'Disabled', 'Enabled'
160	AgentAutoUpdateStatus AgentAutoUpdateStatus `json:"agentAutoUpdateStatus,omitempty"`
161	// AutomationAccountArmID - The automation account arm id.
162	AutomationAccountArmID *string `json:"automationAccountArmId,omitempty"`
163	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt'
164	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerMappingInput `json:"instanceType,omitempty"`
165}
166
167// MarshalJSON is the custom marshaler for A2AContainerMappingInput.
168func (acmi A2AContainerMappingInput) MarshalJSON() ([]byte, error) {
169	acmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A
170	objectMap := make(map[string]interface{})
171	if acmi.AgentAutoUpdateStatus != "" {
172		objectMap["agentAutoUpdateStatus"] = acmi.AgentAutoUpdateStatus
173	}
174	if acmi.AutomationAccountArmID != nil {
175		objectMap["automationAccountArmId"] = acmi.AutomationAccountArmID
176	}
177	if acmi.InstanceType != "" {
178		objectMap["instanceType"] = acmi.InstanceType
179	}
180	return json.Marshal(objectMap)
181}
182
183// AsA2AContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
184func (acmi A2AContainerMappingInput) AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool) {
185	return &acmi, true
186}
187
188// AsVMwareCbtContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
189func (acmi A2AContainerMappingInput) AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool) {
190	return nil, false
191}
192
193// AsReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
194func (acmi A2AContainerMappingInput) AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool) {
195	return nil, false
196}
197
198// AsBasicReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for A2AContainerMappingInput.
199func (acmi A2AContainerMappingInput) AsBasicReplicationProviderSpecificContainerMappingInput() (BasicReplicationProviderSpecificContainerMappingInput, bool) {
200	return &acmi, true
201}
202
203// A2ACreateProtectionIntentInput a2A create protection intent input.
204type A2ACreateProtectionIntentInput struct {
205	// FabricObjectID - The fabric specific object Id of the virtual machine.
206	FabricObjectID *string `json:"fabricObjectId,omitempty"`
207	// PrimaryLocation - The primary location for the virtual machine.
208	PrimaryLocation *string `json:"primaryLocation,omitempty"`
209	// RecoveryLocation - The recovery location for the virtual machine.
210	RecoveryLocation *string `json:"recoveryLocation,omitempty"`
211	// RecoverySubscriptionID - The recovery subscription Id of the virtual machine.
212	RecoverySubscriptionID *string `json:"recoverySubscriptionId,omitempty"`
213	// RecoveryAvailabilityType - The recovery availability type of the virtual machine. Possible values include: 'Single', 'AvailabilitySet', 'AvailabilityZone'
214	RecoveryAvailabilityType A2ARecoveryAvailabilityType `json:"recoveryAvailabilityType,omitempty"`
215	// ProtectionProfileCustomInput - The protection profile custom inputs.
216	ProtectionProfileCustomInput BasicProtectionProfileCustomDetails `json:"protectionProfileCustomInput,omitempty"`
217	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
218	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
219	// PrimaryStagingStorageAccountCustomInput - The primary staging storage account input.
220	PrimaryStagingStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"primaryStagingStorageAccountCustomInput,omitempty"`
221	// RecoveryAvailabilitySetCustomInput - The recovery availability set input.
222	RecoveryAvailabilitySetCustomInput BasicRecoveryAvailabilitySetCustomDetails `json:"recoveryAvailabilitySetCustomInput,omitempty"`
223	// RecoveryVirtualNetworkCustomInput - The recovery virtual network input.
224	RecoveryVirtualNetworkCustomInput BasicRecoveryVirtualNetworkCustomDetails `json:"recoveryVirtualNetworkCustomInput,omitempty"`
225	// RecoveryProximityPlacementGroupCustomInput - The recovery proximity placement group custom input.
226	RecoveryProximityPlacementGroupCustomInput BasicRecoveryProximityPlacementGroupCustomDetails `json:"recoveryProximityPlacementGroupCustomInput,omitempty"`
227	// AutoProtectionOfDataDisk - A value indicating whether the auto protection is enabled. Possible values include: 'AutoProtectionOfDataDiskDisabled', 'AutoProtectionOfDataDiskEnabled'
228	AutoProtectionOfDataDisk AutoProtectionOfDataDisk `json:"autoProtectionOfDataDisk,omitempty"`
229	// VMDisks - The list of vm disk inputs.
230	VMDisks *[]A2AProtectionIntentDiskInputDetails `json:"vmDisks,omitempty"`
231	// VMManagedDisks - The list of vm managed disk inputs.
232	VMManagedDisks *[]A2AProtectionIntentManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
233	// MultiVMGroupName - The multi vm group name.
234	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
235	// MultiVMGroupID - The multi vm group id.
236	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
237	// RecoveryBootDiagStorageAccount - The boot diagnostic storage account.
238	RecoveryBootDiagStorageAccount BasicStorageAccountCustomDetails `json:"recoveryBootDiagStorageAccount,omitempty"`
239	// DiskEncryptionInfo - The recovery disk encryption information (for two pass flows).
240	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
241	// RecoveryAvailabilityZone - The recovery availability zone.
242	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
243	// InstanceType - Possible values include: 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeCreateProtectionIntentProviderSpecificDetails', 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A'
244	InstanceType InstanceTypeBasicCreateProtectionIntentProviderSpecificDetails `json:"instanceType,omitempty"`
245}
246
247// MarshalJSON is the custom marshaler for A2ACreateProtectionIntentInput.
248func (acpii A2ACreateProtectionIntentInput) MarshalJSON() ([]byte, error) {
249	acpii.InstanceType = InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A
250	objectMap := make(map[string]interface{})
251	if acpii.FabricObjectID != nil {
252		objectMap["fabricObjectId"] = acpii.FabricObjectID
253	}
254	if acpii.PrimaryLocation != nil {
255		objectMap["primaryLocation"] = acpii.PrimaryLocation
256	}
257	if acpii.RecoveryLocation != nil {
258		objectMap["recoveryLocation"] = acpii.RecoveryLocation
259	}
260	if acpii.RecoverySubscriptionID != nil {
261		objectMap["recoverySubscriptionId"] = acpii.RecoverySubscriptionID
262	}
263	if acpii.RecoveryAvailabilityType != "" {
264		objectMap["recoveryAvailabilityType"] = acpii.RecoveryAvailabilityType
265	}
266	objectMap["protectionProfileCustomInput"] = acpii.ProtectionProfileCustomInput
267	if acpii.RecoveryResourceGroupID != nil {
268		objectMap["recoveryResourceGroupId"] = acpii.RecoveryResourceGroupID
269	}
270	objectMap["primaryStagingStorageAccountCustomInput"] = acpii.PrimaryStagingStorageAccountCustomInput
271	objectMap["recoveryAvailabilitySetCustomInput"] = acpii.RecoveryAvailabilitySetCustomInput
272	objectMap["recoveryVirtualNetworkCustomInput"] = acpii.RecoveryVirtualNetworkCustomInput
273	objectMap["recoveryProximityPlacementGroupCustomInput"] = acpii.RecoveryProximityPlacementGroupCustomInput
274	if acpii.AutoProtectionOfDataDisk != "" {
275		objectMap["autoProtectionOfDataDisk"] = acpii.AutoProtectionOfDataDisk
276	}
277	if acpii.VMDisks != nil {
278		objectMap["vmDisks"] = acpii.VMDisks
279	}
280	if acpii.VMManagedDisks != nil {
281		objectMap["vmManagedDisks"] = acpii.VMManagedDisks
282	}
283	if acpii.MultiVMGroupName != nil {
284		objectMap["multiVmGroupName"] = acpii.MultiVMGroupName
285	}
286	if acpii.MultiVMGroupID != nil {
287		objectMap["multiVmGroupId"] = acpii.MultiVMGroupID
288	}
289	objectMap["recoveryBootDiagStorageAccount"] = acpii.RecoveryBootDiagStorageAccount
290	if acpii.DiskEncryptionInfo != nil {
291		objectMap["diskEncryptionInfo"] = acpii.DiskEncryptionInfo
292	}
293	if acpii.RecoveryAvailabilityZone != nil {
294		objectMap["recoveryAvailabilityZone"] = acpii.RecoveryAvailabilityZone
295	}
296	if acpii.InstanceType != "" {
297		objectMap["instanceType"] = acpii.InstanceType
298	}
299	return json.Marshal(objectMap)
300}
301
302// AsA2ACreateProtectionIntentInput is the BasicCreateProtectionIntentProviderSpecificDetails implementation for A2ACreateProtectionIntentInput.
303func (acpii A2ACreateProtectionIntentInput) AsA2ACreateProtectionIntentInput() (*A2ACreateProtectionIntentInput, bool) {
304	return &acpii, true
305}
306
307// AsCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for A2ACreateProtectionIntentInput.
308func (acpii A2ACreateProtectionIntentInput) AsCreateProtectionIntentProviderSpecificDetails() (*CreateProtectionIntentProviderSpecificDetails, bool) {
309	return nil, false
310}
311
312// AsBasicCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for A2ACreateProtectionIntentInput.
313func (acpii A2ACreateProtectionIntentInput) AsBasicCreateProtectionIntentProviderSpecificDetails() (BasicCreateProtectionIntentProviderSpecificDetails, bool) {
314	return &acpii, true
315}
316
317// UnmarshalJSON is the custom unmarshaler for A2ACreateProtectionIntentInput struct.
318func (acpii *A2ACreateProtectionIntentInput) UnmarshalJSON(body []byte) error {
319	var m map[string]*json.RawMessage
320	err := json.Unmarshal(body, &m)
321	if err != nil {
322		return err
323	}
324	for k, v := range m {
325		switch k {
326		case "fabricObjectId":
327			if v != nil {
328				var fabricObjectID string
329				err = json.Unmarshal(*v, &fabricObjectID)
330				if err != nil {
331					return err
332				}
333				acpii.FabricObjectID = &fabricObjectID
334			}
335		case "primaryLocation":
336			if v != nil {
337				var primaryLocation string
338				err = json.Unmarshal(*v, &primaryLocation)
339				if err != nil {
340					return err
341				}
342				acpii.PrimaryLocation = &primaryLocation
343			}
344		case "recoveryLocation":
345			if v != nil {
346				var recoveryLocation string
347				err = json.Unmarshal(*v, &recoveryLocation)
348				if err != nil {
349					return err
350				}
351				acpii.RecoveryLocation = &recoveryLocation
352			}
353		case "recoverySubscriptionId":
354			if v != nil {
355				var recoverySubscriptionID string
356				err = json.Unmarshal(*v, &recoverySubscriptionID)
357				if err != nil {
358					return err
359				}
360				acpii.RecoverySubscriptionID = &recoverySubscriptionID
361			}
362		case "recoveryAvailabilityType":
363			if v != nil {
364				var recoveryAvailabilityType A2ARecoveryAvailabilityType
365				err = json.Unmarshal(*v, &recoveryAvailabilityType)
366				if err != nil {
367					return err
368				}
369				acpii.RecoveryAvailabilityType = recoveryAvailabilityType
370			}
371		case "protectionProfileCustomInput":
372			if v != nil {
373				protectionProfileCustomInput, err := unmarshalBasicProtectionProfileCustomDetails(*v)
374				if err != nil {
375					return err
376				}
377				acpii.ProtectionProfileCustomInput = protectionProfileCustomInput
378			}
379		case "recoveryResourceGroupId":
380			if v != nil {
381				var recoveryResourceGroupID string
382				err = json.Unmarshal(*v, &recoveryResourceGroupID)
383				if err != nil {
384					return err
385				}
386				acpii.RecoveryResourceGroupID = &recoveryResourceGroupID
387			}
388		case "primaryStagingStorageAccountCustomInput":
389			if v != nil {
390				primaryStagingStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
391				if err != nil {
392					return err
393				}
394				acpii.PrimaryStagingStorageAccountCustomInput = primaryStagingStorageAccountCustomInput
395			}
396		case "recoveryAvailabilitySetCustomInput":
397			if v != nil {
398				recoveryAvailabilitySetCustomInput, err := unmarshalBasicRecoveryAvailabilitySetCustomDetails(*v)
399				if err != nil {
400					return err
401				}
402				acpii.RecoveryAvailabilitySetCustomInput = recoveryAvailabilitySetCustomInput
403			}
404		case "recoveryVirtualNetworkCustomInput":
405			if v != nil {
406				recoveryVirtualNetworkCustomInput, err := unmarshalBasicRecoveryVirtualNetworkCustomDetails(*v)
407				if err != nil {
408					return err
409				}
410				acpii.RecoveryVirtualNetworkCustomInput = recoveryVirtualNetworkCustomInput
411			}
412		case "recoveryProximityPlacementGroupCustomInput":
413			if v != nil {
414				recoveryProximityPlacementGroupCustomInput, err := unmarshalBasicRecoveryProximityPlacementGroupCustomDetails(*v)
415				if err != nil {
416					return err
417				}
418				acpii.RecoveryProximityPlacementGroupCustomInput = recoveryProximityPlacementGroupCustomInput
419			}
420		case "autoProtectionOfDataDisk":
421			if v != nil {
422				var autoProtectionOfDataDisk AutoProtectionOfDataDisk
423				err = json.Unmarshal(*v, &autoProtectionOfDataDisk)
424				if err != nil {
425					return err
426				}
427				acpii.AutoProtectionOfDataDisk = autoProtectionOfDataDisk
428			}
429		case "vmDisks":
430			if v != nil {
431				var VMDisks []A2AProtectionIntentDiskInputDetails
432				err = json.Unmarshal(*v, &VMDisks)
433				if err != nil {
434					return err
435				}
436				acpii.VMDisks = &VMDisks
437			}
438		case "vmManagedDisks":
439			if v != nil {
440				var VMManagedDisks []A2AProtectionIntentManagedDiskInputDetails
441				err = json.Unmarshal(*v, &VMManagedDisks)
442				if err != nil {
443					return err
444				}
445				acpii.VMManagedDisks = &VMManagedDisks
446			}
447		case "multiVmGroupName":
448			if v != nil {
449				var multiVMGroupName string
450				err = json.Unmarshal(*v, &multiVMGroupName)
451				if err != nil {
452					return err
453				}
454				acpii.MultiVMGroupName = &multiVMGroupName
455			}
456		case "multiVmGroupId":
457			if v != nil {
458				var multiVMGroupID string
459				err = json.Unmarshal(*v, &multiVMGroupID)
460				if err != nil {
461					return err
462				}
463				acpii.MultiVMGroupID = &multiVMGroupID
464			}
465		case "recoveryBootDiagStorageAccount":
466			if v != nil {
467				recoveryBootDiagStorageAccount, err := unmarshalBasicStorageAccountCustomDetails(*v)
468				if err != nil {
469					return err
470				}
471				acpii.RecoveryBootDiagStorageAccount = recoveryBootDiagStorageAccount
472			}
473		case "diskEncryptionInfo":
474			if v != nil {
475				var diskEncryptionInfo DiskEncryptionInfo
476				err = json.Unmarshal(*v, &diskEncryptionInfo)
477				if err != nil {
478					return err
479				}
480				acpii.DiskEncryptionInfo = &diskEncryptionInfo
481			}
482		case "recoveryAvailabilityZone":
483			if v != nil {
484				var recoveryAvailabilityZone string
485				err = json.Unmarshal(*v, &recoveryAvailabilityZone)
486				if err != nil {
487					return err
488				}
489				acpii.RecoveryAvailabilityZone = &recoveryAvailabilityZone
490			}
491		case "instanceType":
492			if v != nil {
493				var instanceType InstanceTypeBasicCreateProtectionIntentProviderSpecificDetails
494				err = json.Unmarshal(*v, &instanceType)
495				if err != nil {
496					return err
497				}
498				acpii.InstanceType = instanceType
499			}
500		}
501	}
502
503	return nil
504}
505
506// A2AEnableProtectionInput a2A enable protection input.
507type A2AEnableProtectionInput struct {
508	// FabricObjectID - The fabric specific object Id of the virtual machine.
509	FabricObjectID *string `json:"fabricObjectId,omitempty"`
510	// RecoveryContainerID - The recovery container Id.
511	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
512	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
513	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
514	// RecoveryCloudServiceID - The recovery cloud service Id. Valid for V1 scenarios.
515	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
516	// RecoveryAvailabilitySetID - The recovery availability set Id.
517	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
518	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
519	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
520	// VMDisks - The list of vm disk details.
521	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
522	// VMManagedDisks - The list of vm managed disk details.
523	VMManagedDisks *[]A2AVMManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
524	// MultiVMGroupName - The multi vm group name.
525	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
526	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
527	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
528	// DiskEncryptionInfo - The recovery disk encryption information.
529	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
530	// RecoveryAvailabilityZone - The recovery availability zone.
531	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
532	// RecoveryAzureNetworkID - The recovery Azure virtual network ARM id.
533	RecoveryAzureNetworkID *string `json:"recoveryAzureNetworkId,omitempty"`
534	// RecoverySubnetName - The recovery subnet name.
535	RecoverySubnetName *string `json:"recoverySubnetName,omitempty"`
536	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
537	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
538}
539
540// MarshalJSON is the custom marshaler for A2AEnableProtectionInput.
541func (aepi A2AEnableProtectionInput) MarshalJSON() ([]byte, error) {
542	aepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A
543	objectMap := make(map[string]interface{})
544	if aepi.FabricObjectID != nil {
545		objectMap["fabricObjectId"] = aepi.FabricObjectID
546	}
547	if aepi.RecoveryContainerID != nil {
548		objectMap["recoveryContainerId"] = aepi.RecoveryContainerID
549	}
550	if aepi.RecoveryResourceGroupID != nil {
551		objectMap["recoveryResourceGroupId"] = aepi.RecoveryResourceGroupID
552	}
553	if aepi.RecoveryCloudServiceID != nil {
554		objectMap["recoveryCloudServiceId"] = aepi.RecoveryCloudServiceID
555	}
556	if aepi.RecoveryAvailabilitySetID != nil {
557		objectMap["recoveryAvailabilitySetId"] = aepi.RecoveryAvailabilitySetID
558	}
559	if aepi.RecoveryProximityPlacementGroupID != nil {
560		objectMap["recoveryProximityPlacementGroupId"] = aepi.RecoveryProximityPlacementGroupID
561	}
562	if aepi.VMDisks != nil {
563		objectMap["vmDisks"] = aepi.VMDisks
564	}
565	if aepi.VMManagedDisks != nil {
566		objectMap["vmManagedDisks"] = aepi.VMManagedDisks
567	}
568	if aepi.MultiVMGroupName != nil {
569		objectMap["multiVmGroupName"] = aepi.MultiVMGroupName
570	}
571	if aepi.RecoveryBootDiagStorageAccountID != nil {
572		objectMap["recoveryBootDiagStorageAccountId"] = aepi.RecoveryBootDiagStorageAccountID
573	}
574	if aepi.DiskEncryptionInfo != nil {
575		objectMap["diskEncryptionInfo"] = aepi.DiskEncryptionInfo
576	}
577	if aepi.RecoveryAvailabilityZone != nil {
578		objectMap["recoveryAvailabilityZone"] = aepi.RecoveryAvailabilityZone
579	}
580	if aepi.RecoveryAzureNetworkID != nil {
581		objectMap["recoveryAzureNetworkId"] = aepi.RecoveryAzureNetworkID
582	}
583	if aepi.RecoverySubnetName != nil {
584		objectMap["recoverySubnetName"] = aepi.RecoverySubnetName
585	}
586	if aepi.InstanceType != "" {
587		objectMap["instanceType"] = aepi.InstanceType
588	}
589	return json.Marshal(objectMap)
590}
591
592// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
593func (aepi A2AEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
594	return &aepi, true
595}
596
597// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
598func (aepi A2AEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
599	return nil, false
600}
601
602// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
603func (aepi A2AEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
604	return nil, false
605}
606
607// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
608func (aepi A2AEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
609	return nil, false
610}
611
612// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
613func (aepi A2AEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
614	return nil, false
615}
616
617// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
618func (aepi A2AEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
619	return nil, false
620}
621
622// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
623func (aepi A2AEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
624	return nil, false
625}
626
627// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for A2AEnableProtectionInput.
628func (aepi A2AEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
629	return &aepi, true
630}
631
632// A2AEventDetails model class for event details of a A2A event.
633type A2AEventDetails struct {
634	// ProtectedItemName - The protected item arm name.
635	ProtectedItemName *string `json:"protectedItemName,omitempty"`
636	// FabricObjectID - The azure vm arm id.
637	FabricObjectID *string `json:"fabricObjectId,omitempty"`
638	// FabricName - Fabric arm name.
639	FabricName *string `json:"fabricName,omitempty"`
640	// FabricLocation - The fabric location.
641	FabricLocation *string `json:"fabricLocation,omitempty"`
642	// RemoteFabricName - Remote fabric arm name.
643	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
644	// RemoteFabricLocation - Remote fabric location.
645	RemoteFabricLocation *string `json:"remoteFabricLocation,omitempty"`
646	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
647	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
648}
649
650// MarshalJSON is the custom marshaler for A2AEventDetails.
651func (aed A2AEventDetails) MarshalJSON() ([]byte, error) {
652	aed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A
653	objectMap := make(map[string]interface{})
654	if aed.ProtectedItemName != nil {
655		objectMap["protectedItemName"] = aed.ProtectedItemName
656	}
657	if aed.FabricObjectID != nil {
658		objectMap["fabricObjectId"] = aed.FabricObjectID
659	}
660	if aed.FabricName != nil {
661		objectMap["fabricName"] = aed.FabricName
662	}
663	if aed.FabricLocation != nil {
664		objectMap["fabricLocation"] = aed.FabricLocation
665	}
666	if aed.RemoteFabricName != nil {
667		objectMap["remoteFabricName"] = aed.RemoteFabricName
668	}
669	if aed.RemoteFabricLocation != nil {
670		objectMap["remoteFabricLocation"] = aed.RemoteFabricLocation
671	}
672	if aed.InstanceType != "" {
673		objectMap["instanceType"] = aed.InstanceType
674	}
675	return json.Marshal(objectMap)
676}
677
678// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
679func (aed A2AEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
680	return &aed, true
681}
682
683// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
684func (aed A2AEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
685	return nil, false
686}
687
688// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
689func (aed A2AEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
690	return nil, false
691}
692
693// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
694func (aed A2AEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
695	return nil, false
696}
697
698// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
699func (aed A2AEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
700	return nil, false
701}
702
703// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
704func (aed A2AEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
705	return nil, false
706}
707
708// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
709func (aed A2AEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
710	return nil, false
711}
712
713// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
714func (aed A2AEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
715	return nil, false
716}
717
718// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for A2AEventDetails.
719func (aed A2AEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
720	return &aed, true
721}
722
723// A2AFailoverProviderInput a2A provider specific input for failover.
724type A2AFailoverProviderInput struct {
725	// 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.
726	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
727	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for TFO or not.
728	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
729	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
730	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
731}
732
733// MarshalJSON is the custom marshaler for A2AFailoverProviderInput.
734func (afpi A2AFailoverProviderInput) MarshalJSON() ([]byte, error) {
735	afpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A
736	objectMap := make(map[string]interface{})
737	if afpi.RecoveryPointID != nil {
738		objectMap["recoveryPointId"] = afpi.RecoveryPointID
739	}
740	if afpi.CloudServiceCreationOption != nil {
741		objectMap["cloudServiceCreationOption"] = afpi.CloudServiceCreationOption
742	}
743	if afpi.InstanceType != "" {
744		objectMap["instanceType"] = afpi.InstanceType
745	}
746	return json.Marshal(objectMap)
747}
748
749// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
750func (afpi A2AFailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
751	return &afpi, true
752}
753
754// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
755func (afpi A2AFailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
756	return nil, false
757}
758
759// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
760func (afpi A2AFailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
761	return nil, false
762}
763
764// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
765func (afpi A2AFailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
766	return nil, false
767}
768
769// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
770func (afpi A2AFailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
771	return nil, false
772}
773
774// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
775func (afpi A2AFailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
776	return nil, false
777}
778
779// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for A2AFailoverProviderInput.
780func (afpi A2AFailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
781	return &afpi, true
782}
783
784// A2APolicyCreationInput a2A Policy creation input.
785type A2APolicyCreationInput struct {
786	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
787	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
788	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
789	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
790	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
791	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
792	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
793	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
794	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
795	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
796}
797
798// MarshalJSON is the custom marshaler for A2APolicyCreationInput.
799func (apci A2APolicyCreationInput) MarshalJSON() ([]byte, error) {
800	apci.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A
801	objectMap := make(map[string]interface{})
802	if apci.RecoveryPointHistory != nil {
803		objectMap["recoveryPointHistory"] = apci.RecoveryPointHistory
804	}
805	if apci.CrashConsistentFrequencyInMinutes != nil {
806		objectMap["crashConsistentFrequencyInMinutes"] = apci.CrashConsistentFrequencyInMinutes
807	}
808	if apci.AppConsistentFrequencyInMinutes != nil {
809		objectMap["appConsistentFrequencyInMinutes"] = apci.AppConsistentFrequencyInMinutes
810	}
811	if apci.MultiVMSyncStatus != "" {
812		objectMap["multiVmSyncStatus"] = apci.MultiVMSyncStatus
813	}
814	if apci.InstanceType != "" {
815		objectMap["instanceType"] = apci.InstanceType
816	}
817	return json.Marshal(objectMap)
818}
819
820// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
821func (apci A2APolicyCreationInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
822	return &apci, true
823}
824
825// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
826func (apci A2APolicyCreationInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
827	return nil, false
828}
829
830// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
831func (apci A2APolicyCreationInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
832	return nil, false
833}
834
835// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
836func (apci A2APolicyCreationInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
837	return nil, false
838}
839
840// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
841func (apci A2APolicyCreationInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
842	return nil, false
843}
844
845// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
846func (apci A2APolicyCreationInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
847	return nil, false
848}
849
850// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
851func (apci A2APolicyCreationInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
852	return nil, false
853}
854
855// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
856func (apci A2APolicyCreationInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
857	return nil, false
858}
859
860// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
861func (apci A2APolicyCreationInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
862	return nil, false
863}
864
865// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for A2APolicyCreationInput.
866func (apci A2APolicyCreationInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
867	return &apci, true
868}
869
870// A2APolicyDetails a2A specific policy details.
871type A2APolicyDetails struct {
872	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
873	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
874	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
875	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
876	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
877	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
878	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
879	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
880	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
881	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
882	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
883	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
884}
885
886// MarshalJSON is the custom marshaler for A2APolicyDetails.
887func (apd A2APolicyDetails) MarshalJSON() ([]byte, error) {
888	apd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A
889	objectMap := make(map[string]interface{})
890	if apd.RecoveryPointThresholdInMinutes != nil {
891		objectMap["recoveryPointThresholdInMinutes"] = apd.RecoveryPointThresholdInMinutes
892	}
893	if apd.RecoveryPointHistory != nil {
894		objectMap["recoveryPointHistory"] = apd.RecoveryPointHistory
895	}
896	if apd.AppConsistentFrequencyInMinutes != nil {
897		objectMap["appConsistentFrequencyInMinutes"] = apd.AppConsistentFrequencyInMinutes
898	}
899	if apd.MultiVMSyncStatus != nil {
900		objectMap["multiVmSyncStatus"] = apd.MultiVMSyncStatus
901	}
902	if apd.CrashConsistentFrequencyInMinutes != nil {
903		objectMap["crashConsistentFrequencyInMinutes"] = apd.CrashConsistentFrequencyInMinutes
904	}
905	if apd.InstanceType != "" {
906		objectMap["instanceType"] = apd.InstanceType
907	}
908	return json.Marshal(objectMap)
909}
910
911// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
912func (apd A2APolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
913	return &apd, true
914}
915
916// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
917func (apd A2APolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
918	return nil, false
919}
920
921// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
922func (apd A2APolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
923	return nil, false
924}
925
926// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
927func (apd A2APolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
928	return nil, false
929}
930
931// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
932func (apd A2APolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
933	return nil, false
934}
935
936// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
937func (apd A2APolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
938	return nil, false
939}
940
941// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
942func (apd A2APolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
943	return nil, false
944}
945
946// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
947func (apd A2APolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
948	return nil, false
949}
950
951// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
952func (apd A2APolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
953	return nil, false
954}
955
956// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
957func (apd A2APolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
958	return nil, false
959}
960
961// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
962func (apd A2APolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
963	return nil, false
964}
965
966// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
967func (apd A2APolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
968	return nil, false
969}
970
971// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for A2APolicyDetails.
972func (apd A2APolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
973	return &apd, true
974}
975
976// A2AProtectedDiskDetails a2A protected disk details.
977type A2AProtectedDiskDetails struct {
978	// DiskURI - The disk uri.
979	DiskURI *string `json:"diskUri,omitempty"`
980	// RecoveryAzureStorageAccountID - The recovery disk storage account.
981	RecoveryAzureStorageAccountID *string `json:"recoveryAzureStorageAccountId,omitempty"`
982	// PrimaryDiskAzureStorageAccountID - The primary disk storage account.
983	PrimaryDiskAzureStorageAccountID *string `json:"primaryDiskAzureStorageAccountId,omitempty"`
984	// RecoveryDiskURI - Recovery disk uri.
985	RecoveryDiskURI *string `json:"recoveryDiskUri,omitempty"`
986	// DiskName - The disk name.
987	DiskName *string `json:"diskName,omitempty"`
988	// DiskCapacityInBytes - The disk capacity in bytes.
989	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
990	// PrimaryStagingAzureStorageAccountID - The primary staging storage account.
991	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
992	// DiskType - The type of disk.
993	DiskType *string `json:"diskType,omitempty"`
994	// ResyncRequired - A value indicating whether resync is required for this disk.
995	ResyncRequired *bool `json:"resyncRequired,omitempty"`
996	// MonitoringPercentageCompletion - The percentage of the monitoring job. The type of the monitoring job is defined by MonitoringJobType property.
997	MonitoringPercentageCompletion *int32 `json:"monitoringPercentageCompletion,omitempty"`
998	// MonitoringJobType - The type of the monitoring job. The progress is contained in MonitoringPercentageCompletion property.
999	MonitoringJobType *string `json:"monitoringJobType,omitempty"`
1000	// DataPendingInStagingStorageAccountInMB - The data pending for replication in MB at staging account.
1001	DataPendingInStagingStorageAccountInMB *float64 `json:"dataPendingInStagingStorageAccountInMB,omitempty"`
1002	// DataPendingAtSourceAgentInMB - The data pending at source virtual machine in MB.
1003	DataPendingAtSourceAgentInMB *float64 `json:"dataPendingAtSourceAgentInMB,omitempty"`
1004	// DiskState - The disk state.
1005	DiskState *string `json:"diskState,omitempty"`
1006	// AllowedDiskLevelOperation - The disk level operations list.
1007	AllowedDiskLevelOperation *[]string `json:"allowedDiskLevelOperation,omitempty"`
1008	// IsDiskEncrypted - A value indicating whether vm has encrypted os disk or not.
1009	IsDiskEncrypted *bool `json:"isDiskEncrypted,omitempty"`
1010	// SecretIdentifier - The secret URL / identifier (BEK).
1011	SecretIdentifier *string `json:"secretIdentifier,omitempty"`
1012	// DekKeyVaultArmID - The KeyVault resource id for secret (BEK).
1013	DekKeyVaultArmID *string `json:"dekKeyVaultArmId,omitempty"`
1014	// IsDiskKeyEncrypted - A value indicating whether disk key got encrypted or not.
1015	IsDiskKeyEncrypted *bool `json:"isDiskKeyEncrypted,omitempty"`
1016	// KeyIdentifier - The key URL / identifier (KEK).
1017	KeyIdentifier *string `json:"keyIdentifier,omitempty"`
1018	// KekKeyVaultArmID - The KeyVault resource id for key (KEK).
1019	KekKeyVaultArmID *string `json:"kekKeyVaultArmId,omitempty"`
1020}
1021
1022// A2AProtectedManagedDiskDetails a2A protected managed disk details.
1023type A2AProtectedManagedDiskDetails struct {
1024	// DiskID - The managed disk Arm id.
1025	DiskID *string `json:"diskId,omitempty"`
1026	// RecoveryResourceGroupID - The recovery disk resource group Arm Id.
1027	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1028	// RecoveryTargetDiskID - Recovery target disk Arm Id.
1029	RecoveryTargetDiskID *string `json:"recoveryTargetDiskId,omitempty"`
1030	// RecoveryReplicaDiskID - Recovery replica disk Arm Id.
1031	RecoveryReplicaDiskID *string `json:"recoveryReplicaDiskId,omitempty"`
1032	// RecoveryReplicaDiskAccountType - The replica disk type. Its an optional value and will be same as source disk type if not user provided.
1033	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
1034	// RecoveryTargetDiskAccountType - The target disk type after failover. Its an optional value and will be same as source disk type if not user provided.
1035	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
1036	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
1037	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
1038	// DiskName - The disk name.
1039	DiskName *string `json:"diskName,omitempty"`
1040	// DiskCapacityInBytes - The disk capacity in bytes.
1041	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
1042	// PrimaryStagingAzureStorageAccountID - The primary staging storage account.
1043	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
1044	// DiskType - The type of disk.
1045	DiskType *string `json:"diskType,omitempty"`
1046	// ResyncRequired - A value indicating whether resync is required for this disk.
1047	ResyncRequired *bool `json:"resyncRequired,omitempty"`
1048	// MonitoringPercentageCompletion - The percentage of the monitoring job. The type of the monitoring job is defined by MonitoringJobType property.
1049	MonitoringPercentageCompletion *int32 `json:"monitoringPercentageCompletion,omitempty"`
1050	// MonitoringJobType - The type of the monitoring job. The progress is contained in MonitoringPercentageCompletion property.
1051	MonitoringJobType *string `json:"monitoringJobType,omitempty"`
1052	// DataPendingInStagingStorageAccountInMB - The data pending for replication in MB at staging account.
1053	DataPendingInStagingStorageAccountInMB *float64 `json:"dataPendingInStagingStorageAccountInMB,omitempty"`
1054	// DataPendingAtSourceAgentInMB - The data pending at source virtual machine in MB.
1055	DataPendingAtSourceAgentInMB *float64 `json:"dataPendingAtSourceAgentInMB,omitempty"`
1056	// DiskState - The disk state.
1057	DiskState *string `json:"diskState,omitempty"`
1058	// AllowedDiskLevelOperation - The disk level operations list.
1059	AllowedDiskLevelOperation *[]string `json:"allowedDiskLevelOperation,omitempty"`
1060	// IsDiskEncrypted - A value indicating whether vm has encrypted os disk or not.
1061	IsDiskEncrypted *bool `json:"isDiskEncrypted,omitempty"`
1062	// SecretIdentifier - The secret URL / identifier (BEK).
1063	SecretIdentifier *string `json:"secretIdentifier,omitempty"`
1064	// DekKeyVaultArmID - The KeyVault resource id for secret (BEK).
1065	DekKeyVaultArmID *string `json:"dekKeyVaultArmId,omitempty"`
1066	// IsDiskKeyEncrypted - A value indicating whether disk key got encrypted or not.
1067	IsDiskKeyEncrypted *bool `json:"isDiskKeyEncrypted,omitempty"`
1068	// KeyIdentifier - The key URL / identifier (KEK).
1069	KeyIdentifier *string `json:"keyIdentifier,omitempty"`
1070	// KekKeyVaultArmID - The KeyVault resource id for key (KEK).
1071	KekKeyVaultArmID *string `json:"kekKeyVaultArmId,omitempty"`
1072	// FailoverDiskName - The failover name for the managed disk.
1073	FailoverDiskName *string `json:"failoverDiskName,omitempty"`
1074	// TfoDiskName - The test failover name for the managed disk.
1075	TfoDiskName *string `json:"tfoDiskName,omitempty"`
1076}
1077
1078// A2AProtectionContainerMappingDetails a2A provider specific settings.
1079type A2AProtectionContainerMappingDetails struct {
1080	// AgentAutoUpdateStatus - A value indicating whether the auto update is enabled. Possible values include: 'Disabled', 'Enabled'
1081	AgentAutoUpdateStatus AgentAutoUpdateStatus `json:"agentAutoUpdateStatus,omitempty"`
1082	// AutomationAccountArmID - The automation account arm id.
1083	AutomationAccountArmID *string `json:"automationAccountArmId,omitempty"`
1084	// ScheduleName - The schedule arm name.
1085	ScheduleName *string `json:"scheduleName,omitempty"`
1086	// JobScheduleName - The job schedule arm name.
1087	JobScheduleName *string `json:"jobScheduleName,omitempty"`
1088	// InstanceType - Possible values include: 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt'
1089	InstanceType InstanceTypeBasicProtectionContainerMappingProviderSpecificDetails `json:"instanceType,omitempty"`
1090}
1091
1092// MarshalJSON is the custom marshaler for A2AProtectionContainerMappingDetails.
1093func (apcmd A2AProtectionContainerMappingDetails) MarshalJSON() ([]byte, error) {
1094	apcmd.InstanceType = InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A
1095	objectMap := make(map[string]interface{})
1096	if apcmd.AgentAutoUpdateStatus != "" {
1097		objectMap["agentAutoUpdateStatus"] = apcmd.AgentAutoUpdateStatus
1098	}
1099	if apcmd.AutomationAccountArmID != nil {
1100		objectMap["automationAccountArmId"] = apcmd.AutomationAccountArmID
1101	}
1102	if apcmd.ScheduleName != nil {
1103		objectMap["scheduleName"] = apcmd.ScheduleName
1104	}
1105	if apcmd.JobScheduleName != nil {
1106		objectMap["jobScheduleName"] = apcmd.JobScheduleName
1107	}
1108	if apcmd.InstanceType != "" {
1109		objectMap["instanceType"] = apcmd.InstanceType
1110	}
1111	return json.Marshal(objectMap)
1112}
1113
1114// AsA2AProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1115func (apcmd A2AProtectionContainerMappingDetails) AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool) {
1116	return &apcmd, true
1117}
1118
1119// AsVMwareCbtProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1120func (apcmd A2AProtectionContainerMappingDetails) AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool) {
1121	return nil, false
1122}
1123
1124// AsProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1125func (apcmd A2AProtectionContainerMappingDetails) AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool) {
1126	return nil, false
1127}
1128
1129// AsBasicProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for A2AProtectionContainerMappingDetails.
1130func (apcmd A2AProtectionContainerMappingDetails) AsBasicProtectionContainerMappingProviderSpecificDetails() (BasicProtectionContainerMappingProviderSpecificDetails, bool) {
1131	return &apcmd, true
1132}
1133
1134// A2AProtectionIntentDiskInputDetails azure VM disk input details.
1135type A2AProtectionIntentDiskInputDetails struct {
1136	// DiskURI - The disk Uri.
1137	DiskURI *string `json:"diskUri,omitempty"`
1138	// RecoveryAzureStorageAccountCustomInput - The recovery VHD storage account input.
1139	RecoveryAzureStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"recoveryAzureStorageAccountCustomInput,omitempty"`
1140	// PrimaryStagingStorageAccountCustomInput - The primary staging storage account input.
1141	PrimaryStagingStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"primaryStagingStorageAccountCustomInput,omitempty"`
1142}
1143
1144// UnmarshalJSON is the custom unmarshaler for A2AProtectionIntentDiskInputDetails struct.
1145func (apidid *A2AProtectionIntentDiskInputDetails) UnmarshalJSON(body []byte) error {
1146	var m map[string]*json.RawMessage
1147	err := json.Unmarshal(body, &m)
1148	if err != nil {
1149		return err
1150	}
1151	for k, v := range m {
1152		switch k {
1153		case "diskUri":
1154			if v != nil {
1155				var diskURI string
1156				err = json.Unmarshal(*v, &diskURI)
1157				if err != nil {
1158					return err
1159				}
1160				apidid.DiskURI = &diskURI
1161			}
1162		case "recoveryAzureStorageAccountCustomInput":
1163			if v != nil {
1164				recoveryAzureStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
1165				if err != nil {
1166					return err
1167				}
1168				apidid.RecoveryAzureStorageAccountCustomInput = recoveryAzureStorageAccountCustomInput
1169			}
1170		case "primaryStagingStorageAccountCustomInput":
1171			if v != nil {
1172				primaryStagingStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
1173				if err != nil {
1174					return err
1175				}
1176				apidid.PrimaryStagingStorageAccountCustomInput = primaryStagingStorageAccountCustomInput
1177			}
1178		}
1179	}
1180
1181	return nil
1182}
1183
1184// A2AProtectionIntentManagedDiskInputDetails azure VM managed disk input details.
1185type A2AProtectionIntentManagedDiskInputDetails struct {
1186	// DiskID - The disk Id.
1187	DiskID *string `json:"diskId,omitempty"`
1188	// PrimaryStagingStorageAccountCustomInput - The primary staging storage account input.
1189	PrimaryStagingStorageAccountCustomInput BasicStorageAccountCustomDetails `json:"primaryStagingStorageAccountCustomInput,omitempty"`
1190	// RecoveryResourceGroupCustomInput - The recovery resource group input.
1191	RecoveryResourceGroupCustomInput BasicRecoveryResourceGroupCustomDetails `json:"recoveryResourceGroupCustomInput,omitempty"`
1192	// RecoveryReplicaDiskAccountType - The replica disk type. Its an optional value and will be same as source disk type if not user provided.
1193	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
1194	// RecoveryTargetDiskAccountType - The target disk type after failover. Its an optional value and will be same as source disk type if not user provided.
1195	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
1196	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
1197	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
1198	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
1199	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
1200}
1201
1202// UnmarshalJSON is the custom unmarshaler for A2AProtectionIntentManagedDiskInputDetails struct.
1203func (apimdid *A2AProtectionIntentManagedDiskInputDetails) UnmarshalJSON(body []byte) error {
1204	var m map[string]*json.RawMessage
1205	err := json.Unmarshal(body, &m)
1206	if err != nil {
1207		return err
1208	}
1209	for k, v := range m {
1210		switch k {
1211		case "diskId":
1212			if v != nil {
1213				var diskID string
1214				err = json.Unmarshal(*v, &diskID)
1215				if err != nil {
1216					return err
1217				}
1218				apimdid.DiskID = &diskID
1219			}
1220		case "primaryStagingStorageAccountCustomInput":
1221			if v != nil {
1222				primaryStagingStorageAccountCustomInput, err := unmarshalBasicStorageAccountCustomDetails(*v)
1223				if err != nil {
1224					return err
1225				}
1226				apimdid.PrimaryStagingStorageAccountCustomInput = primaryStagingStorageAccountCustomInput
1227			}
1228		case "recoveryResourceGroupCustomInput":
1229			if v != nil {
1230				recoveryResourceGroupCustomInput, err := unmarshalBasicRecoveryResourceGroupCustomDetails(*v)
1231				if err != nil {
1232					return err
1233				}
1234				apimdid.RecoveryResourceGroupCustomInput = recoveryResourceGroupCustomInput
1235			}
1236		case "recoveryReplicaDiskAccountType":
1237			if v != nil {
1238				var recoveryReplicaDiskAccountType string
1239				err = json.Unmarshal(*v, &recoveryReplicaDiskAccountType)
1240				if err != nil {
1241					return err
1242				}
1243				apimdid.RecoveryReplicaDiskAccountType = &recoveryReplicaDiskAccountType
1244			}
1245		case "recoveryTargetDiskAccountType":
1246			if v != nil {
1247				var recoveryTargetDiskAccountType string
1248				err = json.Unmarshal(*v, &recoveryTargetDiskAccountType)
1249				if err != nil {
1250					return err
1251				}
1252				apimdid.RecoveryTargetDiskAccountType = &recoveryTargetDiskAccountType
1253			}
1254		case "recoveryDiskEncryptionSetId":
1255			if v != nil {
1256				var recoveryDiskEncryptionSetID string
1257				err = json.Unmarshal(*v, &recoveryDiskEncryptionSetID)
1258				if err != nil {
1259					return err
1260				}
1261				apimdid.RecoveryDiskEncryptionSetID = &recoveryDiskEncryptionSetID
1262			}
1263		case "diskEncryptionInfo":
1264			if v != nil {
1265				var diskEncryptionInfo DiskEncryptionInfo
1266				err = json.Unmarshal(*v, &diskEncryptionInfo)
1267				if err != nil {
1268					return err
1269				}
1270				apimdid.DiskEncryptionInfo = &diskEncryptionInfo
1271			}
1272		}
1273	}
1274
1275	return nil
1276}
1277
1278// A2ARecoveryPointDetails a2A provider specific recovery point details.
1279type A2ARecoveryPointDetails struct {
1280	// RecoveryPointSyncType - A value indicating whether the recovery point is multi VM consistent. Possible values include: 'MultiVMSyncRecoveryPoint', 'PerVMRecoveryPoint'
1281	RecoveryPointSyncType RecoveryPointSyncType `json:"recoveryPointSyncType,omitempty"`
1282	// Disks - List of disk ids representing a recovery point.
1283	Disks *[]string `json:"disks,omitempty"`
1284	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
1285	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
1286}
1287
1288// MarshalJSON is the custom marshaler for A2ARecoveryPointDetails.
1289func (arpd A2ARecoveryPointDetails) MarshalJSON() ([]byte, error) {
1290	arpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A
1291	objectMap := make(map[string]interface{})
1292	if arpd.RecoveryPointSyncType != "" {
1293		objectMap["recoveryPointSyncType"] = arpd.RecoveryPointSyncType
1294	}
1295	if arpd.Disks != nil {
1296		objectMap["disks"] = arpd.Disks
1297	}
1298	if arpd.InstanceType != "" {
1299		objectMap["instanceType"] = arpd.InstanceType
1300	}
1301	return json.Marshal(objectMap)
1302}
1303
1304// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1305func (arpd A2ARecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
1306	return &arpd, true
1307}
1308
1309// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1310func (arpd A2ARecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
1311	return nil, false
1312}
1313
1314// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1315func (arpd A2ARecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
1316	return nil, false
1317}
1318
1319// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1320func (arpd A2ARecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
1321	return nil, false
1322}
1323
1324// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for A2ARecoveryPointDetails.
1325func (arpd A2ARecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
1326	return &arpd, true
1327}
1328
1329// A2ARemoveDisksInput a2A remove disk(s) input.
1330type A2ARemoveDisksInput struct {
1331	// VMDisksUris - The list of vm disk vhd URIs.
1332	VMDisksUris *[]string `json:"vmDisksUris,omitempty"`
1333	// VMManagedDisksIds - The list of vm managed disk Ids.
1334	VMManagedDisksIds *[]string `json:"vmManagedDisksIds,omitempty"`
1335	// InstanceType - Possible values include: 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeRemoveDisksProviderSpecificInput', 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A'
1336	InstanceType InstanceTypeBasicRemoveDisksProviderSpecificInput `json:"instanceType,omitempty"`
1337}
1338
1339// MarshalJSON is the custom marshaler for A2ARemoveDisksInput.
1340func (ardi A2ARemoveDisksInput) MarshalJSON() ([]byte, error) {
1341	ardi.InstanceType = InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A
1342	objectMap := make(map[string]interface{})
1343	if ardi.VMDisksUris != nil {
1344		objectMap["vmDisksUris"] = ardi.VMDisksUris
1345	}
1346	if ardi.VMManagedDisksIds != nil {
1347		objectMap["vmManagedDisksIds"] = ardi.VMManagedDisksIds
1348	}
1349	if ardi.InstanceType != "" {
1350		objectMap["instanceType"] = ardi.InstanceType
1351	}
1352	return json.Marshal(objectMap)
1353}
1354
1355// AsA2ARemoveDisksInput is the BasicRemoveDisksProviderSpecificInput implementation for A2ARemoveDisksInput.
1356func (ardi A2ARemoveDisksInput) AsA2ARemoveDisksInput() (*A2ARemoveDisksInput, bool) {
1357	return &ardi, true
1358}
1359
1360// AsRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for A2ARemoveDisksInput.
1361func (ardi A2ARemoveDisksInput) AsRemoveDisksProviderSpecificInput() (*RemoveDisksProviderSpecificInput, bool) {
1362	return nil, false
1363}
1364
1365// AsBasicRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for A2ARemoveDisksInput.
1366func (ardi A2ARemoveDisksInput) AsBasicRemoveDisksProviderSpecificInput() (BasicRemoveDisksProviderSpecificInput, bool) {
1367	return &ardi, true
1368}
1369
1370// A2AReplicationDetails a2A provider specific settings.
1371type A2AReplicationDetails struct {
1372	// FabricObjectID - The fabric specific object Id of the virtual machine.
1373	FabricObjectID *string `json:"fabricObjectId,omitempty"`
1374	// InitialPrimaryFabricLocation - READ-ONLY; The initial primary fabric location.
1375	InitialPrimaryFabricLocation *string `json:"initialPrimaryFabricLocation,omitempty"`
1376	// InitialRecoveryFabricLocation - READ-ONLY; The initial recovery fabric location.
1377	InitialRecoveryFabricLocation *string `json:"initialRecoveryFabricLocation,omitempty"`
1378	// InitialPrimaryZone - READ-ONLY; The initial primary availability zone.
1379	InitialPrimaryZone *string `json:"initialPrimaryZone,omitempty"`
1380	// InitialRecoveryZone - READ-ONLY; The initial recovery availability zone.
1381	InitialRecoveryZone *string `json:"initialRecoveryZone,omitempty"`
1382	// MultiVMGroupID - The multi vm group Id.
1383	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
1384	// MultiVMGroupName - The multi vm group name.
1385	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
1386	// MultiVMGroupCreateOption - Whether Multi VM group is auto created or specified by user. Possible values include: 'AutoCreated', 'UserSpecified'
1387	MultiVMGroupCreateOption MultiVMGroupCreateOption `json:"multiVmGroupCreateOption,omitempty"`
1388	// ManagementID - The management Id.
1389	ManagementID *string `json:"managementId,omitempty"`
1390	// ProtectedDisks - The list of protected disks.
1391	ProtectedDisks *[]A2AProtectedDiskDetails `json:"protectedDisks,omitempty"`
1392	// UnprotectedDisks - The list of unprotected disks.
1393	UnprotectedDisks *[]A2AUnprotectedDiskDetails `json:"unprotectedDisks,omitempty"`
1394	// ProtectedManagedDisks - The list of protected managed disks.
1395	ProtectedManagedDisks *[]A2AProtectedManagedDiskDetails `json:"protectedManagedDisks,omitempty"`
1396	// RecoveryBootDiagStorageAccountID - The recovery boot diagnostic storage account Arm Id.
1397	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
1398	// PrimaryFabricLocation - Primary fabric location.
1399	PrimaryFabricLocation *string `json:"primaryFabricLocation,omitempty"`
1400	// RecoveryFabricLocation - The recovery fabric location.
1401	RecoveryFabricLocation *string `json:"recoveryFabricLocation,omitempty"`
1402	// OsType - The type of operating system.
1403	OsType *string `json:"osType,omitempty"`
1404	// RecoveryAzureVMSize - The size of recovery virtual machine.
1405	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
1406	// RecoveryAzureVMName - The name of recovery virtual machine.
1407	RecoveryAzureVMName *string `json:"recoveryAzureVMName,omitempty"`
1408	// RecoveryAzureResourceGroupID - The recovery resource group.
1409	RecoveryAzureResourceGroupID *string `json:"recoveryAzureResourceGroupId,omitempty"`
1410	// RecoveryCloudService - The recovery cloud service.
1411	RecoveryCloudService *string `json:"recoveryCloudService,omitempty"`
1412	// RecoveryAvailabilitySet - The recovery availability set.
1413	RecoveryAvailabilitySet *string `json:"recoveryAvailabilitySet,omitempty"`
1414	// SelectedRecoveryAzureNetworkID - The recovery virtual network.
1415	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
1416	// SelectedTfoAzureNetworkID - The test failover virtual network.
1417	SelectedTfoAzureNetworkID *string `json:"selectedTfoAzureNetworkId,omitempty"`
1418	// VMNics - The virtual machine nic details.
1419	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
1420	// VMSyncedConfigDetails - The synced configuration details.
1421	VMSyncedConfigDetails *AzureToAzureVMSyncedConfigDetails `json:"vmSyncedConfigDetails,omitempty"`
1422	// MonitoringPercentageCompletion - The percentage of the monitoring job. The type of the monitoring job is defined by MonitoringJobType property.
1423	MonitoringPercentageCompletion *int32 `json:"monitoringPercentageCompletion,omitempty"`
1424	// MonitoringJobType - The type of the monitoring job. The progress is contained in MonitoringPercentageCompletion property.
1425	MonitoringJobType *string `json:"monitoringJobType,omitempty"`
1426	// LastHeartbeat - The last heartbeat received from the source server.
1427	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
1428	// AgentVersion - The agent version.
1429	AgentVersion *string `json:"agentVersion,omitempty"`
1430	// IsReplicationAgentUpdateRequired - A value indicating whether replication agent update is required.
1431	IsReplicationAgentUpdateRequired *bool `json:"isReplicationAgentUpdateRequired,omitempty"`
1432	// RecoveryFabricObjectID - The recovery fabric object Id.
1433	RecoveryFabricObjectID *string `json:"recoveryFabricObjectId,omitempty"`
1434	// VMProtectionState - The protection state for the vm.
1435	VMProtectionState *string `json:"vmProtectionState,omitempty"`
1436	// VMProtectionStateDescription - The protection state description for the vm.
1437	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
1438	// 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.
1439	LifecycleID *string `json:"lifecycleId,omitempty"`
1440	// TestFailoverRecoveryFabricObjectID - The test failover fabric object Id.
1441	TestFailoverRecoveryFabricObjectID *string `json:"testFailoverRecoveryFabricObjectId,omitempty"`
1442	// RpoInSeconds - The last RPO value in seconds.
1443	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
1444	// LastRpoCalculatedTime - The time (in UTC) when the last RPO value was calculated by Protection Service.
1445	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
1446	// RecoveryAvailabilityZone - The recovery availability zone.
1447	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
1448	// VMEncryptionType - READ-ONLY; The encryption type of the VM. Possible values include: 'NotEncrypted', 'OnePassEncrypted', 'TwoPassEncrypted'
1449	VMEncryptionType VMEncryptionType `json:"vmEncryptionType,omitempty"`
1450	// TfoAzureVMName - The test failover VM name.
1451	TfoAzureVMName *string `json:"tfoAzureVMName,omitempty"`
1452	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
1453	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
1454	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
1455	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
1456}
1457
1458// MarshalJSON is the custom marshaler for A2AReplicationDetails.
1459func (ard A2AReplicationDetails) MarshalJSON() ([]byte, error) {
1460	ard.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A
1461	objectMap := make(map[string]interface{})
1462	if ard.FabricObjectID != nil {
1463		objectMap["fabricObjectId"] = ard.FabricObjectID
1464	}
1465	if ard.MultiVMGroupID != nil {
1466		objectMap["multiVmGroupId"] = ard.MultiVMGroupID
1467	}
1468	if ard.MultiVMGroupName != nil {
1469		objectMap["multiVmGroupName"] = ard.MultiVMGroupName
1470	}
1471	if ard.MultiVMGroupCreateOption != "" {
1472		objectMap["multiVmGroupCreateOption"] = ard.MultiVMGroupCreateOption
1473	}
1474	if ard.ManagementID != nil {
1475		objectMap["managementId"] = ard.ManagementID
1476	}
1477	if ard.ProtectedDisks != nil {
1478		objectMap["protectedDisks"] = ard.ProtectedDisks
1479	}
1480	if ard.UnprotectedDisks != nil {
1481		objectMap["unprotectedDisks"] = ard.UnprotectedDisks
1482	}
1483	if ard.ProtectedManagedDisks != nil {
1484		objectMap["protectedManagedDisks"] = ard.ProtectedManagedDisks
1485	}
1486	if ard.RecoveryBootDiagStorageAccountID != nil {
1487		objectMap["recoveryBootDiagStorageAccountId"] = ard.RecoveryBootDiagStorageAccountID
1488	}
1489	if ard.PrimaryFabricLocation != nil {
1490		objectMap["primaryFabricLocation"] = ard.PrimaryFabricLocation
1491	}
1492	if ard.RecoveryFabricLocation != nil {
1493		objectMap["recoveryFabricLocation"] = ard.RecoveryFabricLocation
1494	}
1495	if ard.OsType != nil {
1496		objectMap["osType"] = ard.OsType
1497	}
1498	if ard.RecoveryAzureVMSize != nil {
1499		objectMap["recoveryAzureVMSize"] = ard.RecoveryAzureVMSize
1500	}
1501	if ard.RecoveryAzureVMName != nil {
1502		objectMap["recoveryAzureVMName"] = ard.RecoveryAzureVMName
1503	}
1504	if ard.RecoveryAzureResourceGroupID != nil {
1505		objectMap["recoveryAzureResourceGroupId"] = ard.RecoveryAzureResourceGroupID
1506	}
1507	if ard.RecoveryCloudService != nil {
1508		objectMap["recoveryCloudService"] = ard.RecoveryCloudService
1509	}
1510	if ard.RecoveryAvailabilitySet != nil {
1511		objectMap["recoveryAvailabilitySet"] = ard.RecoveryAvailabilitySet
1512	}
1513	if ard.SelectedRecoveryAzureNetworkID != nil {
1514		objectMap["selectedRecoveryAzureNetworkId"] = ard.SelectedRecoveryAzureNetworkID
1515	}
1516	if ard.SelectedTfoAzureNetworkID != nil {
1517		objectMap["selectedTfoAzureNetworkId"] = ard.SelectedTfoAzureNetworkID
1518	}
1519	if ard.VMNics != nil {
1520		objectMap["vmNics"] = ard.VMNics
1521	}
1522	if ard.VMSyncedConfigDetails != nil {
1523		objectMap["vmSyncedConfigDetails"] = ard.VMSyncedConfigDetails
1524	}
1525	if ard.MonitoringPercentageCompletion != nil {
1526		objectMap["monitoringPercentageCompletion"] = ard.MonitoringPercentageCompletion
1527	}
1528	if ard.MonitoringJobType != nil {
1529		objectMap["monitoringJobType"] = ard.MonitoringJobType
1530	}
1531	if ard.LastHeartbeat != nil {
1532		objectMap["lastHeartbeat"] = ard.LastHeartbeat
1533	}
1534	if ard.AgentVersion != nil {
1535		objectMap["agentVersion"] = ard.AgentVersion
1536	}
1537	if ard.IsReplicationAgentUpdateRequired != nil {
1538		objectMap["isReplicationAgentUpdateRequired"] = ard.IsReplicationAgentUpdateRequired
1539	}
1540	if ard.RecoveryFabricObjectID != nil {
1541		objectMap["recoveryFabricObjectId"] = ard.RecoveryFabricObjectID
1542	}
1543	if ard.VMProtectionState != nil {
1544		objectMap["vmProtectionState"] = ard.VMProtectionState
1545	}
1546	if ard.VMProtectionStateDescription != nil {
1547		objectMap["vmProtectionStateDescription"] = ard.VMProtectionStateDescription
1548	}
1549	if ard.LifecycleID != nil {
1550		objectMap["lifecycleId"] = ard.LifecycleID
1551	}
1552	if ard.TestFailoverRecoveryFabricObjectID != nil {
1553		objectMap["testFailoverRecoveryFabricObjectId"] = ard.TestFailoverRecoveryFabricObjectID
1554	}
1555	if ard.RpoInSeconds != nil {
1556		objectMap["rpoInSeconds"] = ard.RpoInSeconds
1557	}
1558	if ard.LastRpoCalculatedTime != nil {
1559		objectMap["lastRpoCalculatedTime"] = ard.LastRpoCalculatedTime
1560	}
1561	if ard.RecoveryAvailabilityZone != nil {
1562		objectMap["recoveryAvailabilityZone"] = ard.RecoveryAvailabilityZone
1563	}
1564	if ard.TfoAzureVMName != nil {
1565		objectMap["tfoAzureVMName"] = ard.TfoAzureVMName
1566	}
1567	if ard.RecoveryProximityPlacementGroupID != nil {
1568		objectMap["recoveryProximityPlacementGroupId"] = ard.RecoveryProximityPlacementGroupID
1569	}
1570	if ard.InstanceType != "" {
1571		objectMap["instanceType"] = ard.InstanceType
1572	}
1573	return json.Marshal(objectMap)
1574}
1575
1576// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1577func (ard A2AReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
1578	return &ard, true
1579}
1580
1581// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1582func (ard A2AReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
1583	return nil, false
1584}
1585
1586// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1587func (ard A2AReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
1588	return nil, false
1589}
1590
1591// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1592func (ard A2AReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
1593	return nil, false
1594}
1595
1596// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1597func (ard A2AReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
1598	return nil, false
1599}
1600
1601// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1602func (ard A2AReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
1603	return nil, false
1604}
1605
1606// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1607func (ard A2AReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
1608	return nil, false
1609}
1610
1611// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1612func (ard A2AReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
1613	return nil, false
1614}
1615
1616// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1617func (ard A2AReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
1618	return nil, false
1619}
1620
1621// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for A2AReplicationDetails.
1622func (ard A2AReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
1623	return &ard, true
1624}
1625
1626// A2AReplicationIntentDetails a2A provider specific settings.
1627type A2AReplicationIntentDetails struct {
1628	// FabricObjectID - The fabric specific object Id of the virtual machine.
1629	FabricObjectID *string `json:"fabricObjectId,omitempty"`
1630	// PolicyID - The ID of Policy governing this PE.
1631	PolicyID *string `json:"policyId,omitempty"`
1632	// PrimaryLocation - The primary location for the virtual machine.
1633	PrimaryLocation *string `json:"primaryLocation,omitempty"`
1634	// RecoveryLocation - The recovery location for the virtual machine.
1635	RecoveryLocation *string `json:"recoveryLocation,omitempty"`
1636	// RecoverySubscriptionID - The recovery subscription Id of the virtual machine.
1637	RecoverySubscriptionID *string `json:"recoverySubscriptionId,omitempty"`
1638	// PrimaryFabricFriendlyName - The recovery fabric Name.
1639	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
1640	// RecoveryFabricFriendlyName - The recovery fabric Name.
1641	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
1642	// PrimaryContainerFriendlyName - The primary container Name.
1643	PrimaryContainerFriendlyName *string `json:"primaryContainerFriendlyName,omitempty"`
1644	// RecoveryContainerFriendlyName - The recovery container Name.
1645	RecoveryContainerFriendlyName *string `json:"recoveryContainerFriendlyName,omitempty"`
1646	// RecoveryAvailabilityType - The recovery availability type of the virtual machine.
1647	RecoveryAvailabilityType *string `json:"recoveryAvailabilityType,omitempty"`
1648	// VMDisks - The list of vm disk details.
1649	VMDisks *[]A2AVMDiskDetails `json:"vmDisks,omitempty"`
1650	// VMManagedDisks - The list of vm managed disk details.
1651	VMManagedDisks *[]A2AVMManagedDiskDetails `json:"vmManagedDisks,omitempty"`
1652	// RecoveryResourceGroupID - The recovery resource group id.
1653	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1654	// RecoveryAvailabilitySetID - The recovery availability set Id.
1655	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
1656	// RecoveryVirtualNetworkID - The recovery virtual network Id.
1657	RecoveryVirtualNetworkID *string `json:"recoveryVirtualNetworkId,omitempty"`
1658	// RecoveryProximityPlacementGroupID - The recovery proximity placement group custom details.
1659	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
1660	// AutoProtectionOfDataDiskStatus - A value indicating whether the auto protection is enabled. Possible values include: 'AutoProtectionOfDataDiskStatusDisabled', 'AutoProtectionOfDataDiskStatusEnabled'
1661	AutoProtectionOfDataDiskStatus AutoProtectionOfDataDiskStatus `json:"autoProtectionOfDataDiskStatus,omitempty"`
1662	// MultiVMGroupName - The multi vm group name.
1663	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
1664	// MultiVMGroupID - The multi vm group id.
1665	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
1666	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
1667	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
1668	// DiskEncryptionInfo - The recovery disk encryption information (for two pass flows).
1669	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
1670	// RecoveryAvailabilityZone - The recovery availability zone.
1671	RecoveryAvailabilityZone *string `json:"recoveryAvailabilityZone,omitempty"`
1672	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeReplicationProtectionIntentProviderSpecificSettings', 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A'
1673	InstanceType InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettings `json:"instanceType,omitempty"`
1674}
1675
1676// MarshalJSON is the custom marshaler for A2AReplicationIntentDetails.
1677func (arid A2AReplicationIntentDetails) MarshalJSON() ([]byte, error) {
1678	arid.InstanceType = InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A
1679	objectMap := make(map[string]interface{})
1680	if arid.FabricObjectID != nil {
1681		objectMap["fabricObjectId"] = arid.FabricObjectID
1682	}
1683	if arid.PolicyID != nil {
1684		objectMap["policyId"] = arid.PolicyID
1685	}
1686	if arid.PrimaryLocation != nil {
1687		objectMap["primaryLocation"] = arid.PrimaryLocation
1688	}
1689	if arid.RecoveryLocation != nil {
1690		objectMap["recoveryLocation"] = arid.RecoveryLocation
1691	}
1692	if arid.RecoverySubscriptionID != nil {
1693		objectMap["recoverySubscriptionId"] = arid.RecoverySubscriptionID
1694	}
1695	if arid.PrimaryFabricFriendlyName != nil {
1696		objectMap["primaryFabricFriendlyName"] = arid.PrimaryFabricFriendlyName
1697	}
1698	if arid.RecoveryFabricFriendlyName != nil {
1699		objectMap["recoveryFabricFriendlyName"] = arid.RecoveryFabricFriendlyName
1700	}
1701	if arid.PrimaryContainerFriendlyName != nil {
1702		objectMap["primaryContainerFriendlyName"] = arid.PrimaryContainerFriendlyName
1703	}
1704	if arid.RecoveryContainerFriendlyName != nil {
1705		objectMap["recoveryContainerFriendlyName"] = arid.RecoveryContainerFriendlyName
1706	}
1707	if arid.RecoveryAvailabilityType != nil {
1708		objectMap["recoveryAvailabilityType"] = arid.RecoveryAvailabilityType
1709	}
1710	if arid.VMDisks != nil {
1711		objectMap["vmDisks"] = arid.VMDisks
1712	}
1713	if arid.VMManagedDisks != nil {
1714		objectMap["vmManagedDisks"] = arid.VMManagedDisks
1715	}
1716	if arid.RecoveryResourceGroupID != nil {
1717		objectMap["recoveryResourceGroupId"] = arid.RecoveryResourceGroupID
1718	}
1719	if arid.RecoveryAvailabilitySetID != nil {
1720		objectMap["recoveryAvailabilitySetId"] = arid.RecoveryAvailabilitySetID
1721	}
1722	if arid.RecoveryVirtualNetworkID != nil {
1723		objectMap["recoveryVirtualNetworkId"] = arid.RecoveryVirtualNetworkID
1724	}
1725	if arid.RecoveryProximityPlacementGroupID != nil {
1726		objectMap["recoveryProximityPlacementGroupId"] = arid.RecoveryProximityPlacementGroupID
1727	}
1728	if arid.AutoProtectionOfDataDiskStatus != "" {
1729		objectMap["autoProtectionOfDataDiskStatus"] = arid.AutoProtectionOfDataDiskStatus
1730	}
1731	if arid.MultiVMGroupName != nil {
1732		objectMap["multiVmGroupName"] = arid.MultiVMGroupName
1733	}
1734	if arid.MultiVMGroupID != nil {
1735		objectMap["multiVmGroupId"] = arid.MultiVMGroupID
1736	}
1737	if arid.RecoveryBootDiagStorageAccountID != nil {
1738		objectMap["recoveryBootDiagStorageAccountId"] = arid.RecoveryBootDiagStorageAccountID
1739	}
1740	if arid.DiskEncryptionInfo != nil {
1741		objectMap["diskEncryptionInfo"] = arid.DiskEncryptionInfo
1742	}
1743	if arid.RecoveryAvailabilityZone != nil {
1744		objectMap["recoveryAvailabilityZone"] = arid.RecoveryAvailabilityZone
1745	}
1746	if arid.InstanceType != "" {
1747		objectMap["instanceType"] = arid.InstanceType
1748	}
1749	return json.Marshal(objectMap)
1750}
1751
1752// AsA2AReplicationIntentDetails is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for A2AReplicationIntentDetails.
1753func (arid A2AReplicationIntentDetails) AsA2AReplicationIntentDetails() (*A2AReplicationIntentDetails, bool) {
1754	return &arid, true
1755}
1756
1757// AsReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for A2AReplicationIntentDetails.
1758func (arid A2AReplicationIntentDetails) AsReplicationProtectionIntentProviderSpecificSettings() (*ReplicationProtectionIntentProviderSpecificSettings, bool) {
1759	return nil, false
1760}
1761
1762// AsBasicReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for A2AReplicationIntentDetails.
1763func (arid A2AReplicationIntentDetails) AsBasicReplicationProtectionIntentProviderSpecificSettings() (BasicReplicationProtectionIntentProviderSpecificSettings, bool) {
1764	return &arid, true
1765}
1766
1767// A2AReprotectInput azure specific reprotect input.
1768type A2AReprotectInput struct {
1769	// RecoveryContainerID - The recovery container Id.
1770	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
1771	// VMDisks - The list of vm disk details.
1772	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
1773	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
1774	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1775	// RecoveryCloudServiceID - The recovery cloud service Id. Valid for V1 scenarios.
1776	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
1777	// RecoveryAvailabilitySetID - The recovery availability set.
1778	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
1779	// PolicyID - The Policy Id.
1780	PolicyID *string `json:"policyId,omitempty"`
1781	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
1782	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
1783}
1784
1785// MarshalJSON is the custom marshaler for A2AReprotectInput.
1786func (ari A2AReprotectInput) MarshalJSON() ([]byte, error) {
1787	ari.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A
1788	objectMap := make(map[string]interface{})
1789	if ari.RecoveryContainerID != nil {
1790		objectMap["recoveryContainerId"] = ari.RecoveryContainerID
1791	}
1792	if ari.VMDisks != nil {
1793		objectMap["vmDisks"] = ari.VMDisks
1794	}
1795	if ari.RecoveryResourceGroupID != nil {
1796		objectMap["recoveryResourceGroupId"] = ari.RecoveryResourceGroupID
1797	}
1798	if ari.RecoveryCloudServiceID != nil {
1799		objectMap["recoveryCloudServiceId"] = ari.RecoveryCloudServiceID
1800	}
1801	if ari.RecoveryAvailabilitySetID != nil {
1802		objectMap["recoveryAvailabilitySetId"] = ari.RecoveryAvailabilitySetID
1803	}
1804	if ari.PolicyID != nil {
1805		objectMap["policyId"] = ari.PolicyID
1806	}
1807	if ari.InstanceType != "" {
1808		objectMap["instanceType"] = ari.InstanceType
1809	}
1810	return json.Marshal(objectMap)
1811}
1812
1813// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1814func (ari A2AReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
1815	return &ari, true
1816}
1817
1818// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1819func (ari A2AReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
1820	return nil, false
1821}
1822
1823// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1824func (ari A2AReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
1825	return nil, false
1826}
1827
1828// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1829func (ari A2AReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
1830	return nil, false
1831}
1832
1833// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1834func (ari A2AReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
1835	return nil, false
1836}
1837
1838// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for A2AReprotectInput.
1839func (ari A2AReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
1840	return &ari, true
1841}
1842
1843// A2ASwitchProtectionInput a2A specific switch protection input.
1844type A2ASwitchProtectionInput struct {
1845	// RecoveryContainerID - The recovery container Id.
1846	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
1847	// VMDisks - The list of vm disk details.
1848	VMDisks *[]A2AVMDiskInputDetails `json:"vmDisks,omitempty"`
1849	// VMManagedDisks - The list of vm managed disk details.
1850	VMManagedDisks *[]A2AVMManagedDiskInputDetails `json:"vmManagedDisks,omitempty"`
1851	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
1852	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
1853	// RecoveryCloudServiceID - The recovery cloud service Id. Valid for V1 scenarios.
1854	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
1855	// RecoveryAvailabilitySetID - The recovery availability set.
1856	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
1857	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
1858	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
1859	// PolicyID - The Policy Id.
1860	PolicyID *string `json:"policyId,omitempty"`
1861	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
1862	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
1863	// DiskEncryptionInfo - The recovery disk encryption information.
1864	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
1865	// InstanceType - Possible values include: 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeSwitchProtectionProviderSpecificInput', 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A'
1866	InstanceType InstanceTypeBasicSwitchProtectionProviderSpecificInput `json:"instanceType,omitempty"`
1867}
1868
1869// MarshalJSON is the custom marshaler for A2ASwitchProtectionInput.
1870func (aspi A2ASwitchProtectionInput) MarshalJSON() ([]byte, error) {
1871	aspi.InstanceType = InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A
1872	objectMap := make(map[string]interface{})
1873	if aspi.RecoveryContainerID != nil {
1874		objectMap["recoveryContainerId"] = aspi.RecoveryContainerID
1875	}
1876	if aspi.VMDisks != nil {
1877		objectMap["vmDisks"] = aspi.VMDisks
1878	}
1879	if aspi.VMManagedDisks != nil {
1880		objectMap["vmManagedDisks"] = aspi.VMManagedDisks
1881	}
1882	if aspi.RecoveryResourceGroupID != nil {
1883		objectMap["recoveryResourceGroupId"] = aspi.RecoveryResourceGroupID
1884	}
1885	if aspi.RecoveryCloudServiceID != nil {
1886		objectMap["recoveryCloudServiceId"] = aspi.RecoveryCloudServiceID
1887	}
1888	if aspi.RecoveryAvailabilitySetID != nil {
1889		objectMap["recoveryAvailabilitySetId"] = aspi.RecoveryAvailabilitySetID
1890	}
1891	if aspi.RecoveryProximityPlacementGroupID != nil {
1892		objectMap["recoveryProximityPlacementGroupId"] = aspi.RecoveryProximityPlacementGroupID
1893	}
1894	if aspi.PolicyID != nil {
1895		objectMap["policyId"] = aspi.PolicyID
1896	}
1897	if aspi.RecoveryBootDiagStorageAccountID != nil {
1898		objectMap["recoveryBootDiagStorageAccountId"] = aspi.RecoveryBootDiagStorageAccountID
1899	}
1900	if aspi.DiskEncryptionInfo != nil {
1901		objectMap["diskEncryptionInfo"] = aspi.DiskEncryptionInfo
1902	}
1903	if aspi.InstanceType != "" {
1904		objectMap["instanceType"] = aspi.InstanceType
1905	}
1906	return json.Marshal(objectMap)
1907}
1908
1909// AsA2ASwitchProtectionInput is the BasicSwitchProtectionProviderSpecificInput implementation for A2ASwitchProtectionInput.
1910func (aspi A2ASwitchProtectionInput) AsA2ASwitchProtectionInput() (*A2ASwitchProtectionInput, bool) {
1911	return &aspi, true
1912}
1913
1914// AsSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for A2ASwitchProtectionInput.
1915func (aspi A2ASwitchProtectionInput) AsSwitchProtectionProviderSpecificInput() (*SwitchProtectionProviderSpecificInput, bool) {
1916	return nil, false
1917}
1918
1919// AsBasicSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for A2ASwitchProtectionInput.
1920func (aspi A2ASwitchProtectionInput) AsBasicSwitchProtectionProviderSpecificInput() (BasicSwitchProtectionProviderSpecificInput, bool) {
1921	return &aspi, true
1922}
1923
1924// A2ATestFailoverInput a2A provider specific input for test failover.
1925type A2ATestFailoverInput struct {
1926	// 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.
1927	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
1928	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for TFO or not.
1929	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
1930	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
1931	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
1932}
1933
1934// MarshalJSON is the custom marshaler for A2ATestFailoverInput.
1935func (atfi A2ATestFailoverInput) MarshalJSON() ([]byte, error) {
1936	atfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A
1937	objectMap := make(map[string]interface{})
1938	if atfi.RecoveryPointID != nil {
1939		objectMap["recoveryPointId"] = atfi.RecoveryPointID
1940	}
1941	if atfi.CloudServiceCreationOption != nil {
1942		objectMap["cloudServiceCreationOption"] = atfi.CloudServiceCreationOption
1943	}
1944	if atfi.InstanceType != "" {
1945		objectMap["instanceType"] = atfi.InstanceType
1946	}
1947	return json.Marshal(objectMap)
1948}
1949
1950// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1951func (atfi A2ATestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
1952	return &atfi, true
1953}
1954
1955// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1956func (atfi A2ATestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
1957	return nil, false
1958}
1959
1960// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1961func (atfi A2ATestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
1962	return nil, false
1963}
1964
1965// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1966func (atfi A2ATestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
1967	return nil, false
1968}
1969
1970// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1971func (atfi A2ATestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
1972	return nil, false
1973}
1974
1975// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1976func (atfi A2ATestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
1977	return nil, false
1978}
1979
1980// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for A2ATestFailoverInput.
1981func (atfi A2ATestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
1982	return &atfi, true
1983}
1984
1985// A2AUnplannedFailoverInput a2A provider specific input for unplanned failover.
1986type A2AUnplannedFailoverInput struct {
1987	// 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.
1988	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
1989	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for failover or not.
1990	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
1991	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
1992	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
1993}
1994
1995// MarshalJSON is the custom marshaler for A2AUnplannedFailoverInput.
1996func (aufi A2AUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
1997	aufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A
1998	objectMap := make(map[string]interface{})
1999	if aufi.RecoveryPointID != nil {
2000		objectMap["recoveryPointId"] = aufi.RecoveryPointID
2001	}
2002	if aufi.CloudServiceCreationOption != nil {
2003		objectMap["cloudServiceCreationOption"] = aufi.CloudServiceCreationOption
2004	}
2005	if aufi.InstanceType != "" {
2006		objectMap["instanceType"] = aufi.InstanceType
2007	}
2008	return json.Marshal(objectMap)
2009}
2010
2011// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2012func (aufi A2AUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
2013	return &aufi, true
2014}
2015
2016// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2017func (aufi A2AUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
2018	return nil, false
2019}
2020
2021// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2022func (aufi A2AUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
2023	return nil, false
2024}
2025
2026// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2027func (aufi A2AUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
2028	return nil, false
2029}
2030
2031// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2032func (aufi A2AUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
2033	return nil, false
2034}
2035
2036// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2037func (aufi A2AUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
2038	return nil, false
2039}
2040
2041// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for A2AUnplannedFailoverInput.
2042func (aufi A2AUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
2043	return &aufi, true
2044}
2045
2046// A2AUnprotectedDiskDetails a2A unprotected disk details.
2047type A2AUnprotectedDiskDetails struct {
2048	// DiskLunID - The source lun Id for the data disk.
2049	DiskLunID *int32 `json:"diskLunId,omitempty"`
2050}
2051
2052// A2AUpdateContainerMappingInput a2A update protection container mapping.
2053type A2AUpdateContainerMappingInput struct {
2054	// AgentAutoUpdateStatus - A value indicating whether the auto update is enabled. Possible values include: 'Disabled', 'Enabled'
2055	AgentAutoUpdateStatus AgentAutoUpdateStatus `json:"agentAutoUpdateStatus,omitempty"`
2056	// AutomationAccountArmID - The automation account arm id.
2057	AutomationAccountArmID *string `json:"automationAccountArmId,omitempty"`
2058	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeReplicationProviderSpecificUpdateContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A'
2059	InstanceType InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInput `json:"instanceType,omitempty"`
2060}
2061
2062// MarshalJSON is the custom marshaler for A2AUpdateContainerMappingInput.
2063func (aucmi A2AUpdateContainerMappingInput) MarshalJSON() ([]byte, error) {
2064	aucmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A
2065	objectMap := make(map[string]interface{})
2066	if aucmi.AgentAutoUpdateStatus != "" {
2067		objectMap["agentAutoUpdateStatus"] = aucmi.AgentAutoUpdateStatus
2068	}
2069	if aucmi.AutomationAccountArmID != nil {
2070		objectMap["automationAccountArmId"] = aucmi.AutomationAccountArmID
2071	}
2072	if aucmi.InstanceType != "" {
2073		objectMap["instanceType"] = aucmi.InstanceType
2074	}
2075	return json.Marshal(objectMap)
2076}
2077
2078// AsA2AUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for A2AUpdateContainerMappingInput.
2079func (aucmi A2AUpdateContainerMappingInput) AsA2AUpdateContainerMappingInput() (*A2AUpdateContainerMappingInput, bool) {
2080	return &aucmi, true
2081}
2082
2083// AsReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for A2AUpdateContainerMappingInput.
2084func (aucmi A2AUpdateContainerMappingInput) AsReplicationProviderSpecificUpdateContainerMappingInput() (*ReplicationProviderSpecificUpdateContainerMappingInput, bool) {
2085	return nil, false
2086}
2087
2088// AsBasicReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for A2AUpdateContainerMappingInput.
2089func (aucmi A2AUpdateContainerMappingInput) AsBasicReplicationProviderSpecificUpdateContainerMappingInput() (BasicReplicationProviderSpecificUpdateContainerMappingInput, bool) {
2090	return &aucmi, true
2091}
2092
2093// A2AUpdateReplicationProtectedItemInput inMage Azure V2 input to update replication protected item.
2094type A2AUpdateReplicationProtectedItemInput struct {
2095	// RecoveryCloudServiceID - The target cloud service ARM Id (for V1).
2096	RecoveryCloudServiceID *string `json:"recoveryCloudServiceId,omitempty"`
2097	// RecoveryResourceGroupID - The target resource group ARM Id (for V2).
2098	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
2099	// ManagedDiskUpdateDetails - Managed disk update details.
2100	ManagedDiskUpdateDetails *[]A2AVMManagedDiskUpdateDetails `json:"managedDiskUpdateDetails,omitempty"`
2101	// RecoveryBootDiagStorageAccountID - The boot diagnostic storage account.
2102	RecoveryBootDiagStorageAccountID *string `json:"recoveryBootDiagStorageAccountId,omitempty"`
2103	// DiskEncryptionInfo - The recovery os disk encryption information.
2104	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2105	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id.
2106	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
2107	// TfoAzureVMName - The user given name for test failover VM.
2108	TfoAzureVMName *string `json:"tfoAzureVMName,omitempty"`
2109	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
2110	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
2111}
2112
2113// MarshalJSON is the custom marshaler for A2AUpdateReplicationProtectedItemInput.
2114func (aurpii A2AUpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
2115	aurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A
2116	objectMap := make(map[string]interface{})
2117	if aurpii.RecoveryCloudServiceID != nil {
2118		objectMap["recoveryCloudServiceId"] = aurpii.RecoveryCloudServiceID
2119	}
2120	if aurpii.RecoveryResourceGroupID != nil {
2121		objectMap["recoveryResourceGroupId"] = aurpii.RecoveryResourceGroupID
2122	}
2123	if aurpii.ManagedDiskUpdateDetails != nil {
2124		objectMap["managedDiskUpdateDetails"] = aurpii.ManagedDiskUpdateDetails
2125	}
2126	if aurpii.RecoveryBootDiagStorageAccountID != nil {
2127		objectMap["recoveryBootDiagStorageAccountId"] = aurpii.RecoveryBootDiagStorageAccountID
2128	}
2129	if aurpii.DiskEncryptionInfo != nil {
2130		objectMap["diskEncryptionInfo"] = aurpii.DiskEncryptionInfo
2131	}
2132	if aurpii.RecoveryProximityPlacementGroupID != nil {
2133		objectMap["recoveryProximityPlacementGroupId"] = aurpii.RecoveryProximityPlacementGroupID
2134	}
2135	if aurpii.TfoAzureVMName != nil {
2136		objectMap["tfoAzureVMName"] = aurpii.TfoAzureVMName
2137	}
2138	if aurpii.InstanceType != "" {
2139		objectMap["instanceType"] = aurpii.InstanceType
2140	}
2141	return json.Marshal(objectMap)
2142}
2143
2144// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2145func (aurpii A2AUpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
2146	return &aurpii, true
2147}
2148
2149// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2150func (aurpii A2AUpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
2151	return nil, false
2152}
2153
2154// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2155func (aurpii A2AUpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
2156	return nil, false
2157}
2158
2159// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2160func (aurpii A2AUpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
2161	return nil, false
2162}
2163
2164// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2165func (aurpii A2AUpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
2166	return nil, false
2167}
2168
2169// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for A2AUpdateReplicationProtectedItemInput.
2170func (aurpii A2AUpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
2171	return &aurpii, true
2172}
2173
2174// A2AVMDiskDetails azure VM disk details.
2175type A2AVMDiskDetails struct {
2176	// DiskURI - The disk Uri.
2177	DiskURI *string `json:"diskUri,omitempty"`
2178	// RecoveryAzureStorageAccountID - The recovery VHD storage account Id.
2179	RecoveryAzureStorageAccountID *string `json:"recoveryAzureStorageAccountId,omitempty"`
2180	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Id.
2181	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2182}
2183
2184// A2AVMDiskInputDetails azure VM disk input details.
2185type A2AVMDiskInputDetails struct {
2186	// DiskURI - The disk Uri.
2187	DiskURI *string `json:"diskUri,omitempty"`
2188	// RecoveryAzureStorageAccountID - The recovery VHD storage account Id.
2189	RecoveryAzureStorageAccountID *string `json:"recoveryAzureStorageAccountId,omitempty"`
2190	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Id.
2191	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2192}
2193
2194// A2AVMManagedDiskDetails azure VM managed disk input details.
2195type A2AVMManagedDiskDetails struct {
2196	// DiskID - The disk Id.
2197	DiskID *string `json:"diskId,omitempty"`
2198	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Arm Id.
2199	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2200	// RecoveryResourceGroupID - The target resource group Arm Id.
2201	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
2202	// RecoveryReplicaDiskAccountType - The replica disk type.
2203	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
2204	// RecoveryTargetDiskAccountType - The target disk type after failover.
2205	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
2206	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
2207	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
2208	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
2209	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2210}
2211
2212// A2AVMManagedDiskInputDetails azure VM managed disk input details.
2213type A2AVMManagedDiskInputDetails struct {
2214	// DiskID - The disk Id.
2215	DiskID *string `json:"diskId,omitempty"`
2216	// PrimaryStagingAzureStorageAccountID - The primary staging storage account Arm Id.
2217	PrimaryStagingAzureStorageAccountID *string `json:"primaryStagingAzureStorageAccountId,omitempty"`
2218	// RecoveryResourceGroupID - The target resource group Arm Id.
2219	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
2220	// RecoveryReplicaDiskAccountType - The replica disk type. Its an optional value and will be same as source disk type if not user provided.
2221	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
2222	// RecoveryTargetDiskAccountType - The target disk type after failover. Its an optional value and will be same as source disk type if not user provided.
2223	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
2224	// RecoveryDiskEncryptionSetID - The recovery disk encryption set Id.
2225	RecoveryDiskEncryptionSetID *string `json:"recoveryDiskEncryptionSetId,omitempty"`
2226	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
2227	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2228}
2229
2230// A2AVMManagedDiskUpdateDetails azure VM managed disk update input details.
2231type A2AVMManagedDiskUpdateDetails struct {
2232	// DiskID - The disk Id.
2233	DiskID *string `json:"diskId,omitempty"`
2234	// RecoveryTargetDiskAccountType - The target disk type before failover.
2235	RecoveryTargetDiskAccountType *string `json:"recoveryTargetDiskAccountType,omitempty"`
2236	// RecoveryReplicaDiskAccountType - The replica disk type before failover.
2237	RecoveryReplicaDiskAccountType *string `json:"recoveryReplicaDiskAccountType,omitempty"`
2238	// DiskEncryptionInfo - The recovery disk encryption information (for one / single pass flows).
2239	DiskEncryptionInfo *DiskEncryptionInfo `json:"diskEncryptionInfo,omitempty"`
2240	// FailoverDiskName - The target disk name for unplanned failover operation.
2241	FailoverDiskName *string `json:"failoverDiskName,omitempty"`
2242	// TfoDiskName - The target disk name for test failover operation.
2243	TfoDiskName *string `json:"tfoDiskName,omitempty"`
2244}
2245
2246// AddDisksInput input for add disk(s) operation.
2247type AddDisksInput struct {
2248	// Properties - Add disks input properties.
2249	Properties *AddDisksInputProperties `json:"properties,omitempty"`
2250}
2251
2252// AddDisksInputProperties add Disks input properties.
2253type AddDisksInputProperties struct {
2254	// 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.
2255	ProviderSpecificDetails BasicAddDisksProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
2256}
2257
2258// UnmarshalJSON is the custom unmarshaler for AddDisksInputProperties struct.
2259func (adip *AddDisksInputProperties) UnmarshalJSON(body []byte) error {
2260	var m map[string]*json.RawMessage
2261	err := json.Unmarshal(body, &m)
2262	if err != nil {
2263		return err
2264	}
2265	for k, v := range m {
2266		switch k {
2267		case "providerSpecificDetails":
2268			if v != nil {
2269				providerSpecificDetails, err := unmarshalBasicAddDisksProviderSpecificInput(*v)
2270				if err != nil {
2271					return err
2272				}
2273				adip.ProviderSpecificDetails = providerSpecificDetails
2274			}
2275		}
2276	}
2277
2278	return nil
2279}
2280
2281// BasicAddDisksProviderSpecificInput add Disks provider specific input.
2282type BasicAddDisksProviderSpecificInput interface {
2283	AsA2AAddDisksInput() (*A2AAddDisksInput, bool)
2284	AsAddDisksProviderSpecificInput() (*AddDisksProviderSpecificInput, bool)
2285}
2286
2287// AddDisksProviderSpecificInput add Disks provider specific input.
2288type AddDisksProviderSpecificInput struct {
2289	// InstanceType - Possible values include: 'InstanceTypeAddDisksProviderSpecificInput', 'InstanceTypeA2A'
2290	InstanceType InstanceType `json:"instanceType,omitempty"`
2291}
2292
2293func unmarshalBasicAddDisksProviderSpecificInput(body []byte) (BasicAddDisksProviderSpecificInput, error) {
2294	var m map[string]interface{}
2295	err := json.Unmarshal(body, &m)
2296	if err != nil {
2297		return nil, err
2298	}
2299
2300	switch m["instanceType"] {
2301	case string(InstanceTypeA2A):
2302		var aadi A2AAddDisksInput
2303		err := json.Unmarshal(body, &aadi)
2304		return aadi, err
2305	default:
2306		var adpsi AddDisksProviderSpecificInput
2307		err := json.Unmarshal(body, &adpsi)
2308		return adpsi, err
2309	}
2310}
2311func unmarshalBasicAddDisksProviderSpecificInputArray(body []byte) ([]BasicAddDisksProviderSpecificInput, error) {
2312	var rawMessages []*json.RawMessage
2313	err := json.Unmarshal(body, &rawMessages)
2314	if err != nil {
2315		return nil, err
2316	}
2317
2318	adpsiArray := make([]BasicAddDisksProviderSpecificInput, len(rawMessages))
2319
2320	for index, rawMessage := range rawMessages {
2321		adpsi, err := unmarshalBasicAddDisksProviderSpecificInput(*rawMessage)
2322		if err != nil {
2323			return nil, err
2324		}
2325		adpsiArray[index] = adpsi
2326	}
2327	return adpsiArray, nil
2328}
2329
2330// MarshalJSON is the custom marshaler for AddDisksProviderSpecificInput.
2331func (adpsi AddDisksProviderSpecificInput) MarshalJSON() ([]byte, error) {
2332	adpsi.InstanceType = InstanceTypeAddDisksProviderSpecificInput
2333	objectMap := make(map[string]interface{})
2334	if adpsi.InstanceType != "" {
2335		objectMap["instanceType"] = adpsi.InstanceType
2336	}
2337	return json.Marshal(objectMap)
2338}
2339
2340// AsA2AAddDisksInput is the BasicAddDisksProviderSpecificInput implementation for AddDisksProviderSpecificInput.
2341func (adpsi AddDisksProviderSpecificInput) AsA2AAddDisksInput() (*A2AAddDisksInput, bool) {
2342	return nil, false
2343}
2344
2345// AsAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for AddDisksProviderSpecificInput.
2346func (adpsi AddDisksProviderSpecificInput) AsAddDisksProviderSpecificInput() (*AddDisksProviderSpecificInput, bool) {
2347	return &adpsi, true
2348}
2349
2350// AsBasicAddDisksProviderSpecificInput is the BasicAddDisksProviderSpecificInput implementation for AddDisksProviderSpecificInput.
2351func (adpsi AddDisksProviderSpecificInput) AsBasicAddDisksProviderSpecificInput() (BasicAddDisksProviderSpecificInput, bool) {
2352	return &adpsi, true
2353}
2354
2355// AddRecoveryServicesProviderInput input required to add a provider.
2356type AddRecoveryServicesProviderInput struct {
2357	// Properties - The properties of an add provider request.
2358	Properties *AddRecoveryServicesProviderInputProperties `json:"properties,omitempty"`
2359}
2360
2361// AddRecoveryServicesProviderInputProperties the properties of an add provider request.
2362type AddRecoveryServicesProviderInputProperties struct {
2363	// MachineName - The name of the machine where the provider is getting added.
2364	MachineName *string `json:"machineName,omitempty"`
2365	// MachineID - The Id of the machine where the provider is getting added.
2366	MachineID *string `json:"machineId,omitempty"`
2367	// AuthenticationIdentityInput - The identity provider input for DRA authentication.
2368	AuthenticationIdentityInput *IdentityProviderInput `json:"authenticationIdentityInput,omitempty"`
2369	// ResourceAccessIdentityInput - The identity provider input for resource access.
2370	ResourceAccessIdentityInput *IdentityProviderInput `json:"resourceAccessIdentityInput,omitempty"`
2371	// DataPlaneAuthenticationIdentityInput - The identity provider input for data plane authentication.
2372	DataPlaneAuthenticationIdentityInput *IdentityProviderInput `json:"dataPlaneAuthenticationIdentityInput,omitempty"`
2373}
2374
2375// AddVCenterRequest input required to add vCenter.
2376type AddVCenterRequest struct {
2377	// Properties - The properties of an add vCenter request.
2378	Properties *AddVCenterRequestProperties `json:"properties,omitempty"`
2379}
2380
2381// AddVCenterRequestProperties the properties of an add vCenter request.
2382type AddVCenterRequestProperties struct {
2383	// FriendlyName - The friendly name of the vCenter.
2384	FriendlyName *string `json:"friendlyName,omitempty"`
2385	// IPAddress - The IP address of the vCenter to be discovered.
2386	IPAddress *string `json:"ipAddress,omitempty"`
2387	// ProcessServerID - The process server Id from where the discovery is orchestrated.
2388	ProcessServerID *string `json:"processServerId,omitempty"`
2389	// Port - The port number for discovery.
2390	Port *string `json:"port,omitempty"`
2391	// RunAsAccountID - The account Id which has privileges to discover the vCenter.
2392	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
2393}
2394
2395// AgentDetails agent details.
2396type AgentDetails struct {
2397	// AgentID - READ-ONLY; The Id of the agent running on the server.
2398	AgentID *string `json:"agentId,omitempty"`
2399	// MachineID - READ-ONLY; The Id of the machine to which the agent is registered.
2400	MachineID *string `json:"machineId,omitempty"`
2401	// BiosID - READ-ONLY; The machine BIOS Id.
2402	BiosID *string `json:"biosId,omitempty"`
2403	// Fqdn - READ-ONLY; The machine FQDN.
2404	Fqdn *string `json:"fqdn,omitempty"`
2405	// Disks - READ-ONLY; The details of agent disks.
2406	Disks *[]AgentDiskDetails `json:"disks,omitempty"`
2407}
2408
2409// AgentDiskDetails agent disk details.
2410type AgentDiskDetails struct {
2411	// DiskID - READ-ONLY; The disk Id.
2412	DiskID *string `json:"diskId,omitempty"`
2413	// DiskName - READ-ONLY; The disk name.
2414	DiskName *string `json:"diskName,omitempty"`
2415	// IsOSDisk - READ-ONLY; A value indicating whether the disk is the OS disk.
2416	IsOSDisk *string `json:"isOSDisk,omitempty"`
2417	// CapacityInBytes - READ-ONLY; The disk capacity in bytes.
2418	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
2419	// LunID - READ-ONLY; The lun of disk.
2420	LunID *int32 `json:"lunId,omitempty"`
2421}
2422
2423// Alert implements the Alert class.
2424type Alert struct {
2425	autorest.Response `json:"-"`
2426	// Properties - Alert related data.
2427	Properties *AlertProperties `json:"properties,omitempty"`
2428	// ID - READ-ONLY; Resource Id
2429	ID *string `json:"id,omitempty"`
2430	// Name - READ-ONLY; Resource Name
2431	Name *string `json:"name,omitempty"`
2432	// Type - READ-ONLY; Resource Type
2433	Type *string `json:"type,omitempty"`
2434	// Location - Resource Location
2435	Location *string `json:"location,omitempty"`
2436}
2437
2438// MarshalJSON is the custom marshaler for Alert.
2439func (a Alert) MarshalJSON() ([]byte, error) {
2440	objectMap := make(map[string]interface{})
2441	if a.Properties != nil {
2442		objectMap["properties"] = a.Properties
2443	}
2444	if a.Location != nil {
2445		objectMap["location"] = a.Location
2446	}
2447	return json.Marshal(objectMap)
2448}
2449
2450// AlertCollection collection of alerts.
2451type AlertCollection struct {
2452	autorest.Response `json:"-"`
2453	// Value - The list of alerts.
2454	Value *[]Alert `json:"value,omitempty"`
2455	// NextLink - The value of next link.
2456	NextLink *string `json:"nextLink,omitempty"`
2457}
2458
2459// AlertCollectionIterator provides access to a complete listing of Alert values.
2460type AlertCollectionIterator struct {
2461	i    int
2462	page AlertCollectionPage
2463}
2464
2465// NextWithContext advances to the next value.  If there was an error making
2466// the request the iterator does not advance and the error is returned.
2467func (iter *AlertCollectionIterator) NextWithContext(ctx context.Context) (err error) {
2468	if tracing.IsEnabled() {
2469		ctx = tracing.StartSpan(ctx, fqdn+"/AlertCollectionIterator.NextWithContext")
2470		defer func() {
2471			sc := -1
2472			if iter.Response().Response.Response != nil {
2473				sc = iter.Response().Response.Response.StatusCode
2474			}
2475			tracing.EndSpan(ctx, sc, err)
2476		}()
2477	}
2478	iter.i++
2479	if iter.i < len(iter.page.Values()) {
2480		return nil
2481	}
2482	err = iter.page.NextWithContext(ctx)
2483	if err != nil {
2484		iter.i--
2485		return err
2486	}
2487	iter.i = 0
2488	return nil
2489}
2490
2491// Next advances to the next value.  If there was an error making
2492// the request the iterator does not advance and the error is returned.
2493// Deprecated: Use NextWithContext() instead.
2494func (iter *AlertCollectionIterator) Next() error {
2495	return iter.NextWithContext(context.Background())
2496}
2497
2498// NotDone returns true if the enumeration should be started or is not yet complete.
2499func (iter AlertCollectionIterator) NotDone() bool {
2500	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2501}
2502
2503// Response returns the raw server response from the last page request.
2504func (iter AlertCollectionIterator) Response() AlertCollection {
2505	return iter.page.Response()
2506}
2507
2508// Value returns the current value or a zero-initialized value if the
2509// iterator has advanced beyond the end of the collection.
2510func (iter AlertCollectionIterator) Value() Alert {
2511	if !iter.page.NotDone() {
2512		return Alert{}
2513	}
2514	return iter.page.Values()[iter.i]
2515}
2516
2517// Creates a new instance of the AlertCollectionIterator type.
2518func NewAlertCollectionIterator(page AlertCollectionPage) AlertCollectionIterator {
2519	return AlertCollectionIterator{page: page}
2520}
2521
2522// IsEmpty returns true if the ListResult contains no values.
2523func (ac AlertCollection) IsEmpty() bool {
2524	return ac.Value == nil || len(*ac.Value) == 0
2525}
2526
2527// hasNextLink returns true if the NextLink is not empty.
2528func (ac AlertCollection) hasNextLink() bool {
2529	return ac.NextLink != nil && len(*ac.NextLink) != 0
2530}
2531
2532// alertCollectionPreparer prepares a request to retrieve the next set of results.
2533// It returns nil if no more results exist.
2534func (ac AlertCollection) alertCollectionPreparer(ctx context.Context) (*http.Request, error) {
2535	if !ac.hasNextLink() {
2536		return nil, nil
2537	}
2538	return autorest.Prepare((&http.Request{}).WithContext(ctx),
2539		autorest.AsJSON(),
2540		autorest.AsGet(),
2541		autorest.WithBaseURL(to.String(ac.NextLink)))
2542}
2543
2544// AlertCollectionPage contains a page of Alert values.
2545type AlertCollectionPage struct {
2546	fn func(context.Context, AlertCollection) (AlertCollection, error)
2547	ac AlertCollection
2548}
2549
2550// NextWithContext advances to the next page of values.  If there was an error making
2551// the request the page does not advance and the error is returned.
2552func (page *AlertCollectionPage) NextWithContext(ctx context.Context) (err error) {
2553	if tracing.IsEnabled() {
2554		ctx = tracing.StartSpan(ctx, fqdn+"/AlertCollectionPage.NextWithContext")
2555		defer func() {
2556			sc := -1
2557			if page.Response().Response.Response != nil {
2558				sc = page.Response().Response.Response.StatusCode
2559			}
2560			tracing.EndSpan(ctx, sc, err)
2561		}()
2562	}
2563	for {
2564		next, err := page.fn(ctx, page.ac)
2565		if err != nil {
2566			return err
2567		}
2568		page.ac = next
2569		if !next.hasNextLink() || !next.IsEmpty() {
2570			break
2571		}
2572	}
2573	return nil
2574}
2575
2576// Next advances to the next page of values.  If there was an error making
2577// the request the page does not advance and the error is returned.
2578// Deprecated: Use NextWithContext() instead.
2579func (page *AlertCollectionPage) Next() error {
2580	return page.NextWithContext(context.Background())
2581}
2582
2583// NotDone returns true if the page enumeration should be started or is not yet complete.
2584func (page AlertCollectionPage) NotDone() bool {
2585	return !page.ac.IsEmpty()
2586}
2587
2588// Response returns the raw server response from the last page request.
2589func (page AlertCollectionPage) Response() AlertCollection {
2590	return page.ac
2591}
2592
2593// Values returns the slice of values for the current page or nil if there are no values.
2594func (page AlertCollectionPage) Values() []Alert {
2595	if page.ac.IsEmpty() {
2596		return nil
2597	}
2598	return *page.ac.Value
2599}
2600
2601// Creates a new instance of the AlertCollectionPage type.
2602func NewAlertCollectionPage(cur AlertCollection, getNextPage func(context.Context, AlertCollection) (AlertCollection, error)) AlertCollectionPage {
2603	return AlertCollectionPage{
2604		fn: getNextPage,
2605		ac: cur,
2606	}
2607}
2608
2609// AlertProperties the properties of an alert.
2610type AlertProperties struct {
2611	// SendToOwners - A value indicating whether to send email to subscription administrator.
2612	SendToOwners *string `json:"sendToOwners,omitempty"`
2613	// CustomEmailAddresses - The custom email address for sending emails.
2614	CustomEmailAddresses *[]string `json:"customEmailAddresses,omitempty"`
2615	// Locale - The locale for the email notification.
2616	Locale *string `json:"locale,omitempty"`
2617}
2618
2619// ApplyRecoveryPointInput input to apply recovery point.
2620type ApplyRecoveryPointInput struct {
2621	// Properties - The input properties to apply recovery point.
2622	Properties *ApplyRecoveryPointInputProperties `json:"properties,omitempty"`
2623}
2624
2625// ApplyRecoveryPointInputProperties input properties to apply recovery point.
2626type ApplyRecoveryPointInputProperties struct {
2627	// RecoveryPointID - The recovery point Id.
2628	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
2629	// ProviderSpecificDetails - Provider specific input for applying recovery point.
2630	ProviderSpecificDetails BasicApplyRecoveryPointProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
2631}
2632
2633// UnmarshalJSON is the custom unmarshaler for ApplyRecoveryPointInputProperties struct.
2634func (arpip *ApplyRecoveryPointInputProperties) UnmarshalJSON(body []byte) error {
2635	var m map[string]*json.RawMessage
2636	err := json.Unmarshal(body, &m)
2637	if err != nil {
2638		return err
2639	}
2640	for k, v := range m {
2641		switch k {
2642		case "recoveryPointId":
2643			if v != nil {
2644				var recoveryPointID string
2645				err = json.Unmarshal(*v, &recoveryPointID)
2646				if err != nil {
2647					return err
2648				}
2649				arpip.RecoveryPointID = &recoveryPointID
2650			}
2651		case "providerSpecificDetails":
2652			if v != nil {
2653				providerSpecificDetails, err := unmarshalBasicApplyRecoveryPointProviderSpecificInput(*v)
2654				if err != nil {
2655					return err
2656				}
2657				arpip.ProviderSpecificDetails = providerSpecificDetails
2658			}
2659		}
2660	}
2661
2662	return nil
2663}
2664
2665// BasicApplyRecoveryPointProviderSpecificInput provider specific input for apply recovery point.
2666type BasicApplyRecoveryPointProviderSpecificInput interface {
2667	AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool)
2668	AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool)
2669	AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool)
2670	AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool)
2671	AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool)
2672}
2673
2674// ApplyRecoveryPointProviderSpecificInput provider specific input for apply recovery point.
2675type ApplyRecoveryPointProviderSpecificInput struct {
2676	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
2677	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
2678}
2679
2680func unmarshalBasicApplyRecoveryPointProviderSpecificInput(body []byte) (BasicApplyRecoveryPointProviderSpecificInput, error) {
2681	var m map[string]interface{}
2682	err := json.Unmarshal(body, &m)
2683	if err != nil {
2684		return nil, err
2685	}
2686
2687	switch m["instanceType"] {
2688	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A):
2689		var aarpi A2AApplyRecoveryPointInput
2690		err := json.Unmarshal(body, &aarpi)
2691		return aarpi, err
2692	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure):
2693		var hvraarpi HyperVReplicaAzureApplyRecoveryPointInput
2694		err := json.Unmarshal(body, &hvraarpi)
2695		return hvraarpi, err
2696	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2):
2697		var imavarpi InMageAzureV2ApplyRecoveryPointInput
2698		err := json.Unmarshal(body, &imavarpi)
2699		return imavarpi, err
2700	case string(InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm):
2701		var imrarpi InMageRcmApplyRecoveryPointInput
2702		err := json.Unmarshal(body, &imrarpi)
2703		return imrarpi, err
2704	default:
2705		var arppsi ApplyRecoveryPointProviderSpecificInput
2706		err := json.Unmarshal(body, &arppsi)
2707		return arppsi, err
2708	}
2709}
2710func unmarshalBasicApplyRecoveryPointProviderSpecificInputArray(body []byte) ([]BasicApplyRecoveryPointProviderSpecificInput, error) {
2711	var rawMessages []*json.RawMessage
2712	err := json.Unmarshal(body, &rawMessages)
2713	if err != nil {
2714		return nil, err
2715	}
2716
2717	arppsiArray := make([]BasicApplyRecoveryPointProviderSpecificInput, len(rawMessages))
2718
2719	for index, rawMessage := range rawMessages {
2720		arppsi, err := unmarshalBasicApplyRecoveryPointProviderSpecificInput(*rawMessage)
2721		if err != nil {
2722			return nil, err
2723		}
2724		arppsiArray[index] = arppsi
2725	}
2726	return arppsiArray, nil
2727}
2728
2729// MarshalJSON is the custom marshaler for ApplyRecoveryPointProviderSpecificInput.
2730func (arppsi ApplyRecoveryPointProviderSpecificInput) MarshalJSON() ([]byte, error) {
2731	arppsi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput
2732	objectMap := make(map[string]interface{})
2733	if arppsi.InstanceType != "" {
2734		objectMap["instanceType"] = arppsi.InstanceType
2735	}
2736	return json.Marshal(objectMap)
2737}
2738
2739// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2740func (arppsi ApplyRecoveryPointProviderSpecificInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
2741	return nil, false
2742}
2743
2744// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2745func (arppsi ApplyRecoveryPointProviderSpecificInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
2746	return nil, false
2747}
2748
2749// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2750func (arppsi ApplyRecoveryPointProviderSpecificInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
2751	return nil, false
2752}
2753
2754// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2755func (arppsi ApplyRecoveryPointProviderSpecificInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
2756	return nil, false
2757}
2758
2759// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2760func (arppsi ApplyRecoveryPointProviderSpecificInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
2761	return &arppsi, true
2762}
2763
2764// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for ApplyRecoveryPointProviderSpecificInput.
2765func (arppsi ApplyRecoveryPointProviderSpecificInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
2766	return &arppsi, true
2767}
2768
2769// AsrJobDetails this class represents job details based on specific job type.
2770type AsrJobDetails struct {
2771	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
2772	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
2773	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
2774	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
2775}
2776
2777// MarshalJSON is the custom marshaler for AsrJobDetails.
2778func (ajd AsrJobDetails) MarshalJSON() ([]byte, error) {
2779	ajd.InstanceType = InstanceTypeAsrJobDetails
2780	objectMap := make(map[string]interface{})
2781	if ajd.AffectedObjectDetails != nil {
2782		objectMap["affectedObjectDetails"] = ajd.AffectedObjectDetails
2783	}
2784	if ajd.InstanceType != "" {
2785		objectMap["instanceType"] = ajd.InstanceType
2786	}
2787	return json.Marshal(objectMap)
2788}
2789
2790// AsAsrJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2791func (ajd AsrJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
2792	return &ajd, true
2793}
2794
2795// AsExportJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2796func (ajd AsrJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
2797	return nil, false
2798}
2799
2800// AsFailoverJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2801func (ajd AsrJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
2802	return nil, false
2803}
2804
2805// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2806func (ajd AsrJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
2807	return nil, false
2808}
2809
2810// AsTestFailoverJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2811func (ajd AsrJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
2812	return nil, false
2813}
2814
2815// AsJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2816func (ajd AsrJobDetails) AsJobDetails() (*JobDetails, bool) {
2817	return nil, false
2818}
2819
2820// AsBasicJobDetails is the BasicJobDetails implementation for AsrJobDetails.
2821func (ajd AsrJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
2822	return &ajd, true
2823}
2824
2825// ASRTask task of the Job.
2826type ASRTask struct {
2827	// TaskID - The Id.
2828	TaskID *string `json:"taskId,omitempty"`
2829	// Name - The unique Task name.
2830	Name *string `json:"name,omitempty"`
2831	// StartTime - The start time.
2832	StartTime *date.Time `json:"startTime,omitempty"`
2833	// EndTime - The end time.
2834	EndTime *date.Time `json:"endTime,omitempty"`
2835	// AllowedActions - The state/actions applicable on this task.
2836	AllowedActions *[]string `json:"allowedActions,omitempty"`
2837	// FriendlyName - The name.
2838	FriendlyName *string `json:"friendlyName,omitempty"`
2839	// State - The State. It is one of these values - NotStarted, InProgress, Succeeded, Failed, Cancelled, Suspended or Other.
2840	State *string `json:"state,omitempty"`
2841	// StateDescription - The description of the task state. For example - For Succeeded state, description can be Completed, PartiallySucceeded, CompletedWithInformation or Skipped.
2842	StateDescription *string `json:"stateDescription,omitempty"`
2843	// TaskType - The type of task. Details in CustomDetails property depend on this type.
2844	TaskType *string `json:"taskType,omitempty"`
2845	// CustomDetails - The custom task details based on the task type.
2846	CustomDetails BasicTaskTypeDetails `json:"customDetails,omitempty"`
2847	// GroupTaskCustomDetails - The custom task details based on the task type, if the task type is GroupTaskDetails or one of the types derived from it.
2848	GroupTaskCustomDetails BasicGroupTaskDetails `json:"groupTaskCustomDetails,omitempty"`
2849	// Errors - The task error details.
2850	Errors *[]JobErrorDetails `json:"errors,omitempty"`
2851}
2852
2853// UnmarshalJSON is the custom unmarshaler for ASRTask struct.
2854func (at *ASRTask) UnmarshalJSON(body []byte) error {
2855	var m map[string]*json.RawMessage
2856	err := json.Unmarshal(body, &m)
2857	if err != nil {
2858		return err
2859	}
2860	for k, v := range m {
2861		switch k {
2862		case "taskId":
2863			if v != nil {
2864				var taskID string
2865				err = json.Unmarshal(*v, &taskID)
2866				if err != nil {
2867					return err
2868				}
2869				at.TaskID = &taskID
2870			}
2871		case "name":
2872			if v != nil {
2873				var name string
2874				err = json.Unmarshal(*v, &name)
2875				if err != nil {
2876					return err
2877				}
2878				at.Name = &name
2879			}
2880		case "startTime":
2881			if v != nil {
2882				var startTime date.Time
2883				err = json.Unmarshal(*v, &startTime)
2884				if err != nil {
2885					return err
2886				}
2887				at.StartTime = &startTime
2888			}
2889		case "endTime":
2890			if v != nil {
2891				var endTime date.Time
2892				err = json.Unmarshal(*v, &endTime)
2893				if err != nil {
2894					return err
2895				}
2896				at.EndTime = &endTime
2897			}
2898		case "allowedActions":
2899			if v != nil {
2900				var allowedActions []string
2901				err = json.Unmarshal(*v, &allowedActions)
2902				if err != nil {
2903					return err
2904				}
2905				at.AllowedActions = &allowedActions
2906			}
2907		case "friendlyName":
2908			if v != nil {
2909				var friendlyName string
2910				err = json.Unmarshal(*v, &friendlyName)
2911				if err != nil {
2912					return err
2913				}
2914				at.FriendlyName = &friendlyName
2915			}
2916		case "state":
2917			if v != nil {
2918				var state string
2919				err = json.Unmarshal(*v, &state)
2920				if err != nil {
2921					return err
2922				}
2923				at.State = &state
2924			}
2925		case "stateDescription":
2926			if v != nil {
2927				var stateDescription string
2928				err = json.Unmarshal(*v, &stateDescription)
2929				if err != nil {
2930					return err
2931				}
2932				at.StateDescription = &stateDescription
2933			}
2934		case "taskType":
2935			if v != nil {
2936				var taskType string
2937				err = json.Unmarshal(*v, &taskType)
2938				if err != nil {
2939					return err
2940				}
2941				at.TaskType = &taskType
2942			}
2943		case "customDetails":
2944			if v != nil {
2945				customDetails, err := unmarshalBasicTaskTypeDetails(*v)
2946				if err != nil {
2947					return err
2948				}
2949				at.CustomDetails = customDetails
2950			}
2951		case "groupTaskCustomDetails":
2952			if v != nil {
2953				groupTaskCustomDetails, err := unmarshalBasicGroupTaskDetails(*v)
2954				if err != nil {
2955					return err
2956				}
2957				at.GroupTaskCustomDetails = groupTaskCustomDetails
2958			}
2959		case "errors":
2960			if v != nil {
2961				var errorsVar []JobErrorDetails
2962				err = json.Unmarshal(*v, &errorsVar)
2963				if err != nil {
2964					return err
2965				}
2966				at.Errors = &errorsVar
2967			}
2968		}
2969	}
2970
2971	return nil
2972}
2973
2974// AutomationRunbookTaskDetails this class represents the task details for an automation runbook.
2975type AutomationRunbookTaskDetails struct {
2976	// Name - The recovery plan task name.
2977	Name *string `json:"name,omitempty"`
2978	// CloudServiceName - The cloud service of the automation runbook account.
2979	CloudServiceName *string `json:"cloudServiceName,omitempty"`
2980	// SubscriptionID - The subscription Id of the automation runbook account.
2981	SubscriptionID *string `json:"subscriptionId,omitempty"`
2982	// AccountName - The automation account name of the runbook.
2983	AccountName *string `json:"accountName,omitempty"`
2984	// RunbookID - The runbook Id.
2985	RunbookID *string `json:"runbookId,omitempty"`
2986	// RunbookName - The runbook name.
2987	RunbookName *string `json:"runbookName,omitempty"`
2988	// JobID - The job Id of the runbook execution.
2989	JobID *string `json:"jobId,omitempty"`
2990	// JobOutput - The execution output of the runbook.
2991	JobOutput *string `json:"jobOutput,omitempty"`
2992	// IsPrimarySideScript - A value indicating whether it is a primary side script or not.
2993	IsPrimarySideScript *bool `json:"isPrimarySideScript,omitempty"`
2994	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
2995	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
2996}
2997
2998// MarshalJSON is the custom marshaler for AutomationRunbookTaskDetails.
2999func (artd AutomationRunbookTaskDetails) MarshalJSON() ([]byte, error) {
3000	artd.InstanceType = InstanceTypeAutomationRunbookTaskDetails
3001	objectMap := make(map[string]interface{})
3002	if artd.Name != nil {
3003		objectMap["name"] = artd.Name
3004	}
3005	if artd.CloudServiceName != nil {
3006		objectMap["cloudServiceName"] = artd.CloudServiceName
3007	}
3008	if artd.SubscriptionID != nil {
3009		objectMap["subscriptionId"] = artd.SubscriptionID
3010	}
3011	if artd.AccountName != nil {
3012		objectMap["accountName"] = artd.AccountName
3013	}
3014	if artd.RunbookID != nil {
3015		objectMap["runbookId"] = artd.RunbookID
3016	}
3017	if artd.RunbookName != nil {
3018		objectMap["runbookName"] = artd.RunbookName
3019	}
3020	if artd.JobID != nil {
3021		objectMap["jobId"] = artd.JobID
3022	}
3023	if artd.JobOutput != nil {
3024		objectMap["jobOutput"] = artd.JobOutput
3025	}
3026	if artd.IsPrimarySideScript != nil {
3027		objectMap["isPrimarySideScript"] = artd.IsPrimarySideScript
3028	}
3029	if artd.InstanceType != "" {
3030		objectMap["instanceType"] = artd.InstanceType
3031	}
3032	return json.Marshal(objectMap)
3033}
3034
3035// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3036func (artd AutomationRunbookTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
3037	return &artd, true
3038}
3039
3040// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3041func (artd AutomationRunbookTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
3042	return nil, false
3043}
3044
3045// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3046func (artd AutomationRunbookTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
3047	return nil, false
3048}
3049
3050// AsJobTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3051func (artd AutomationRunbookTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
3052	return nil, false
3053}
3054
3055// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3056func (artd AutomationRunbookTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
3057	return nil, false
3058}
3059
3060// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3061func (artd AutomationRunbookTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
3062	return nil, false
3063}
3064
3065// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3066func (artd AutomationRunbookTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
3067	return nil, false
3068}
3069
3070// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3071func (artd AutomationRunbookTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
3072	return nil, false
3073}
3074
3075// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3076func (artd AutomationRunbookTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
3077	return nil, false
3078}
3079
3080// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for AutomationRunbookTaskDetails.
3081func (artd AutomationRunbookTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
3082	return &artd, true
3083}
3084
3085// AzureFabricCreationInput fabric provider specific settings.
3086type AzureFabricCreationInput struct {
3087	// Location - The Location.
3088	Location *string `json:"location,omitempty"`
3089	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
3090	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
3091}
3092
3093// MarshalJSON is the custom marshaler for AzureFabricCreationInput.
3094func (afci AzureFabricCreationInput) MarshalJSON() ([]byte, error) {
3095	afci.InstanceType = InstanceTypeAzure
3096	objectMap := make(map[string]interface{})
3097	if afci.Location != nil {
3098		objectMap["location"] = afci.Location
3099	}
3100	if afci.InstanceType != "" {
3101		objectMap["instanceType"] = afci.InstanceType
3102	}
3103	return json.Marshal(objectMap)
3104}
3105
3106// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3107func (afci AzureFabricCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
3108	return &afci, true
3109}
3110
3111// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3112func (afci AzureFabricCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
3113	return nil, false
3114}
3115
3116// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3117func (afci AzureFabricCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
3118	return nil, false
3119}
3120
3121// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3122func (afci AzureFabricCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
3123	return nil, false
3124}
3125
3126// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for AzureFabricCreationInput.
3127func (afci AzureFabricCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
3128	return &afci, true
3129}
3130
3131// AzureFabricSpecificDetails azure Fabric Specific Details.
3132type AzureFabricSpecificDetails struct {
3133	// Location - The Location for the Azure fabric.
3134	Location *string `json:"location,omitempty"`
3135	// ContainerIds - The container Ids for the Azure fabric.
3136	ContainerIds *[]string `json:"containerIds,omitempty"`
3137	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
3138	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
3139}
3140
3141// MarshalJSON is the custom marshaler for AzureFabricSpecificDetails.
3142func (afsd AzureFabricSpecificDetails) MarshalJSON() ([]byte, error) {
3143	afsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure
3144	objectMap := make(map[string]interface{})
3145	if afsd.Location != nil {
3146		objectMap["location"] = afsd.Location
3147	}
3148	if afsd.ContainerIds != nil {
3149		objectMap["containerIds"] = afsd.ContainerIds
3150	}
3151	if afsd.InstanceType != "" {
3152		objectMap["instanceType"] = afsd.InstanceType
3153	}
3154	return json.Marshal(objectMap)
3155}
3156
3157// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3158func (afsd AzureFabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
3159	return &afsd, true
3160}
3161
3162// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3163func (afsd AzureFabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
3164	return nil, false
3165}
3166
3167// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3168func (afsd AzureFabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
3169	return nil, false
3170}
3171
3172// AsVmmDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3173func (afsd AzureFabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
3174	return nil, false
3175}
3176
3177// AsVMwareDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3178func (afsd AzureFabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
3179	return nil, false
3180}
3181
3182// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3183func (afsd AzureFabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
3184	return nil, false
3185}
3186
3187// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3188func (afsd AzureFabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
3189	return nil, false
3190}
3191
3192// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for AzureFabricSpecificDetails.
3193func (afsd AzureFabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
3194	return &afsd, true
3195}
3196
3197// AzureToAzureCreateNetworkMappingInput create network mappings input properties/behavior specific to
3198// Azure to Azure Network mapping.
3199type AzureToAzureCreateNetworkMappingInput struct {
3200	// PrimaryNetworkID - The primary azure vnet Id.
3201	PrimaryNetworkID *string `json:"primaryNetworkId,omitempty"`
3202	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
3203	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
3204}
3205
3206// MarshalJSON is the custom marshaler for AzureToAzureCreateNetworkMappingInput.
3207func (atacnmi AzureToAzureCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
3208	atacnmi.InstanceType = InstanceTypeAzureToAzure
3209	objectMap := make(map[string]interface{})
3210	if atacnmi.PrimaryNetworkID != nil {
3211		objectMap["primaryNetworkId"] = atacnmi.PrimaryNetworkID
3212	}
3213	if atacnmi.InstanceType != "" {
3214		objectMap["instanceType"] = atacnmi.InstanceType
3215	}
3216	return json.Marshal(objectMap)
3217}
3218
3219// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3220func (atacnmi AzureToAzureCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
3221	return &atacnmi, true
3222}
3223
3224// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3225func (atacnmi AzureToAzureCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
3226	return nil, false
3227}
3228
3229// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3230func (atacnmi AzureToAzureCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
3231	return nil, false
3232}
3233
3234// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3235func (atacnmi AzureToAzureCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
3236	return nil, false
3237}
3238
3239// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for AzureToAzureCreateNetworkMappingInput.
3240func (atacnmi AzureToAzureCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
3241	return &atacnmi, true
3242}
3243
3244// AzureToAzureNetworkMappingSettings a2A Network Mapping fabric specific settings.
3245type AzureToAzureNetworkMappingSettings struct {
3246	// PrimaryFabricLocation - The primary fabric location.
3247	PrimaryFabricLocation *string `json:"primaryFabricLocation,omitempty"`
3248	// RecoveryFabricLocation - The recovery fabric location.
3249	RecoveryFabricLocation *string `json:"recoveryFabricLocation,omitempty"`
3250	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
3251	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
3252}
3253
3254// MarshalJSON is the custom marshaler for AzureToAzureNetworkMappingSettings.
3255func (atanms AzureToAzureNetworkMappingSettings) MarshalJSON() ([]byte, error) {
3256	atanms.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure
3257	objectMap := make(map[string]interface{})
3258	if atanms.PrimaryFabricLocation != nil {
3259		objectMap["primaryFabricLocation"] = atanms.PrimaryFabricLocation
3260	}
3261	if atanms.RecoveryFabricLocation != nil {
3262		objectMap["recoveryFabricLocation"] = atanms.RecoveryFabricLocation
3263	}
3264	if atanms.InstanceType != "" {
3265		objectMap["instanceType"] = atanms.InstanceType
3266	}
3267	return json.Marshal(objectMap)
3268}
3269
3270// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3271func (atanms AzureToAzureNetworkMappingSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
3272	return &atanms, true
3273}
3274
3275// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3276func (atanms AzureToAzureNetworkMappingSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
3277	return nil, false
3278}
3279
3280// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3281func (atanms AzureToAzureNetworkMappingSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
3282	return nil, false
3283}
3284
3285// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3286func (atanms AzureToAzureNetworkMappingSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
3287	return nil, false
3288}
3289
3290// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for AzureToAzureNetworkMappingSettings.
3291func (atanms AzureToAzureNetworkMappingSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
3292	return &atanms, true
3293}
3294
3295// AzureToAzureUpdateNetworkMappingInput updates network mappings input.
3296type AzureToAzureUpdateNetworkMappingInput struct {
3297	// PrimaryNetworkID - The primary azure vnet Id.
3298	PrimaryNetworkID *string `json:"primaryNetworkId,omitempty"`
3299	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
3300	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
3301}
3302
3303// MarshalJSON is the custom marshaler for AzureToAzureUpdateNetworkMappingInput.
3304func (ataunmi AzureToAzureUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
3305	ataunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure
3306	objectMap := make(map[string]interface{})
3307	if ataunmi.PrimaryNetworkID != nil {
3308		objectMap["primaryNetworkId"] = ataunmi.PrimaryNetworkID
3309	}
3310	if ataunmi.InstanceType != "" {
3311		objectMap["instanceType"] = ataunmi.InstanceType
3312	}
3313	return json.Marshal(objectMap)
3314}
3315
3316// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3317func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
3318	return &ataunmi, true
3319}
3320
3321// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3322func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
3323	return nil, false
3324}
3325
3326// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3327func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
3328	return nil, false
3329}
3330
3331// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3332func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
3333	return nil, false
3334}
3335
3336// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for AzureToAzureUpdateNetworkMappingInput.
3337func (ataunmi AzureToAzureUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
3338	return &ataunmi, true
3339}
3340
3341// AzureToAzureVMSyncedConfigDetails azure to Azure VM synced configuration details.
3342type AzureToAzureVMSyncedConfigDetails struct {
3343	// Tags - The Azure VM tags.
3344	Tags map[string]*string `json:"tags"`
3345	// InputEndpoints - The Azure VM input endpoints.
3346	InputEndpoints *[]InputEndpoint `json:"inputEndpoints,omitempty"`
3347}
3348
3349// MarshalJSON is the custom marshaler for AzureToAzureVMSyncedConfigDetails.
3350func (atavscd AzureToAzureVMSyncedConfigDetails) MarshalJSON() ([]byte, error) {
3351	objectMap := make(map[string]interface{})
3352	if atavscd.Tags != nil {
3353		objectMap["tags"] = atavscd.Tags
3354	}
3355	if atavscd.InputEndpoints != nil {
3356		objectMap["inputEndpoints"] = atavscd.InputEndpoints
3357	}
3358	return json.Marshal(objectMap)
3359}
3360
3361// AzureVMDiskDetails disk details for E2A provider.
3362type AzureVMDiskDetails struct {
3363	// VhdType - VHD type.
3364	VhdType *string `json:"vhdType,omitempty"`
3365	// VhdID - The VHD id.
3366	VhdID *string `json:"vhdId,omitempty"`
3367	// DiskID - The disk resource id.
3368	DiskID *string `json:"diskId,omitempty"`
3369	// VhdName - VHD name.
3370	VhdName *string `json:"vhdName,omitempty"`
3371	// MaxSizeMB - Max side in MB.
3372	MaxSizeMB *string `json:"maxSizeMB,omitempty"`
3373	// TargetDiskLocation - Blob uri of the Azure disk.
3374	TargetDiskLocation *string `json:"targetDiskLocation,omitempty"`
3375	// TargetDiskName - The target Azure disk name.
3376	TargetDiskName *string `json:"targetDiskName,omitempty"`
3377	// LunID - Ordinal\LunId of the disk for the Azure VM.
3378	LunID *string `json:"lunId,omitempty"`
3379	// DiskEncryptionSetID - The DiskEncryptionSet ARM ID.
3380	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
3381}
3382
3383// ComputeSizeErrorDetails represents the error used to indicate why the target compute size is not
3384// applicable.
3385type ComputeSizeErrorDetails struct {
3386	// Message - The error message.
3387	Message *string `json:"message,omitempty"`
3388	// Severity - The severity of the error.
3389	Severity *string `json:"severity,omitempty"`
3390}
3391
3392// BasicConfigurationSettings replication provider specific settings.
3393type BasicConfigurationSettings interface {
3394	AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool)
3395	AsReplicationGroupDetails() (*ReplicationGroupDetails, bool)
3396	AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool)
3397	AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool)
3398	AsConfigurationSettings() (*ConfigurationSettings, bool)
3399}
3400
3401// ConfigurationSettings replication provider specific settings.
3402type ConfigurationSettings struct {
3403	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
3404	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
3405}
3406
3407func unmarshalBasicConfigurationSettings(body []byte) (BasicConfigurationSettings, error) {
3408	var m map[string]interface{}
3409	err := json.Unmarshal(body, &m)
3410	if err != nil {
3411		return nil, err
3412	}
3413
3414	switch m["instanceType"] {
3415	case string(InstanceTypeHyperVVirtualMachine):
3416		var hvvmd HyperVVirtualMachineDetails
3417		err := json.Unmarshal(body, &hvvmd)
3418		return hvvmd, err
3419	case string(InstanceTypeReplicationGroupDetails):
3420		var rgd ReplicationGroupDetails
3421		err := json.Unmarshal(body, &rgd)
3422		return rgd, err
3423	case string(InstanceTypeVmmVirtualMachine):
3424		var vvmd VmmVirtualMachineDetails
3425		err := json.Unmarshal(body, &vvmd)
3426		return vvmd, err
3427	case string(InstanceTypeVMwareVirtualMachine):
3428		var vmvmd VMwareVirtualMachineDetails
3429		err := json.Unmarshal(body, &vmvmd)
3430		return vmvmd, err
3431	default:
3432		var cs ConfigurationSettings
3433		err := json.Unmarshal(body, &cs)
3434		return cs, err
3435	}
3436}
3437func unmarshalBasicConfigurationSettingsArray(body []byte) ([]BasicConfigurationSettings, error) {
3438	var rawMessages []*json.RawMessage
3439	err := json.Unmarshal(body, &rawMessages)
3440	if err != nil {
3441		return nil, err
3442	}
3443
3444	csArray := make([]BasicConfigurationSettings, len(rawMessages))
3445
3446	for index, rawMessage := range rawMessages {
3447		cs, err := unmarshalBasicConfigurationSettings(*rawMessage)
3448		if err != nil {
3449			return nil, err
3450		}
3451		csArray[index] = cs
3452	}
3453	return csArray, nil
3454}
3455
3456// MarshalJSON is the custom marshaler for ConfigurationSettings.
3457func (cs ConfigurationSettings) MarshalJSON() ([]byte, error) {
3458	cs.InstanceType = InstanceTypeConfigurationSettings
3459	objectMap := make(map[string]interface{})
3460	if cs.InstanceType != "" {
3461		objectMap["instanceType"] = cs.InstanceType
3462	}
3463	return json.Marshal(objectMap)
3464}
3465
3466// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3467func (cs ConfigurationSettings) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
3468	return nil, false
3469}
3470
3471// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3472func (cs ConfigurationSettings) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
3473	return nil, false
3474}
3475
3476// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3477func (cs ConfigurationSettings) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
3478	return nil, false
3479}
3480
3481// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for ConfigurationSettings.
3482func (cs ConfigurationSettings) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
3483	return nil, false
3484}
3485
3486// AsConfigurationSettings is the BasicConfigurationSettings implementation for ConfigurationSettings.
3487func (cs ConfigurationSettings) AsConfigurationSettings() (*ConfigurationSettings, bool) {
3488	return &cs, true
3489}
3490
3491// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for ConfigurationSettings.
3492func (cs ConfigurationSettings) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
3493	return &cs, true
3494}
3495
3496// ConfigureAlertRequest request to configure alerts for the system.
3497type ConfigureAlertRequest struct {
3498	// Properties - The properties of a configure alert request.
3499	Properties *ConfigureAlertRequestProperties `json:"properties,omitempty"`
3500}
3501
3502// ConfigureAlertRequestProperties properties of a configure alert request.
3503type ConfigureAlertRequestProperties struct {
3504	// SendToOwners - A value indicating whether to send email to subscription administrator.
3505	SendToOwners *string `json:"sendToOwners,omitempty"`
3506	// CustomEmailAddresses - The custom email address for sending emails.
3507	CustomEmailAddresses *[]string `json:"customEmailAddresses,omitempty"`
3508	// Locale - The locale for the email notification.
3509	Locale *string `json:"locale,omitempty"`
3510}
3511
3512// ConsistencyCheckTaskDetails this class contains monitoring details of all the inconsistent Protected
3513// Entities in Vmm.
3514type ConsistencyCheckTaskDetails struct {
3515	// VMDetails - The list of inconsistent Vm details.
3516	VMDetails *[]InconsistentVMDetails `json:"vmDetails,omitempty"`
3517	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
3518	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
3519}
3520
3521// MarshalJSON is the custom marshaler for ConsistencyCheckTaskDetails.
3522func (cctd ConsistencyCheckTaskDetails) MarshalJSON() ([]byte, error) {
3523	cctd.InstanceType = InstanceTypeConsistencyCheckTaskDetails
3524	objectMap := make(map[string]interface{})
3525	if cctd.VMDetails != nil {
3526		objectMap["vmDetails"] = cctd.VMDetails
3527	}
3528	if cctd.InstanceType != "" {
3529		objectMap["instanceType"] = cctd.InstanceType
3530	}
3531	return json.Marshal(objectMap)
3532}
3533
3534// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3535func (cctd ConsistencyCheckTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
3536	return nil, false
3537}
3538
3539// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3540func (cctd ConsistencyCheckTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
3541	return &cctd, true
3542}
3543
3544// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3545func (cctd ConsistencyCheckTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
3546	return nil, false
3547}
3548
3549// AsJobTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3550func (cctd ConsistencyCheckTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
3551	return nil, false
3552}
3553
3554// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3555func (cctd ConsistencyCheckTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
3556	return nil, false
3557}
3558
3559// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3560func (cctd ConsistencyCheckTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
3561	return nil, false
3562}
3563
3564// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3565func (cctd ConsistencyCheckTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
3566	return nil, false
3567}
3568
3569// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3570func (cctd ConsistencyCheckTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
3571	return nil, false
3572}
3573
3574// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3575func (cctd ConsistencyCheckTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
3576	return nil, false
3577}
3578
3579// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for ConsistencyCheckTaskDetails.
3580func (cctd ConsistencyCheckTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
3581	return &cctd, true
3582}
3583
3584// CreateNetworkMappingInput create network mappings input.
3585type CreateNetworkMappingInput struct {
3586	// Properties - Input properties for creating network mapping.
3587	Properties *CreateNetworkMappingInputProperties `json:"properties,omitempty"`
3588}
3589
3590// CreateNetworkMappingInputProperties common input details for network mapping operation.
3591type CreateNetworkMappingInputProperties struct {
3592	// RecoveryFabricName - Recovery fabric Name.
3593	RecoveryFabricName *string `json:"recoveryFabricName,omitempty"`
3594	// RecoveryNetworkID - Recovery network Id.
3595	RecoveryNetworkID *string `json:"recoveryNetworkId,omitempty"`
3596	// FabricSpecificDetails - Fabric specific input properties.
3597	FabricSpecificDetails BasicFabricSpecificCreateNetworkMappingInput `json:"fabricSpecificDetails,omitempty"`
3598}
3599
3600// UnmarshalJSON is the custom unmarshaler for CreateNetworkMappingInputProperties struct.
3601func (cnmip *CreateNetworkMappingInputProperties) UnmarshalJSON(body []byte) error {
3602	var m map[string]*json.RawMessage
3603	err := json.Unmarshal(body, &m)
3604	if err != nil {
3605		return err
3606	}
3607	for k, v := range m {
3608		switch k {
3609		case "recoveryFabricName":
3610			if v != nil {
3611				var recoveryFabricName string
3612				err = json.Unmarshal(*v, &recoveryFabricName)
3613				if err != nil {
3614					return err
3615				}
3616				cnmip.RecoveryFabricName = &recoveryFabricName
3617			}
3618		case "recoveryNetworkId":
3619			if v != nil {
3620				var recoveryNetworkID string
3621				err = json.Unmarshal(*v, &recoveryNetworkID)
3622				if err != nil {
3623					return err
3624				}
3625				cnmip.RecoveryNetworkID = &recoveryNetworkID
3626			}
3627		case "fabricSpecificDetails":
3628			if v != nil {
3629				fabricSpecificDetails, err := unmarshalBasicFabricSpecificCreateNetworkMappingInput(*v)
3630				if err != nil {
3631					return err
3632				}
3633				cnmip.FabricSpecificDetails = fabricSpecificDetails
3634			}
3635		}
3636	}
3637
3638	return nil
3639}
3640
3641// CreatePolicyInput protection Policy input.
3642type CreatePolicyInput struct {
3643	// Properties - Policy creation properties.
3644	Properties *CreatePolicyInputProperties `json:"properties,omitempty"`
3645}
3646
3647// CreatePolicyInputProperties policy creation properties.
3648type CreatePolicyInputProperties struct {
3649	// ProviderSpecificInput - The ReplicationProviderSettings.
3650	ProviderSpecificInput BasicPolicyProviderSpecificInput `json:"providerSpecificInput,omitempty"`
3651}
3652
3653// UnmarshalJSON is the custom unmarshaler for CreatePolicyInputProperties struct.
3654func (cpip *CreatePolicyInputProperties) UnmarshalJSON(body []byte) error {
3655	var m map[string]*json.RawMessage
3656	err := json.Unmarshal(body, &m)
3657	if err != nil {
3658		return err
3659	}
3660	for k, v := range m {
3661		switch k {
3662		case "providerSpecificInput":
3663			if v != nil {
3664				providerSpecificInput, err := unmarshalBasicPolicyProviderSpecificInput(*v)
3665				if err != nil {
3666					return err
3667				}
3668				cpip.ProviderSpecificInput = providerSpecificInput
3669			}
3670		}
3671	}
3672
3673	return nil
3674}
3675
3676// CreateProtectionContainerInput create protection container input.
3677type CreateProtectionContainerInput struct {
3678	// Properties - Create protection container input properties.
3679	Properties *CreateProtectionContainerInputProperties `json:"properties,omitempty"`
3680}
3681
3682// CreateProtectionContainerInputProperties create protection container input properties.
3683type CreateProtectionContainerInputProperties struct {
3684	// ProviderSpecificInput - Provider specific inputs for container creation.
3685	ProviderSpecificInput *[]BasicReplicationProviderSpecificContainerCreationInput `json:"providerSpecificInput,omitempty"`
3686}
3687
3688// UnmarshalJSON is the custom unmarshaler for CreateProtectionContainerInputProperties struct.
3689func (cpcip *CreateProtectionContainerInputProperties) UnmarshalJSON(body []byte) error {
3690	var m map[string]*json.RawMessage
3691	err := json.Unmarshal(body, &m)
3692	if err != nil {
3693		return err
3694	}
3695	for k, v := range m {
3696		switch k {
3697		case "providerSpecificInput":
3698			if v != nil {
3699				providerSpecificInput, err := unmarshalBasicReplicationProviderSpecificContainerCreationInputArray(*v)
3700				if err != nil {
3701					return err
3702				}
3703				cpcip.ProviderSpecificInput = &providerSpecificInput
3704			}
3705		}
3706	}
3707
3708	return nil
3709}
3710
3711// CreateProtectionContainerMappingInput configure pairing input.
3712type CreateProtectionContainerMappingInput struct {
3713	// Properties - Configure protection input properties.
3714	Properties *CreateProtectionContainerMappingInputProperties `json:"properties,omitempty"`
3715}
3716
3717// CreateProtectionContainerMappingInputProperties configure pairing input properties.
3718type CreateProtectionContainerMappingInputProperties struct {
3719	// TargetProtectionContainerID - The target unique protection container name.
3720	TargetProtectionContainerID *string `json:"targetProtectionContainerId,omitempty"`
3721	// PolicyID - Applicable policy.
3722	PolicyID *string `json:"policyId,omitempty"`
3723	// ProviderSpecificInput - Provider specific input for pairing.
3724	ProviderSpecificInput BasicReplicationProviderSpecificContainerMappingInput `json:"providerSpecificInput,omitempty"`
3725}
3726
3727// UnmarshalJSON is the custom unmarshaler for CreateProtectionContainerMappingInputProperties struct.
3728func (cpcmip *CreateProtectionContainerMappingInputProperties) UnmarshalJSON(body []byte) error {
3729	var m map[string]*json.RawMessage
3730	err := json.Unmarshal(body, &m)
3731	if err != nil {
3732		return err
3733	}
3734	for k, v := range m {
3735		switch k {
3736		case "targetProtectionContainerId":
3737			if v != nil {
3738				var targetProtectionContainerID string
3739				err = json.Unmarshal(*v, &targetProtectionContainerID)
3740				if err != nil {
3741					return err
3742				}
3743				cpcmip.TargetProtectionContainerID = &targetProtectionContainerID
3744			}
3745		case "policyId":
3746			if v != nil {
3747				var policyID string
3748				err = json.Unmarshal(*v, &policyID)
3749				if err != nil {
3750					return err
3751				}
3752				cpcmip.PolicyID = &policyID
3753			}
3754		case "providerSpecificInput":
3755			if v != nil {
3756				providerSpecificInput, err := unmarshalBasicReplicationProviderSpecificContainerMappingInput(*v)
3757				if err != nil {
3758					return err
3759				}
3760				cpcmip.ProviderSpecificInput = providerSpecificInput
3761			}
3762		}
3763	}
3764
3765	return nil
3766}
3767
3768// CreateProtectionIntentInput create protection intent input.
3769type CreateProtectionIntentInput struct {
3770	// Properties - Create protection intent input properties.
3771	Properties *CreateProtectionIntentProperties `json:"properties,omitempty"`
3772}
3773
3774// CreateProtectionIntentProperties create protection intent input properties.
3775type CreateProtectionIntentProperties struct {
3776	// ProviderSpecificDetails - The ReplicationProviderInput. For A2A provider, it will be A2ACreateProtectionIntentInput object. For other providers, it can be null.
3777	ProviderSpecificDetails BasicCreateProtectionIntentProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
3778}
3779
3780// UnmarshalJSON is the custom unmarshaler for CreateProtectionIntentProperties struct.
3781func (cpip *CreateProtectionIntentProperties) UnmarshalJSON(body []byte) error {
3782	var m map[string]*json.RawMessage
3783	err := json.Unmarshal(body, &m)
3784	if err != nil {
3785		return err
3786	}
3787	for k, v := range m {
3788		switch k {
3789		case "providerSpecificDetails":
3790			if v != nil {
3791				providerSpecificDetails, err := unmarshalBasicCreateProtectionIntentProviderSpecificDetails(*v)
3792				if err != nil {
3793					return err
3794				}
3795				cpip.ProviderSpecificDetails = providerSpecificDetails
3796			}
3797		}
3798	}
3799
3800	return nil
3801}
3802
3803// BasicCreateProtectionIntentProviderSpecificDetails create protection intent provider specific input.
3804type BasicCreateProtectionIntentProviderSpecificDetails interface {
3805	AsA2ACreateProtectionIntentInput() (*A2ACreateProtectionIntentInput, bool)
3806	AsCreateProtectionIntentProviderSpecificDetails() (*CreateProtectionIntentProviderSpecificDetails, bool)
3807}
3808
3809// CreateProtectionIntentProviderSpecificDetails create protection intent provider specific input.
3810type CreateProtectionIntentProviderSpecificDetails struct {
3811	// InstanceType - Possible values include: 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeCreateProtectionIntentProviderSpecificDetails', 'InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A'
3812	InstanceType InstanceTypeBasicCreateProtectionIntentProviderSpecificDetails `json:"instanceType,omitempty"`
3813}
3814
3815func unmarshalBasicCreateProtectionIntentProviderSpecificDetails(body []byte) (BasicCreateProtectionIntentProviderSpecificDetails, error) {
3816	var m map[string]interface{}
3817	err := json.Unmarshal(body, &m)
3818	if err != nil {
3819		return nil, err
3820	}
3821
3822	switch m["instanceType"] {
3823	case string(InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeA2A):
3824		var acpii A2ACreateProtectionIntentInput
3825		err := json.Unmarshal(body, &acpii)
3826		return acpii, err
3827	default:
3828		var cpipsd CreateProtectionIntentProviderSpecificDetails
3829		err := json.Unmarshal(body, &cpipsd)
3830		return cpipsd, err
3831	}
3832}
3833func unmarshalBasicCreateProtectionIntentProviderSpecificDetailsArray(body []byte) ([]BasicCreateProtectionIntentProviderSpecificDetails, error) {
3834	var rawMessages []*json.RawMessage
3835	err := json.Unmarshal(body, &rawMessages)
3836	if err != nil {
3837		return nil, err
3838	}
3839
3840	cpipsdArray := make([]BasicCreateProtectionIntentProviderSpecificDetails, len(rawMessages))
3841
3842	for index, rawMessage := range rawMessages {
3843		cpipsd, err := unmarshalBasicCreateProtectionIntentProviderSpecificDetails(*rawMessage)
3844		if err != nil {
3845			return nil, err
3846		}
3847		cpipsdArray[index] = cpipsd
3848	}
3849	return cpipsdArray, nil
3850}
3851
3852// MarshalJSON is the custom marshaler for CreateProtectionIntentProviderSpecificDetails.
3853func (cpipsd CreateProtectionIntentProviderSpecificDetails) MarshalJSON() ([]byte, error) {
3854	cpipsd.InstanceType = InstanceTypeBasicCreateProtectionIntentProviderSpecificDetailsInstanceTypeCreateProtectionIntentProviderSpecificDetails
3855	objectMap := make(map[string]interface{})
3856	if cpipsd.InstanceType != "" {
3857		objectMap["instanceType"] = cpipsd.InstanceType
3858	}
3859	return json.Marshal(objectMap)
3860}
3861
3862// AsA2ACreateProtectionIntentInput is the BasicCreateProtectionIntentProviderSpecificDetails implementation for CreateProtectionIntentProviderSpecificDetails.
3863func (cpipsd CreateProtectionIntentProviderSpecificDetails) AsA2ACreateProtectionIntentInput() (*A2ACreateProtectionIntentInput, bool) {
3864	return nil, false
3865}
3866
3867// AsCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for CreateProtectionIntentProviderSpecificDetails.
3868func (cpipsd CreateProtectionIntentProviderSpecificDetails) AsCreateProtectionIntentProviderSpecificDetails() (*CreateProtectionIntentProviderSpecificDetails, bool) {
3869	return &cpipsd, true
3870}
3871
3872// AsBasicCreateProtectionIntentProviderSpecificDetails is the BasicCreateProtectionIntentProviderSpecificDetails implementation for CreateProtectionIntentProviderSpecificDetails.
3873func (cpipsd CreateProtectionIntentProviderSpecificDetails) AsBasicCreateProtectionIntentProviderSpecificDetails() (BasicCreateProtectionIntentProviderSpecificDetails, bool) {
3874	return &cpipsd, true
3875}
3876
3877// CreateRecoveryPlanInput create recovery plan input class.
3878type CreateRecoveryPlanInput struct {
3879	// Properties - Recovery plan creation properties.
3880	Properties *CreateRecoveryPlanInputProperties `json:"properties,omitempty"`
3881}
3882
3883// CreateRecoveryPlanInputProperties recovery plan creation properties.
3884type CreateRecoveryPlanInputProperties struct {
3885	// PrimaryFabricID - The primary fabric Id.
3886	PrimaryFabricID *string `json:"primaryFabricId,omitempty"`
3887	// RecoveryFabricID - The recovery fabric Id.
3888	RecoveryFabricID *string `json:"recoveryFabricId,omitempty"`
3889	// FailoverDeploymentModel - The failover deployment model. Possible values include: 'NotApplicable', 'Classic', 'ResourceManager'
3890	FailoverDeploymentModel FailoverDeploymentModel `json:"failoverDeploymentModel,omitempty"`
3891	// Groups - The recovery plan groups.
3892	Groups *[]RecoveryPlanGroup `json:"groups,omitempty"`
3893	// ProviderSpecificInput - The provider specific input.
3894	ProviderSpecificInput *[]BasicRecoveryPlanProviderSpecificInput `json:"providerSpecificInput,omitempty"`
3895}
3896
3897// UnmarshalJSON is the custom unmarshaler for CreateRecoveryPlanInputProperties struct.
3898func (crpip *CreateRecoveryPlanInputProperties) UnmarshalJSON(body []byte) error {
3899	var m map[string]*json.RawMessage
3900	err := json.Unmarshal(body, &m)
3901	if err != nil {
3902		return err
3903	}
3904	for k, v := range m {
3905		switch k {
3906		case "primaryFabricId":
3907			if v != nil {
3908				var primaryFabricID string
3909				err = json.Unmarshal(*v, &primaryFabricID)
3910				if err != nil {
3911					return err
3912				}
3913				crpip.PrimaryFabricID = &primaryFabricID
3914			}
3915		case "recoveryFabricId":
3916			if v != nil {
3917				var recoveryFabricID string
3918				err = json.Unmarshal(*v, &recoveryFabricID)
3919				if err != nil {
3920					return err
3921				}
3922				crpip.RecoveryFabricID = &recoveryFabricID
3923			}
3924		case "failoverDeploymentModel":
3925			if v != nil {
3926				var failoverDeploymentModel FailoverDeploymentModel
3927				err = json.Unmarshal(*v, &failoverDeploymentModel)
3928				if err != nil {
3929					return err
3930				}
3931				crpip.FailoverDeploymentModel = failoverDeploymentModel
3932			}
3933		case "groups":
3934			if v != nil {
3935				var groups []RecoveryPlanGroup
3936				err = json.Unmarshal(*v, &groups)
3937				if err != nil {
3938					return err
3939				}
3940				crpip.Groups = &groups
3941			}
3942		case "providerSpecificInput":
3943			if v != nil {
3944				providerSpecificInput, err := unmarshalBasicRecoveryPlanProviderSpecificInputArray(*v)
3945				if err != nil {
3946					return err
3947				}
3948				crpip.ProviderSpecificInput = &providerSpecificInput
3949			}
3950		}
3951	}
3952
3953	return nil
3954}
3955
3956// CurrentJobDetails current job details of the migration item.
3957type CurrentJobDetails struct {
3958	// JobName - The job name.
3959	JobName *string `json:"jobName,omitempty"`
3960	// JobID - The ARM Id of the job being executed.
3961	JobID *string `json:"jobId,omitempty"`
3962	// StartTime - The start time of the job.
3963	StartTime *date.Time `json:"startTime,omitempty"`
3964}
3965
3966// CurrentScenarioDetails current scenario details of the protected entity.
3967type CurrentScenarioDetails struct {
3968	// ScenarioName - Scenario name.
3969	ScenarioName *string `json:"scenarioName,omitempty"`
3970	// JobID - ARM Id of the job being executed.
3971	JobID *string `json:"jobId,omitempty"`
3972	// StartTime - Start time of the workflow.
3973	StartTime *date.Time `json:"startTime,omitempty"`
3974}
3975
3976// DataStore the data store details of the MT.
3977type DataStore struct {
3978	// SymbolicName - The symbolic name of data store.
3979	SymbolicName *string `json:"symbolicName,omitempty"`
3980	// UUID - The uuid of data store.
3981	UUID *string `json:"uuid,omitempty"`
3982	// Capacity - The capacity of data store in GBs.
3983	Capacity *string `json:"capacity,omitempty"`
3984	// FreeSpace - The free space of data store in GBs.
3985	FreeSpace *string `json:"freeSpace,omitempty"`
3986	// Type - The type of data store.
3987	Type *string `json:"type,omitempty"`
3988}
3989
3990// DisableProtectionInput disable protection input.
3991type DisableProtectionInput struct {
3992	// Properties - Disable protection input properties.
3993	Properties *DisableProtectionInputProperties `json:"properties,omitempty"`
3994}
3995
3996// DisableProtectionInputProperties disable protection input properties.
3997type DisableProtectionInputProperties struct {
3998	// DisableProtectionReason - Disable protection reason. It can have values NotSpecified/MigrationComplete. Possible values include: 'NotSpecified', 'MigrationComplete'
3999	DisableProtectionReason DisableProtectionReason `json:"disableProtectionReason,omitempty"`
4000	// ReplicationProviderInput - Replication provider specific input.
4001	ReplicationProviderInput BasicDisableProtectionProviderSpecificInput `json:"replicationProviderInput,omitempty"`
4002}
4003
4004// UnmarshalJSON is the custom unmarshaler for DisableProtectionInputProperties struct.
4005func (dpip *DisableProtectionInputProperties) UnmarshalJSON(body []byte) error {
4006	var m map[string]*json.RawMessage
4007	err := json.Unmarshal(body, &m)
4008	if err != nil {
4009		return err
4010	}
4011	for k, v := range m {
4012		switch k {
4013		case "disableProtectionReason":
4014			if v != nil {
4015				var disableProtectionReason DisableProtectionReason
4016				err = json.Unmarshal(*v, &disableProtectionReason)
4017				if err != nil {
4018					return err
4019				}
4020				dpip.DisableProtectionReason = disableProtectionReason
4021			}
4022		case "replicationProviderInput":
4023			if v != nil {
4024				replicationProviderInput, err := unmarshalBasicDisableProtectionProviderSpecificInput(*v)
4025				if err != nil {
4026					return err
4027				}
4028				dpip.ReplicationProviderInput = replicationProviderInput
4029			}
4030		}
4031	}
4032
4033	return nil
4034}
4035
4036// BasicDisableProtectionProviderSpecificInput disable protection provider specific input.
4037type BasicDisableProtectionProviderSpecificInput interface {
4038	AsInMageDisableProtectionProviderSpecificInput() (*InMageDisableProtectionProviderSpecificInput, bool)
4039	AsDisableProtectionProviderSpecificInput() (*DisableProtectionProviderSpecificInput, bool)
4040}
4041
4042// DisableProtectionProviderSpecificInput disable protection provider specific input.
4043type DisableProtectionProviderSpecificInput struct {
4044	// InstanceType - Possible values include: 'InstanceTypeDisableProtectionProviderSpecificInput', 'InstanceTypeInMage'
4045	InstanceType InstanceTypeBasicDisableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
4046}
4047
4048func unmarshalBasicDisableProtectionProviderSpecificInput(body []byte) (BasicDisableProtectionProviderSpecificInput, error) {
4049	var m map[string]interface{}
4050	err := json.Unmarshal(body, &m)
4051	if err != nil {
4052		return nil, err
4053	}
4054
4055	switch m["instanceType"] {
4056	case string(InstanceTypeInMage):
4057		var imdppsi InMageDisableProtectionProviderSpecificInput
4058		err := json.Unmarshal(body, &imdppsi)
4059		return imdppsi, err
4060	default:
4061		var dppsi DisableProtectionProviderSpecificInput
4062		err := json.Unmarshal(body, &dppsi)
4063		return dppsi, err
4064	}
4065}
4066func unmarshalBasicDisableProtectionProviderSpecificInputArray(body []byte) ([]BasicDisableProtectionProviderSpecificInput, error) {
4067	var rawMessages []*json.RawMessage
4068	err := json.Unmarshal(body, &rawMessages)
4069	if err != nil {
4070		return nil, err
4071	}
4072
4073	dppsiArray := make([]BasicDisableProtectionProviderSpecificInput, len(rawMessages))
4074
4075	for index, rawMessage := range rawMessages {
4076		dppsi, err := unmarshalBasicDisableProtectionProviderSpecificInput(*rawMessage)
4077		if err != nil {
4078			return nil, err
4079		}
4080		dppsiArray[index] = dppsi
4081	}
4082	return dppsiArray, nil
4083}
4084
4085// MarshalJSON is the custom marshaler for DisableProtectionProviderSpecificInput.
4086func (dppsi DisableProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
4087	dppsi.InstanceType = InstanceTypeDisableProtectionProviderSpecificInput
4088	objectMap := make(map[string]interface{})
4089	if dppsi.InstanceType != "" {
4090		objectMap["instanceType"] = dppsi.InstanceType
4091	}
4092	return json.Marshal(objectMap)
4093}
4094
4095// AsInMageDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for DisableProtectionProviderSpecificInput.
4096func (dppsi DisableProtectionProviderSpecificInput) AsInMageDisableProtectionProviderSpecificInput() (*InMageDisableProtectionProviderSpecificInput, bool) {
4097	return nil, false
4098}
4099
4100// AsDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for DisableProtectionProviderSpecificInput.
4101func (dppsi DisableProtectionProviderSpecificInput) AsDisableProtectionProviderSpecificInput() (*DisableProtectionProviderSpecificInput, bool) {
4102	return &dppsi, true
4103}
4104
4105// AsBasicDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for DisableProtectionProviderSpecificInput.
4106func (dppsi DisableProtectionProviderSpecificInput) AsBasicDisableProtectionProviderSpecificInput() (BasicDisableProtectionProviderSpecificInput, bool) {
4107	return &dppsi, true
4108}
4109
4110// DiscoverProtectableItemRequest request to add a physical machine as a protectable item in a container.
4111type DiscoverProtectableItemRequest struct {
4112	// Properties - The properties of a discover protectable item request.
4113	Properties *DiscoverProtectableItemRequestProperties `json:"properties,omitempty"`
4114}
4115
4116// DiscoverProtectableItemRequestProperties discover protectable item properties.
4117type DiscoverProtectableItemRequestProperties struct {
4118	// FriendlyName - The friendly name of the physical machine.
4119	FriendlyName *string `json:"friendlyName,omitempty"`
4120	// IPAddress - The IP address of the physical machine to be discovered.
4121	IPAddress *string `json:"ipAddress,omitempty"`
4122	// OsType - The OS type on the physical machine.
4123	OsType *string `json:"osType,omitempty"`
4124}
4125
4126// DiskDetails on-prem disk details data.
4127type DiskDetails struct {
4128	// MaxSizeMB - The hard disk max size in MB.
4129	MaxSizeMB *int64 `json:"maxSizeMB,omitempty"`
4130	// VhdType - The type of the volume.
4131	VhdType *string `json:"vhdType,omitempty"`
4132	// VhdID - The VHD Id.
4133	VhdID *string `json:"vhdId,omitempty"`
4134	// VhdName - The VHD name.
4135	VhdName *string `json:"vhdName,omitempty"`
4136}
4137
4138// DiskEncryptionInfo recovery disk encryption info (BEK and KEK).
4139type DiskEncryptionInfo struct {
4140	// DiskEncryptionKeyInfo - The recovery KeyVault reference for secret.
4141	DiskEncryptionKeyInfo *DiskEncryptionKeyInfo `json:"diskEncryptionKeyInfo,omitempty"`
4142	// KeyEncryptionKeyInfo - The recovery KeyVault reference for key.
4143	KeyEncryptionKeyInfo *KeyEncryptionKeyInfo `json:"keyEncryptionKeyInfo,omitempty"`
4144}
4145
4146// DiskEncryptionKeyInfo disk Encryption Key Information (BitLocker Encryption Key (BEK) on Windows).
4147type DiskEncryptionKeyInfo struct {
4148	// SecretIdentifier - The secret URL / identifier.
4149	SecretIdentifier *string `json:"secretIdentifier,omitempty"`
4150	// KeyVaultResourceArmID - The KeyVault resource ARM Id for secret.
4151	KeyVaultResourceArmID *string `json:"keyVaultResourceArmId,omitempty"`
4152}
4153
4154// DiskVolumeDetails volume details.
4155type DiskVolumeDetails struct {
4156	// Label - The volume label.
4157	Label *string `json:"label,omitempty"`
4158	// Name - The volume name.
4159	Name *string `json:"name,omitempty"`
4160}
4161
4162// Display contains the localized display information for this particular operation / action. These value
4163// will be used by several clients for (1) custom role definitions for RBAC; (2) complex query filters for
4164// the event service; and (3) audit history / records for management operations.
4165type Display struct {
4166	// 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."
4167	Provider *string `json:"provider,omitempty"`
4168	// 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"
4169	Resource *string `json:"resource,omitempty"`
4170	// 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'
4171	Operation *string `json:"operation,omitempty"`
4172	// 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'
4173	Description *string `json:"description,omitempty"`
4174}
4175
4176// DraDetails DRA details.
4177type DraDetails struct {
4178	// ID - READ-ONLY; The DRA Id.
4179	ID *string `json:"id,omitempty"`
4180	// Name - READ-ONLY; The DRA name.
4181	Name *string `json:"name,omitempty"`
4182	// Version - READ-ONLY; The DRA version.
4183	Version *string `json:"version,omitempty"`
4184	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the DRA.
4185	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
4186	// Health - READ-ONLY; The health of the DRA. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
4187	Health ProtectionHealth `json:"health,omitempty"`
4188	// HealthErrors - READ-ONLY; The health errors.
4189	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
4190}
4191
4192// EnableMigrationInput enable migration input.
4193type EnableMigrationInput struct {
4194	// Properties - Enable migration input properties.
4195	Properties *EnableMigrationInputProperties `json:"properties,omitempty"`
4196}
4197
4198// EnableMigrationInputProperties enable migration input properties.
4199type EnableMigrationInputProperties struct {
4200	// PolicyID - The policy Id.
4201	PolicyID *string `json:"policyId,omitempty"`
4202	// ProviderSpecificDetails - The provider specific details.
4203	ProviderSpecificDetails BasicEnableMigrationProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
4204}
4205
4206// UnmarshalJSON is the custom unmarshaler for EnableMigrationInputProperties struct.
4207func (emip *EnableMigrationInputProperties) UnmarshalJSON(body []byte) error {
4208	var m map[string]*json.RawMessage
4209	err := json.Unmarshal(body, &m)
4210	if err != nil {
4211		return err
4212	}
4213	for k, v := range m {
4214		switch k {
4215		case "policyId":
4216			if v != nil {
4217				var policyID string
4218				err = json.Unmarshal(*v, &policyID)
4219				if err != nil {
4220					return err
4221				}
4222				emip.PolicyID = &policyID
4223			}
4224		case "providerSpecificDetails":
4225			if v != nil {
4226				providerSpecificDetails, err := unmarshalBasicEnableMigrationProviderSpecificInput(*v)
4227				if err != nil {
4228					return err
4229				}
4230				emip.ProviderSpecificDetails = providerSpecificDetails
4231			}
4232		}
4233	}
4234
4235	return nil
4236}
4237
4238// BasicEnableMigrationProviderSpecificInput enable migration provider specific input.
4239type BasicEnableMigrationProviderSpecificInput interface {
4240	AsVMwareCbtEnableMigrationInput() (*VMwareCbtEnableMigrationInput, bool)
4241	AsEnableMigrationProviderSpecificInput() (*EnableMigrationProviderSpecificInput, bool)
4242}
4243
4244// EnableMigrationProviderSpecificInput enable migration provider specific input.
4245type EnableMigrationProviderSpecificInput struct {
4246	// InstanceType - Possible values include: 'InstanceTypeEnableMigrationProviderSpecificInput', 'InstanceTypeVMwareCbt'
4247	InstanceType InstanceTypeBasicEnableMigrationProviderSpecificInput `json:"instanceType,omitempty"`
4248}
4249
4250func unmarshalBasicEnableMigrationProviderSpecificInput(body []byte) (BasicEnableMigrationProviderSpecificInput, error) {
4251	var m map[string]interface{}
4252	err := json.Unmarshal(body, &m)
4253	if err != nil {
4254		return nil, err
4255	}
4256
4257	switch m["instanceType"] {
4258	case string(InstanceTypeVMwareCbt):
4259		var vmcemi VMwareCbtEnableMigrationInput
4260		err := json.Unmarshal(body, &vmcemi)
4261		return vmcemi, err
4262	default:
4263		var empsi EnableMigrationProviderSpecificInput
4264		err := json.Unmarshal(body, &empsi)
4265		return empsi, err
4266	}
4267}
4268func unmarshalBasicEnableMigrationProviderSpecificInputArray(body []byte) ([]BasicEnableMigrationProviderSpecificInput, error) {
4269	var rawMessages []*json.RawMessage
4270	err := json.Unmarshal(body, &rawMessages)
4271	if err != nil {
4272		return nil, err
4273	}
4274
4275	empsiArray := make([]BasicEnableMigrationProviderSpecificInput, len(rawMessages))
4276
4277	for index, rawMessage := range rawMessages {
4278		empsi, err := unmarshalBasicEnableMigrationProviderSpecificInput(*rawMessage)
4279		if err != nil {
4280			return nil, err
4281		}
4282		empsiArray[index] = empsi
4283	}
4284	return empsiArray, nil
4285}
4286
4287// MarshalJSON is the custom marshaler for EnableMigrationProviderSpecificInput.
4288func (empsi EnableMigrationProviderSpecificInput) MarshalJSON() ([]byte, error) {
4289	empsi.InstanceType = InstanceTypeEnableMigrationProviderSpecificInput
4290	objectMap := make(map[string]interface{})
4291	if empsi.InstanceType != "" {
4292		objectMap["instanceType"] = empsi.InstanceType
4293	}
4294	return json.Marshal(objectMap)
4295}
4296
4297// AsVMwareCbtEnableMigrationInput is the BasicEnableMigrationProviderSpecificInput implementation for EnableMigrationProviderSpecificInput.
4298func (empsi EnableMigrationProviderSpecificInput) AsVMwareCbtEnableMigrationInput() (*VMwareCbtEnableMigrationInput, bool) {
4299	return nil, false
4300}
4301
4302// AsEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for EnableMigrationProviderSpecificInput.
4303func (empsi EnableMigrationProviderSpecificInput) AsEnableMigrationProviderSpecificInput() (*EnableMigrationProviderSpecificInput, bool) {
4304	return &empsi, true
4305}
4306
4307// AsBasicEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for EnableMigrationProviderSpecificInput.
4308func (empsi EnableMigrationProviderSpecificInput) AsBasicEnableMigrationProviderSpecificInput() (BasicEnableMigrationProviderSpecificInput, bool) {
4309	return &empsi, true
4310}
4311
4312// EnableProtectionInput enable protection input.
4313type EnableProtectionInput struct {
4314	// Properties - Enable protection input properties.
4315	Properties *EnableProtectionInputProperties `json:"properties,omitempty"`
4316}
4317
4318// EnableProtectionInputProperties enable protection input properties.
4319type EnableProtectionInputProperties struct {
4320	// PolicyID - The Policy Id.
4321	PolicyID *string `json:"policyId,omitempty"`
4322	// ProtectableItemID - The protectable item Id.
4323	ProtectableItemID *string `json:"protectableItemId,omitempty"`
4324	// 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.
4325	ProviderSpecificDetails BasicEnableProtectionProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
4326}
4327
4328// UnmarshalJSON is the custom unmarshaler for EnableProtectionInputProperties struct.
4329func (epip *EnableProtectionInputProperties) UnmarshalJSON(body []byte) error {
4330	var m map[string]*json.RawMessage
4331	err := json.Unmarshal(body, &m)
4332	if err != nil {
4333		return err
4334	}
4335	for k, v := range m {
4336		switch k {
4337		case "policyId":
4338			if v != nil {
4339				var policyID string
4340				err = json.Unmarshal(*v, &policyID)
4341				if err != nil {
4342					return err
4343				}
4344				epip.PolicyID = &policyID
4345			}
4346		case "protectableItemId":
4347			if v != nil {
4348				var protectableItemID string
4349				err = json.Unmarshal(*v, &protectableItemID)
4350				if err != nil {
4351					return err
4352				}
4353				epip.ProtectableItemID = &protectableItemID
4354			}
4355		case "providerSpecificDetails":
4356			if v != nil {
4357				providerSpecificDetails, err := unmarshalBasicEnableProtectionProviderSpecificInput(*v)
4358				if err != nil {
4359					return err
4360				}
4361				epip.ProviderSpecificDetails = providerSpecificDetails
4362			}
4363		}
4364	}
4365
4366	return nil
4367}
4368
4369// BasicEnableProtectionProviderSpecificInput enable protection provider specific input.
4370type BasicEnableProtectionProviderSpecificInput interface {
4371	AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool)
4372	AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool)
4373	AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool)
4374	AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool)
4375	AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool)
4376	AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool)
4377	AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool)
4378}
4379
4380// EnableProtectionProviderSpecificInput enable protection provider specific input.
4381type EnableProtectionProviderSpecificInput struct {
4382	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
4383	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
4384}
4385
4386func unmarshalBasicEnableProtectionProviderSpecificInput(body []byte) (BasicEnableProtectionProviderSpecificInput, error) {
4387	var m map[string]interface{}
4388	err := json.Unmarshal(body, &m)
4389	if err != nil {
4390		return nil, err
4391	}
4392
4393	switch m["instanceType"] {
4394	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A):
4395		var aepi A2AEnableProtectionInput
4396		err := json.Unmarshal(body, &aepi)
4397		return aepi, err
4398	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure):
4399		var hvraepi HyperVReplicaAzureEnableProtectionInput
4400		err := json.Unmarshal(body, &hvraepi)
4401		return hvraepi, err
4402	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2):
4403		var imavepi InMageAzureV2EnableProtectionInput
4404		err := json.Unmarshal(body, &imavepi)
4405		return imavepi, err
4406	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage):
4407		var imepi InMageEnableProtectionInput
4408		err := json.Unmarshal(body, &imepi)
4409		return imepi, err
4410	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm):
4411		var imrepi InMageRcmEnableProtectionInput
4412		err := json.Unmarshal(body, &imrepi)
4413		return imrepi, err
4414	case string(InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan):
4415		var sepi SanEnableProtectionInput
4416		err := json.Unmarshal(body, &sepi)
4417		return sepi, err
4418	default:
4419		var eppsi EnableProtectionProviderSpecificInput
4420		err := json.Unmarshal(body, &eppsi)
4421		return eppsi, err
4422	}
4423}
4424func unmarshalBasicEnableProtectionProviderSpecificInputArray(body []byte) ([]BasicEnableProtectionProviderSpecificInput, error) {
4425	var rawMessages []*json.RawMessage
4426	err := json.Unmarshal(body, &rawMessages)
4427	if err != nil {
4428		return nil, err
4429	}
4430
4431	eppsiArray := make([]BasicEnableProtectionProviderSpecificInput, len(rawMessages))
4432
4433	for index, rawMessage := range rawMessages {
4434		eppsi, err := unmarshalBasicEnableProtectionProviderSpecificInput(*rawMessage)
4435		if err != nil {
4436			return nil, err
4437		}
4438		eppsiArray[index] = eppsi
4439	}
4440	return eppsiArray, nil
4441}
4442
4443// MarshalJSON is the custom marshaler for EnableProtectionProviderSpecificInput.
4444func (eppsi EnableProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
4445	eppsi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput
4446	objectMap := make(map[string]interface{})
4447	if eppsi.InstanceType != "" {
4448		objectMap["instanceType"] = eppsi.InstanceType
4449	}
4450	return json.Marshal(objectMap)
4451}
4452
4453// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4454func (eppsi EnableProtectionProviderSpecificInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
4455	return nil, false
4456}
4457
4458// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4459func (eppsi EnableProtectionProviderSpecificInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
4460	return nil, false
4461}
4462
4463// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4464func (eppsi EnableProtectionProviderSpecificInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
4465	return nil, false
4466}
4467
4468// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4469func (eppsi EnableProtectionProviderSpecificInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
4470	return nil, false
4471}
4472
4473// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4474func (eppsi EnableProtectionProviderSpecificInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
4475	return nil, false
4476}
4477
4478// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4479func (eppsi EnableProtectionProviderSpecificInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
4480	return nil, false
4481}
4482
4483// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4484func (eppsi EnableProtectionProviderSpecificInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
4485	return &eppsi, true
4486}
4487
4488// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for EnableProtectionProviderSpecificInput.
4489func (eppsi EnableProtectionProviderSpecificInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
4490	return &eppsi, true
4491}
4492
4493// EncryptionDetails encryption details for the fabric.
4494type EncryptionDetails struct {
4495	// KekState - The key encryption key state for the Vmm.
4496	KekState *string `json:"kekState,omitempty"`
4497	// KekCertThumbprint - The key encryption key certificate thumbprint.
4498	KekCertThumbprint *string `json:"kekCertThumbprint,omitempty"`
4499	// KekCertExpiryDate - The key encryption key certificate expiry date.
4500	KekCertExpiryDate *date.Time `json:"kekCertExpiryDate,omitempty"`
4501}
4502
4503// Event implements the Event class.
4504type Event struct {
4505	autorest.Response `json:"-"`
4506	// Properties - Event related data.
4507	Properties *EventProperties `json:"properties,omitempty"`
4508	// ID - READ-ONLY; Resource Id
4509	ID *string `json:"id,omitempty"`
4510	// Name - READ-ONLY; Resource Name
4511	Name *string `json:"name,omitempty"`
4512	// Type - READ-ONLY; Resource Type
4513	Type *string `json:"type,omitempty"`
4514	// Location - Resource Location
4515	Location *string `json:"location,omitempty"`
4516}
4517
4518// MarshalJSON is the custom marshaler for Event.
4519func (e Event) MarshalJSON() ([]byte, error) {
4520	objectMap := make(map[string]interface{})
4521	if e.Properties != nil {
4522		objectMap["properties"] = e.Properties
4523	}
4524	if e.Location != nil {
4525		objectMap["location"] = e.Location
4526	}
4527	return json.Marshal(objectMap)
4528}
4529
4530// EventCollection collection of fabric details.
4531type EventCollection struct {
4532	autorest.Response `json:"-"`
4533	// Value - The list of events.
4534	Value *[]Event `json:"value,omitempty"`
4535	// NextLink - The value of next link.
4536	NextLink *string `json:"nextLink,omitempty"`
4537}
4538
4539// EventCollectionIterator provides access to a complete listing of Event values.
4540type EventCollectionIterator struct {
4541	i    int
4542	page EventCollectionPage
4543}
4544
4545// NextWithContext advances to the next value.  If there was an error making
4546// the request the iterator does not advance and the error is returned.
4547func (iter *EventCollectionIterator) NextWithContext(ctx context.Context) (err error) {
4548	if tracing.IsEnabled() {
4549		ctx = tracing.StartSpan(ctx, fqdn+"/EventCollectionIterator.NextWithContext")
4550		defer func() {
4551			sc := -1
4552			if iter.Response().Response.Response != nil {
4553				sc = iter.Response().Response.Response.StatusCode
4554			}
4555			tracing.EndSpan(ctx, sc, err)
4556		}()
4557	}
4558	iter.i++
4559	if iter.i < len(iter.page.Values()) {
4560		return nil
4561	}
4562	err = iter.page.NextWithContext(ctx)
4563	if err != nil {
4564		iter.i--
4565		return err
4566	}
4567	iter.i = 0
4568	return nil
4569}
4570
4571// Next advances to the next value.  If there was an error making
4572// the request the iterator does not advance and the error is returned.
4573// Deprecated: Use NextWithContext() instead.
4574func (iter *EventCollectionIterator) Next() error {
4575	return iter.NextWithContext(context.Background())
4576}
4577
4578// NotDone returns true if the enumeration should be started or is not yet complete.
4579func (iter EventCollectionIterator) NotDone() bool {
4580	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4581}
4582
4583// Response returns the raw server response from the last page request.
4584func (iter EventCollectionIterator) Response() EventCollection {
4585	return iter.page.Response()
4586}
4587
4588// Value returns the current value or a zero-initialized value if the
4589// iterator has advanced beyond the end of the collection.
4590func (iter EventCollectionIterator) Value() Event {
4591	if !iter.page.NotDone() {
4592		return Event{}
4593	}
4594	return iter.page.Values()[iter.i]
4595}
4596
4597// Creates a new instance of the EventCollectionIterator type.
4598func NewEventCollectionIterator(page EventCollectionPage) EventCollectionIterator {
4599	return EventCollectionIterator{page: page}
4600}
4601
4602// IsEmpty returns true if the ListResult contains no values.
4603func (ec EventCollection) IsEmpty() bool {
4604	return ec.Value == nil || len(*ec.Value) == 0
4605}
4606
4607// hasNextLink returns true if the NextLink is not empty.
4608func (ec EventCollection) hasNextLink() bool {
4609	return ec.NextLink != nil && len(*ec.NextLink) != 0
4610}
4611
4612// eventCollectionPreparer prepares a request to retrieve the next set of results.
4613// It returns nil if no more results exist.
4614func (ec EventCollection) eventCollectionPreparer(ctx context.Context) (*http.Request, error) {
4615	if !ec.hasNextLink() {
4616		return nil, nil
4617	}
4618	return autorest.Prepare((&http.Request{}).WithContext(ctx),
4619		autorest.AsJSON(),
4620		autorest.AsGet(),
4621		autorest.WithBaseURL(to.String(ec.NextLink)))
4622}
4623
4624// EventCollectionPage contains a page of Event values.
4625type EventCollectionPage struct {
4626	fn func(context.Context, EventCollection) (EventCollection, error)
4627	ec EventCollection
4628}
4629
4630// NextWithContext advances to the next page of values.  If there was an error making
4631// the request the page does not advance and the error is returned.
4632func (page *EventCollectionPage) NextWithContext(ctx context.Context) (err error) {
4633	if tracing.IsEnabled() {
4634		ctx = tracing.StartSpan(ctx, fqdn+"/EventCollectionPage.NextWithContext")
4635		defer func() {
4636			sc := -1
4637			if page.Response().Response.Response != nil {
4638				sc = page.Response().Response.Response.StatusCode
4639			}
4640			tracing.EndSpan(ctx, sc, err)
4641		}()
4642	}
4643	for {
4644		next, err := page.fn(ctx, page.ec)
4645		if err != nil {
4646			return err
4647		}
4648		page.ec = next
4649		if !next.hasNextLink() || !next.IsEmpty() {
4650			break
4651		}
4652	}
4653	return nil
4654}
4655
4656// Next advances to the next page of values.  If there was an error making
4657// the request the page does not advance and the error is returned.
4658// Deprecated: Use NextWithContext() instead.
4659func (page *EventCollectionPage) Next() error {
4660	return page.NextWithContext(context.Background())
4661}
4662
4663// NotDone returns true if the page enumeration should be started or is not yet complete.
4664func (page EventCollectionPage) NotDone() bool {
4665	return !page.ec.IsEmpty()
4666}
4667
4668// Response returns the raw server response from the last page request.
4669func (page EventCollectionPage) Response() EventCollection {
4670	return page.ec
4671}
4672
4673// Values returns the slice of values for the current page or nil if there are no values.
4674func (page EventCollectionPage) Values() []Event {
4675	if page.ec.IsEmpty() {
4676		return nil
4677	}
4678	return *page.ec.Value
4679}
4680
4681// Creates a new instance of the EventCollectionPage type.
4682func NewEventCollectionPage(cur EventCollection, getNextPage func(context.Context, EventCollection) (EventCollection, error)) EventCollectionPage {
4683	return EventCollectionPage{
4684		fn: getNextPage,
4685		ec: cur,
4686	}
4687}
4688
4689// EventProperties the properties of a monitoring event.
4690type EventProperties struct {
4691	// EventCode - The Id of the monitoring event.
4692	EventCode *string `json:"eventCode,omitempty"`
4693	// Description - The event name.
4694	Description *string `json:"description,omitempty"`
4695	// EventType - The type of the event. for example: VM Health, Server Health, Job Failure etc.
4696	EventType *string `json:"eventType,omitempty"`
4697	// AffectedObjectFriendlyName - The friendly name of the source of the event on which it is raised (for example, VM, VMM etc).
4698	AffectedObjectFriendlyName *string `json:"affectedObjectFriendlyName,omitempty"`
4699	// Severity - The severity of the event.
4700	Severity *string `json:"severity,omitempty"`
4701	// TimeOfOccurrence - The time of occurrence of the event.
4702	TimeOfOccurrence *date.Time `json:"timeOfOccurrence,omitempty"`
4703	// FabricID - The ARM ID of the fabric.
4704	FabricID *string `json:"fabricId,omitempty"`
4705	// ProviderSpecificDetails - The provider specific settings.
4706	ProviderSpecificDetails BasicEventProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
4707	// EventSpecificDetails - The event specific settings.
4708	EventSpecificDetails BasicEventSpecificDetails `json:"eventSpecificDetails,omitempty"`
4709	// HealthErrors - The list of errors / warnings capturing details associated with the issue(s).
4710	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
4711}
4712
4713// UnmarshalJSON is the custom unmarshaler for EventProperties struct.
4714func (ep *EventProperties) UnmarshalJSON(body []byte) error {
4715	var m map[string]*json.RawMessage
4716	err := json.Unmarshal(body, &m)
4717	if err != nil {
4718		return err
4719	}
4720	for k, v := range m {
4721		switch k {
4722		case "eventCode":
4723			if v != nil {
4724				var eventCode string
4725				err = json.Unmarshal(*v, &eventCode)
4726				if err != nil {
4727					return err
4728				}
4729				ep.EventCode = &eventCode
4730			}
4731		case "description":
4732			if v != nil {
4733				var description string
4734				err = json.Unmarshal(*v, &description)
4735				if err != nil {
4736					return err
4737				}
4738				ep.Description = &description
4739			}
4740		case "eventType":
4741			if v != nil {
4742				var eventType string
4743				err = json.Unmarshal(*v, &eventType)
4744				if err != nil {
4745					return err
4746				}
4747				ep.EventType = &eventType
4748			}
4749		case "affectedObjectFriendlyName":
4750			if v != nil {
4751				var affectedObjectFriendlyName string
4752				err = json.Unmarshal(*v, &affectedObjectFriendlyName)
4753				if err != nil {
4754					return err
4755				}
4756				ep.AffectedObjectFriendlyName = &affectedObjectFriendlyName
4757			}
4758		case "severity":
4759			if v != nil {
4760				var severity string
4761				err = json.Unmarshal(*v, &severity)
4762				if err != nil {
4763					return err
4764				}
4765				ep.Severity = &severity
4766			}
4767		case "timeOfOccurrence":
4768			if v != nil {
4769				var timeOfOccurrence date.Time
4770				err = json.Unmarshal(*v, &timeOfOccurrence)
4771				if err != nil {
4772					return err
4773				}
4774				ep.TimeOfOccurrence = &timeOfOccurrence
4775			}
4776		case "fabricId":
4777			if v != nil {
4778				var fabricID string
4779				err = json.Unmarshal(*v, &fabricID)
4780				if err != nil {
4781					return err
4782				}
4783				ep.FabricID = &fabricID
4784			}
4785		case "providerSpecificDetails":
4786			if v != nil {
4787				providerSpecificDetails, err := unmarshalBasicEventProviderSpecificDetails(*v)
4788				if err != nil {
4789					return err
4790				}
4791				ep.ProviderSpecificDetails = providerSpecificDetails
4792			}
4793		case "eventSpecificDetails":
4794			if v != nil {
4795				eventSpecificDetails, err := unmarshalBasicEventSpecificDetails(*v)
4796				if err != nil {
4797					return err
4798				}
4799				ep.EventSpecificDetails = eventSpecificDetails
4800			}
4801		case "healthErrors":
4802			if v != nil {
4803				var healthErrors []HealthError
4804				err = json.Unmarshal(*v, &healthErrors)
4805				if err != nil {
4806					return err
4807				}
4808				ep.HealthErrors = &healthErrors
4809			}
4810		}
4811	}
4812
4813	return nil
4814}
4815
4816// BasicEventProviderSpecificDetails model class for provider specific details for an event.
4817type BasicEventProviderSpecificDetails interface {
4818	AsA2AEventDetails() (*A2AEventDetails, bool)
4819	AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool)
4820	AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool)
4821	AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool)
4822	AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool)
4823	AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool)
4824	AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool)
4825	AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool)
4826}
4827
4828// EventProviderSpecificDetails model class for provider specific details for an event.
4829type EventProviderSpecificDetails struct {
4830	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
4831	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
4832}
4833
4834func unmarshalBasicEventProviderSpecificDetails(body []byte) (BasicEventProviderSpecificDetails, error) {
4835	var m map[string]interface{}
4836	err := json.Unmarshal(body, &m)
4837	if err != nil {
4838		return nil, err
4839	}
4840
4841	switch m["instanceType"] {
4842	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A):
4843		var aed A2AEventDetails
4844		err := json.Unmarshal(body, &aed)
4845		return aed, err
4846	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012):
4847		var hvr2ed HyperVReplica2012EventDetails
4848		err := json.Unmarshal(body, &hvr2ed)
4849		return hvr2ed, err
4850	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2):
4851		var hvr2ed HyperVReplica2012R2EventDetails
4852		err := json.Unmarshal(body, &hvr2ed)
4853		return hvr2ed, err
4854	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure):
4855		var hvraed HyperVReplicaAzureEventDetails
4856		err := json.Unmarshal(body, &hvraed)
4857		return hvraed, err
4858	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails):
4859		var hvrbed HyperVReplicaBaseEventDetails
4860		err := json.Unmarshal(body, &hvrbed)
4861		return hvrbed, err
4862	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2):
4863		var imaved InMageAzureV2EventDetails
4864		err := json.Unmarshal(body, &imaved)
4865		return imaved, err
4866	case string(InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm):
4867		var imred InMageRcmEventDetails
4868		err := json.Unmarshal(body, &imred)
4869		return imred, err
4870	default:
4871		var epsd EventProviderSpecificDetails
4872		err := json.Unmarshal(body, &epsd)
4873		return epsd, err
4874	}
4875}
4876func unmarshalBasicEventProviderSpecificDetailsArray(body []byte) ([]BasicEventProviderSpecificDetails, error) {
4877	var rawMessages []*json.RawMessage
4878	err := json.Unmarshal(body, &rawMessages)
4879	if err != nil {
4880		return nil, err
4881	}
4882
4883	epsdArray := make([]BasicEventProviderSpecificDetails, len(rawMessages))
4884
4885	for index, rawMessage := range rawMessages {
4886		epsd, err := unmarshalBasicEventProviderSpecificDetails(*rawMessage)
4887		if err != nil {
4888			return nil, err
4889		}
4890		epsdArray[index] = epsd
4891	}
4892	return epsdArray, nil
4893}
4894
4895// MarshalJSON is the custom marshaler for EventProviderSpecificDetails.
4896func (epsd EventProviderSpecificDetails) MarshalJSON() ([]byte, error) {
4897	epsd.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails
4898	objectMap := make(map[string]interface{})
4899	if epsd.InstanceType != "" {
4900		objectMap["instanceType"] = epsd.InstanceType
4901	}
4902	return json.Marshal(objectMap)
4903}
4904
4905// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4906func (epsd EventProviderSpecificDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
4907	return nil, false
4908}
4909
4910// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4911func (epsd EventProviderSpecificDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
4912	return nil, false
4913}
4914
4915// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4916func (epsd EventProviderSpecificDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
4917	return nil, false
4918}
4919
4920// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4921func (epsd EventProviderSpecificDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
4922	return nil, false
4923}
4924
4925// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4926func (epsd EventProviderSpecificDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
4927	return nil, false
4928}
4929
4930// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4931func (epsd EventProviderSpecificDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
4932	return nil, false
4933}
4934
4935// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4936func (epsd EventProviderSpecificDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
4937	return nil, false
4938}
4939
4940// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4941func (epsd EventProviderSpecificDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
4942	return &epsd, true
4943}
4944
4945// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for EventProviderSpecificDetails.
4946func (epsd EventProviderSpecificDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
4947	return &epsd, true
4948}
4949
4950// EventQueryParameter implements the event query parameter.
4951type EventQueryParameter struct {
4952	// EventCode - The source id of the events to be queried.
4953	EventCode *string `json:"eventCode,omitempty"`
4954	// Severity - The severity of the events to be queried.
4955	Severity *string `json:"severity,omitempty"`
4956	// EventType - The type of the events to be queried.
4957	EventType *string `json:"eventType,omitempty"`
4958	// FabricName - The affected object server id of the events to be queried.
4959	FabricName *string `json:"fabricName,omitempty"`
4960	// AffectedObjectFriendlyName - The affected object name of the events to be queried.
4961	AffectedObjectFriendlyName *string `json:"affectedObjectFriendlyName,omitempty"`
4962	// StartTime - The start time of the time range within which the events are to be queried.
4963	StartTime *date.Time `json:"startTime,omitempty"`
4964	// EndTime - The end time of the time range within which the events are to be queried.
4965	EndTime *date.Time `json:"endTime,omitempty"`
4966}
4967
4968// BasicEventSpecificDetails model class for event specific details for an event.
4969type BasicEventSpecificDetails interface {
4970	AsJobStatusEventDetails() (*JobStatusEventDetails, bool)
4971	AsEventSpecificDetails() (*EventSpecificDetails, bool)
4972}
4973
4974// EventSpecificDetails model class for event specific details for an event.
4975type EventSpecificDetails struct {
4976	// InstanceType - Possible values include: 'InstanceTypeEventSpecificDetails', 'InstanceTypeJobStatus'
4977	InstanceType InstanceTypeBasicEventSpecificDetails `json:"instanceType,omitempty"`
4978}
4979
4980func unmarshalBasicEventSpecificDetails(body []byte) (BasicEventSpecificDetails, error) {
4981	var m map[string]interface{}
4982	err := json.Unmarshal(body, &m)
4983	if err != nil {
4984		return nil, err
4985	}
4986
4987	switch m["instanceType"] {
4988	case string(InstanceTypeJobStatus):
4989		var jsed JobStatusEventDetails
4990		err := json.Unmarshal(body, &jsed)
4991		return jsed, err
4992	default:
4993		var esd EventSpecificDetails
4994		err := json.Unmarshal(body, &esd)
4995		return esd, err
4996	}
4997}
4998func unmarshalBasicEventSpecificDetailsArray(body []byte) ([]BasicEventSpecificDetails, error) {
4999	var rawMessages []*json.RawMessage
5000	err := json.Unmarshal(body, &rawMessages)
5001	if err != nil {
5002		return nil, err
5003	}
5004
5005	esdArray := make([]BasicEventSpecificDetails, len(rawMessages))
5006
5007	for index, rawMessage := range rawMessages {
5008		esd, err := unmarshalBasicEventSpecificDetails(*rawMessage)
5009		if err != nil {
5010			return nil, err
5011		}
5012		esdArray[index] = esd
5013	}
5014	return esdArray, nil
5015}
5016
5017// MarshalJSON is the custom marshaler for EventSpecificDetails.
5018func (esd EventSpecificDetails) MarshalJSON() ([]byte, error) {
5019	esd.InstanceType = InstanceTypeEventSpecificDetails
5020	objectMap := make(map[string]interface{})
5021	if esd.InstanceType != "" {
5022		objectMap["instanceType"] = esd.InstanceType
5023	}
5024	return json.Marshal(objectMap)
5025}
5026
5027// AsJobStatusEventDetails is the BasicEventSpecificDetails implementation for EventSpecificDetails.
5028func (esd EventSpecificDetails) AsJobStatusEventDetails() (*JobStatusEventDetails, bool) {
5029	return nil, false
5030}
5031
5032// AsEventSpecificDetails is the BasicEventSpecificDetails implementation for EventSpecificDetails.
5033func (esd EventSpecificDetails) AsEventSpecificDetails() (*EventSpecificDetails, bool) {
5034	return &esd, true
5035}
5036
5037// AsBasicEventSpecificDetails is the BasicEventSpecificDetails implementation for EventSpecificDetails.
5038func (esd EventSpecificDetails) AsBasicEventSpecificDetails() (BasicEventSpecificDetails, bool) {
5039	return &esd, true
5040}
5041
5042// ExistingProtectionProfile existing storage account input.
5043type ExistingProtectionProfile struct {
5044	// ProtectionProfileID - The protection profile Arm Id. Throw error, if resource does not exists.
5045	ProtectionProfileID *string `json:"protectionProfileId,omitempty"`
5046	// ResourceType - Possible values include: 'ResourceTypeProtectionProfileCustomDetails', 'ResourceTypeExisting', 'ResourceTypeNew'
5047	ResourceType ResourceType `json:"resourceType,omitempty"`
5048}
5049
5050// MarshalJSON is the custom marshaler for ExistingProtectionProfile.
5051func (epp ExistingProtectionProfile) MarshalJSON() ([]byte, error) {
5052	epp.ResourceType = ResourceTypeExisting
5053	objectMap := make(map[string]interface{})
5054	if epp.ProtectionProfileID != nil {
5055		objectMap["protectionProfileId"] = epp.ProtectionProfileID
5056	}
5057	if epp.ResourceType != "" {
5058		objectMap["resourceType"] = epp.ResourceType
5059	}
5060	return json.Marshal(objectMap)
5061}
5062
5063// AsExistingProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5064func (epp ExistingProtectionProfile) AsExistingProtectionProfile() (*ExistingProtectionProfile, bool) {
5065	return &epp, true
5066}
5067
5068// AsNewProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5069func (epp ExistingProtectionProfile) AsNewProtectionProfile() (*NewProtectionProfile, bool) {
5070	return nil, false
5071}
5072
5073// AsProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5074func (epp ExistingProtectionProfile) AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool) {
5075	return nil, false
5076}
5077
5078// AsBasicProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ExistingProtectionProfile.
5079func (epp ExistingProtectionProfile) AsBasicProtectionProfileCustomDetails() (BasicProtectionProfileCustomDetails, bool) {
5080	return &epp, true
5081}
5082
5083// ExistingRecoveryAvailabilitySet existing recovery availability set input.
5084type ExistingRecoveryAvailabilitySet struct {
5085	// RecoveryAvailabilitySetID - The recovery availability set Id. Will throw error, if resource does not exist.
5086	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
5087	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeRecoveryAvailabilitySetCustomDetails', 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting'
5088	ResourceType ResourceTypeBasicRecoveryAvailabilitySetCustomDetails `json:"resourceType,omitempty"`
5089}
5090
5091// MarshalJSON is the custom marshaler for ExistingRecoveryAvailabilitySet.
5092func (eras ExistingRecoveryAvailabilitySet) MarshalJSON() ([]byte, error) {
5093	eras.ResourceType = ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting
5094	objectMap := make(map[string]interface{})
5095	if eras.RecoveryAvailabilitySetID != nil {
5096		objectMap["recoveryAvailabilitySetId"] = eras.RecoveryAvailabilitySetID
5097	}
5098	if eras.ResourceType != "" {
5099		objectMap["resourceType"] = eras.ResourceType
5100	}
5101	return json.Marshal(objectMap)
5102}
5103
5104// AsExistingRecoveryAvailabilitySet is the BasicRecoveryAvailabilitySetCustomDetails implementation for ExistingRecoveryAvailabilitySet.
5105func (eras ExistingRecoveryAvailabilitySet) AsExistingRecoveryAvailabilitySet() (*ExistingRecoveryAvailabilitySet, bool) {
5106	return &eras, true
5107}
5108
5109// AsRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for ExistingRecoveryAvailabilitySet.
5110func (eras ExistingRecoveryAvailabilitySet) AsRecoveryAvailabilitySetCustomDetails() (*RecoveryAvailabilitySetCustomDetails, bool) {
5111	return nil, false
5112}
5113
5114// AsBasicRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for ExistingRecoveryAvailabilitySet.
5115func (eras ExistingRecoveryAvailabilitySet) AsBasicRecoveryAvailabilitySetCustomDetails() (BasicRecoveryAvailabilitySetCustomDetails, bool) {
5116	return &eras, true
5117}
5118
5119// ExistingRecoveryProximityPlacementGroup existing recovery proximity placement group input.
5120type ExistingRecoveryProximityPlacementGroup struct {
5121	// RecoveryProximityPlacementGroupID - The recovery proximity placement group Id. Will throw error, if resource does not exist.
5122	RecoveryProximityPlacementGroupID *string `json:"recoveryProximityPlacementGroupId,omitempty"`
5123	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeRecoveryProximityPlacementGroupCustomDetails', 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting'
5124	ResourceType ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetails `json:"resourceType,omitempty"`
5125}
5126
5127// MarshalJSON is the custom marshaler for ExistingRecoveryProximityPlacementGroup.
5128func (erppg ExistingRecoveryProximityPlacementGroup) MarshalJSON() ([]byte, error) {
5129	erppg.ResourceType = ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting
5130	objectMap := make(map[string]interface{})
5131	if erppg.RecoveryProximityPlacementGroupID != nil {
5132		objectMap["recoveryProximityPlacementGroupId"] = erppg.RecoveryProximityPlacementGroupID
5133	}
5134	if erppg.ResourceType != "" {
5135		objectMap["resourceType"] = erppg.ResourceType
5136	}
5137	return json.Marshal(objectMap)
5138}
5139
5140// AsExistingRecoveryProximityPlacementGroup is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for ExistingRecoveryProximityPlacementGroup.
5141func (erppg ExistingRecoveryProximityPlacementGroup) AsExistingRecoveryProximityPlacementGroup() (*ExistingRecoveryProximityPlacementGroup, bool) {
5142	return &erppg, true
5143}
5144
5145// AsRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for ExistingRecoveryProximityPlacementGroup.
5146func (erppg ExistingRecoveryProximityPlacementGroup) AsRecoveryProximityPlacementGroupCustomDetails() (*RecoveryProximityPlacementGroupCustomDetails, bool) {
5147	return nil, false
5148}
5149
5150// AsBasicRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for ExistingRecoveryProximityPlacementGroup.
5151func (erppg ExistingRecoveryProximityPlacementGroup) AsBasicRecoveryProximityPlacementGroupCustomDetails() (BasicRecoveryProximityPlacementGroupCustomDetails, bool) {
5152	return &erppg, true
5153}
5154
5155// ExistingRecoveryRecoveryResourceGroup existing recovery resource group input.
5156type ExistingRecoveryRecoveryResourceGroup struct {
5157	// RecoveryResourceGroupID - The recovery resource group Id. Valid for V2 scenarios.
5158	RecoveryResourceGroupID *string `json:"recoveryResourceGroupId,omitempty"`
5159	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeRecoveryResourceGroupCustomDetails', 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting'
5160	ResourceType ResourceTypeBasicRecoveryResourceGroupCustomDetails `json:"resourceType,omitempty"`
5161}
5162
5163// MarshalJSON is the custom marshaler for ExistingRecoveryRecoveryResourceGroup.
5164func (errrg ExistingRecoveryRecoveryResourceGroup) MarshalJSON() ([]byte, error) {
5165	errrg.ResourceType = ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting
5166	objectMap := make(map[string]interface{})
5167	if errrg.RecoveryResourceGroupID != nil {
5168		objectMap["recoveryResourceGroupId"] = errrg.RecoveryResourceGroupID
5169	}
5170	if errrg.ResourceType != "" {
5171		objectMap["resourceType"] = errrg.ResourceType
5172	}
5173	return json.Marshal(objectMap)
5174}
5175
5176// AsExistingRecoveryRecoveryResourceGroup is the BasicRecoveryResourceGroupCustomDetails implementation for ExistingRecoveryRecoveryResourceGroup.
5177func (errrg ExistingRecoveryRecoveryResourceGroup) AsExistingRecoveryRecoveryResourceGroup() (*ExistingRecoveryRecoveryResourceGroup, bool) {
5178	return &errrg, true
5179}
5180
5181// AsRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for ExistingRecoveryRecoveryResourceGroup.
5182func (errrg ExistingRecoveryRecoveryResourceGroup) AsRecoveryResourceGroupCustomDetails() (*RecoveryResourceGroupCustomDetails, bool) {
5183	return nil, false
5184}
5185
5186// AsBasicRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for ExistingRecoveryRecoveryResourceGroup.
5187func (errrg ExistingRecoveryRecoveryResourceGroup) AsBasicRecoveryResourceGroupCustomDetails() (BasicRecoveryResourceGroupCustomDetails, bool) {
5188	return &errrg, true
5189}
5190
5191// ExistingRecoveryVirtualNetwork existing recovery virtual network input.
5192type ExistingRecoveryVirtualNetwork struct {
5193	// RecoveryVirtualNetworkID - The recovery virtual network Id. Will throw error, if resource does not exist.
5194	RecoveryVirtualNetworkID *string `json:"recoveryVirtualNetworkId,omitempty"`
5195	// RecoverySubnetName - The recovery subnet name.
5196	RecoverySubnetName *string `json:"recoverySubnetName,omitempty"`
5197	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeRecoveryVirtualNetworkCustomDetails', 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting'
5198	ResourceType ResourceTypeBasicRecoveryVirtualNetworkCustomDetails `json:"resourceType,omitempty"`
5199}
5200
5201// MarshalJSON is the custom marshaler for ExistingRecoveryVirtualNetwork.
5202func (ervn ExistingRecoveryVirtualNetwork) MarshalJSON() ([]byte, error) {
5203	ervn.ResourceType = ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting
5204	objectMap := make(map[string]interface{})
5205	if ervn.RecoveryVirtualNetworkID != nil {
5206		objectMap["recoveryVirtualNetworkId"] = ervn.RecoveryVirtualNetworkID
5207	}
5208	if ervn.RecoverySubnetName != nil {
5209		objectMap["recoverySubnetName"] = ervn.RecoverySubnetName
5210	}
5211	if ervn.ResourceType != "" {
5212		objectMap["resourceType"] = ervn.ResourceType
5213	}
5214	return json.Marshal(objectMap)
5215}
5216
5217// AsExistingRecoveryVirtualNetwork is the BasicRecoveryVirtualNetworkCustomDetails implementation for ExistingRecoveryVirtualNetwork.
5218func (ervn ExistingRecoveryVirtualNetwork) AsExistingRecoveryVirtualNetwork() (*ExistingRecoveryVirtualNetwork, bool) {
5219	return &ervn, true
5220}
5221
5222// AsRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for ExistingRecoveryVirtualNetwork.
5223func (ervn ExistingRecoveryVirtualNetwork) AsRecoveryVirtualNetworkCustomDetails() (*RecoveryVirtualNetworkCustomDetails, bool) {
5224	return nil, false
5225}
5226
5227// AsBasicRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for ExistingRecoveryVirtualNetwork.
5228func (ervn ExistingRecoveryVirtualNetwork) AsBasicRecoveryVirtualNetworkCustomDetails() (BasicRecoveryVirtualNetworkCustomDetails, bool) {
5229	return &ervn, true
5230}
5231
5232// ExistingStorageAccount existing storage account input.
5233type ExistingStorageAccount struct {
5234	// AzureStorageAccountID - The storage account Arm Id. Throw error, if resource does not exists.
5235	AzureStorageAccountID *string `json:"azureStorageAccountId,omitempty"`
5236	// ResourceType - Possible values include: 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeStorageAccountCustomDetails', 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting'
5237	ResourceType ResourceTypeBasicStorageAccountCustomDetails `json:"resourceType,omitempty"`
5238}
5239
5240// MarshalJSON is the custom marshaler for ExistingStorageAccount.
5241func (esa ExistingStorageAccount) MarshalJSON() ([]byte, error) {
5242	esa.ResourceType = ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting
5243	objectMap := make(map[string]interface{})
5244	if esa.AzureStorageAccountID != nil {
5245		objectMap["azureStorageAccountId"] = esa.AzureStorageAccountID
5246	}
5247	if esa.ResourceType != "" {
5248		objectMap["resourceType"] = esa.ResourceType
5249	}
5250	return json.Marshal(objectMap)
5251}
5252
5253// AsExistingStorageAccount is the BasicStorageAccountCustomDetails implementation for ExistingStorageAccount.
5254func (esa ExistingStorageAccount) AsExistingStorageAccount() (*ExistingStorageAccount, bool) {
5255	return &esa, true
5256}
5257
5258// AsStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for ExistingStorageAccount.
5259func (esa ExistingStorageAccount) AsStorageAccountCustomDetails() (*StorageAccountCustomDetails, bool) {
5260	return nil, false
5261}
5262
5263// AsBasicStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for ExistingStorageAccount.
5264func (esa ExistingStorageAccount) AsBasicStorageAccountCustomDetails() (BasicStorageAccountCustomDetails, bool) {
5265	return &esa, true
5266}
5267
5268// ExportJobDetails this class represents details for export jobs workflow.
5269type ExportJobDetails struct {
5270	// BlobURI - BlobUri of the exported jobs.
5271	BlobURI *string `json:"blobUri,omitempty"`
5272	// SasToken - The sas token to access blob.
5273	SasToken *string `json:"sasToken,omitempty"`
5274	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
5275	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
5276	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
5277	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
5278}
5279
5280// MarshalJSON is the custom marshaler for ExportJobDetails.
5281func (ejd ExportJobDetails) MarshalJSON() ([]byte, error) {
5282	ejd.InstanceType = InstanceTypeExportJobDetails
5283	objectMap := make(map[string]interface{})
5284	if ejd.BlobURI != nil {
5285		objectMap["blobUri"] = ejd.BlobURI
5286	}
5287	if ejd.SasToken != nil {
5288		objectMap["sasToken"] = ejd.SasToken
5289	}
5290	if ejd.AffectedObjectDetails != nil {
5291		objectMap["affectedObjectDetails"] = ejd.AffectedObjectDetails
5292	}
5293	if ejd.InstanceType != "" {
5294		objectMap["instanceType"] = ejd.InstanceType
5295	}
5296	return json.Marshal(objectMap)
5297}
5298
5299// AsAsrJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5300func (ejd ExportJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
5301	return nil, false
5302}
5303
5304// AsExportJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5305func (ejd ExportJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
5306	return &ejd, true
5307}
5308
5309// AsFailoverJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5310func (ejd ExportJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
5311	return nil, false
5312}
5313
5314// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5315func (ejd ExportJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
5316	return nil, false
5317}
5318
5319// AsTestFailoverJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5320func (ejd ExportJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
5321	return nil, false
5322}
5323
5324// AsJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5325func (ejd ExportJobDetails) AsJobDetails() (*JobDetails, bool) {
5326	return nil, false
5327}
5328
5329// AsBasicJobDetails is the BasicJobDetails implementation for ExportJobDetails.
5330func (ejd ExportJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
5331	return &ejd, true
5332}
5333
5334// Fabric fabric definition.
5335type Fabric struct {
5336	autorest.Response `json:"-"`
5337	// Properties - Fabric related data.
5338	Properties *FabricProperties `json:"properties,omitempty"`
5339	// ID - READ-ONLY; Resource Id
5340	ID *string `json:"id,omitempty"`
5341	// Name - READ-ONLY; Resource Name
5342	Name *string `json:"name,omitempty"`
5343	// Type - READ-ONLY; Resource Type
5344	Type *string `json:"type,omitempty"`
5345	// Location - Resource Location
5346	Location *string `json:"location,omitempty"`
5347}
5348
5349// MarshalJSON is the custom marshaler for Fabric.
5350func (f Fabric) MarshalJSON() ([]byte, error) {
5351	objectMap := make(map[string]interface{})
5352	if f.Properties != nil {
5353		objectMap["properties"] = f.Properties
5354	}
5355	if f.Location != nil {
5356		objectMap["location"] = f.Location
5357	}
5358	return json.Marshal(objectMap)
5359}
5360
5361// FabricCollection collection of fabric details.
5362type FabricCollection struct {
5363	autorest.Response `json:"-"`
5364	// Value - The fabric details.
5365	Value *[]Fabric `json:"value,omitempty"`
5366	// NextLink - The value of next link.
5367	NextLink *string `json:"nextLink,omitempty"`
5368}
5369
5370// FabricCollectionIterator provides access to a complete listing of Fabric values.
5371type FabricCollectionIterator struct {
5372	i    int
5373	page FabricCollectionPage
5374}
5375
5376// NextWithContext advances to the next value.  If there was an error making
5377// the request the iterator does not advance and the error is returned.
5378func (iter *FabricCollectionIterator) NextWithContext(ctx context.Context) (err error) {
5379	if tracing.IsEnabled() {
5380		ctx = tracing.StartSpan(ctx, fqdn+"/FabricCollectionIterator.NextWithContext")
5381		defer func() {
5382			sc := -1
5383			if iter.Response().Response.Response != nil {
5384				sc = iter.Response().Response.Response.StatusCode
5385			}
5386			tracing.EndSpan(ctx, sc, err)
5387		}()
5388	}
5389	iter.i++
5390	if iter.i < len(iter.page.Values()) {
5391		return nil
5392	}
5393	err = iter.page.NextWithContext(ctx)
5394	if err != nil {
5395		iter.i--
5396		return err
5397	}
5398	iter.i = 0
5399	return nil
5400}
5401
5402// Next advances to the next value.  If there was an error making
5403// the request the iterator does not advance and the error is returned.
5404// Deprecated: Use NextWithContext() instead.
5405func (iter *FabricCollectionIterator) Next() error {
5406	return iter.NextWithContext(context.Background())
5407}
5408
5409// NotDone returns true if the enumeration should be started or is not yet complete.
5410func (iter FabricCollectionIterator) NotDone() bool {
5411	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5412}
5413
5414// Response returns the raw server response from the last page request.
5415func (iter FabricCollectionIterator) Response() FabricCollection {
5416	return iter.page.Response()
5417}
5418
5419// Value returns the current value or a zero-initialized value if the
5420// iterator has advanced beyond the end of the collection.
5421func (iter FabricCollectionIterator) Value() Fabric {
5422	if !iter.page.NotDone() {
5423		return Fabric{}
5424	}
5425	return iter.page.Values()[iter.i]
5426}
5427
5428// Creates a new instance of the FabricCollectionIterator type.
5429func NewFabricCollectionIterator(page FabricCollectionPage) FabricCollectionIterator {
5430	return FabricCollectionIterator{page: page}
5431}
5432
5433// IsEmpty returns true if the ListResult contains no values.
5434func (fc FabricCollection) IsEmpty() bool {
5435	return fc.Value == nil || len(*fc.Value) == 0
5436}
5437
5438// hasNextLink returns true if the NextLink is not empty.
5439func (fc FabricCollection) hasNextLink() bool {
5440	return fc.NextLink != nil && len(*fc.NextLink) != 0
5441}
5442
5443// fabricCollectionPreparer prepares a request to retrieve the next set of results.
5444// It returns nil if no more results exist.
5445func (fc FabricCollection) fabricCollectionPreparer(ctx context.Context) (*http.Request, error) {
5446	if !fc.hasNextLink() {
5447		return nil, nil
5448	}
5449	return autorest.Prepare((&http.Request{}).WithContext(ctx),
5450		autorest.AsJSON(),
5451		autorest.AsGet(),
5452		autorest.WithBaseURL(to.String(fc.NextLink)))
5453}
5454
5455// FabricCollectionPage contains a page of Fabric values.
5456type FabricCollectionPage struct {
5457	fn func(context.Context, FabricCollection) (FabricCollection, error)
5458	fc FabricCollection
5459}
5460
5461// NextWithContext advances to the next page of values.  If there was an error making
5462// the request the page does not advance and the error is returned.
5463func (page *FabricCollectionPage) NextWithContext(ctx context.Context) (err error) {
5464	if tracing.IsEnabled() {
5465		ctx = tracing.StartSpan(ctx, fqdn+"/FabricCollectionPage.NextWithContext")
5466		defer func() {
5467			sc := -1
5468			if page.Response().Response.Response != nil {
5469				sc = page.Response().Response.Response.StatusCode
5470			}
5471			tracing.EndSpan(ctx, sc, err)
5472		}()
5473	}
5474	for {
5475		next, err := page.fn(ctx, page.fc)
5476		if err != nil {
5477			return err
5478		}
5479		page.fc = next
5480		if !next.hasNextLink() || !next.IsEmpty() {
5481			break
5482		}
5483	}
5484	return nil
5485}
5486
5487// Next advances to the next page of values.  If there was an error making
5488// the request the page does not advance and the error is returned.
5489// Deprecated: Use NextWithContext() instead.
5490func (page *FabricCollectionPage) Next() error {
5491	return page.NextWithContext(context.Background())
5492}
5493
5494// NotDone returns true if the page enumeration should be started or is not yet complete.
5495func (page FabricCollectionPage) NotDone() bool {
5496	return !page.fc.IsEmpty()
5497}
5498
5499// Response returns the raw server response from the last page request.
5500func (page FabricCollectionPage) Response() FabricCollection {
5501	return page.fc
5502}
5503
5504// Values returns the slice of values for the current page or nil if there are no values.
5505func (page FabricCollectionPage) Values() []Fabric {
5506	if page.fc.IsEmpty() {
5507		return nil
5508	}
5509	return *page.fc.Value
5510}
5511
5512// Creates a new instance of the FabricCollectionPage type.
5513func NewFabricCollectionPage(cur FabricCollection, getNextPage func(context.Context, FabricCollection) (FabricCollection, error)) FabricCollectionPage {
5514	return FabricCollectionPage{
5515		fn: getNextPage,
5516		fc: cur,
5517	}
5518}
5519
5520// FabricCreationInput site details provided during the time of site creation
5521type FabricCreationInput struct {
5522	// Properties - Fabric creation input.
5523	Properties *FabricCreationInputProperties `json:"properties,omitempty"`
5524}
5525
5526// FabricCreationInputProperties properties of site details provided during the time of site creation
5527type FabricCreationInputProperties struct {
5528	// CustomDetails - Fabric provider specific creation input.
5529	CustomDetails BasicFabricSpecificCreationInput `json:"customDetails,omitempty"`
5530}
5531
5532// UnmarshalJSON is the custom unmarshaler for FabricCreationInputProperties struct.
5533func (fcip *FabricCreationInputProperties) UnmarshalJSON(body []byte) error {
5534	var m map[string]*json.RawMessage
5535	err := json.Unmarshal(body, &m)
5536	if err != nil {
5537		return err
5538	}
5539	for k, v := range m {
5540		switch k {
5541		case "customDetails":
5542			if v != nil {
5543				customDetails, err := unmarshalBasicFabricSpecificCreationInput(*v)
5544				if err != nil {
5545					return err
5546				}
5547				fcip.CustomDetails = customDetails
5548			}
5549		}
5550	}
5551
5552	return nil
5553}
5554
5555// FabricProperties fabric properties.
5556type FabricProperties struct {
5557	// FriendlyName - Friendly name of the fabric.
5558	FriendlyName *string `json:"friendlyName,omitempty"`
5559	// EncryptionDetails - Encryption details for the fabric.
5560	EncryptionDetails *EncryptionDetails `json:"encryptionDetails,omitempty"`
5561	// RolloverEncryptionDetails - Rollover encryption details for the fabric.
5562	RolloverEncryptionDetails *EncryptionDetails `json:"rolloverEncryptionDetails,omitempty"`
5563	// InternalIdentifier - Dra Registration Id.
5564	InternalIdentifier *string `json:"internalIdentifier,omitempty"`
5565	// BcdrState - BCDR state of the fabric.
5566	BcdrState *string `json:"bcdrState,omitempty"`
5567	// CustomDetails - Fabric specific settings.
5568	CustomDetails BasicFabricSpecificDetails `json:"customDetails,omitempty"`
5569	// HealthErrorDetails - Fabric health error details.
5570	HealthErrorDetails *[]HealthError `json:"healthErrorDetails,omitempty"`
5571	// Health - Health of fabric.
5572	Health *string `json:"health,omitempty"`
5573}
5574
5575// UnmarshalJSON is the custom unmarshaler for FabricProperties struct.
5576func (fp *FabricProperties) UnmarshalJSON(body []byte) error {
5577	var m map[string]*json.RawMessage
5578	err := json.Unmarshal(body, &m)
5579	if err != nil {
5580		return err
5581	}
5582	for k, v := range m {
5583		switch k {
5584		case "friendlyName":
5585			if v != nil {
5586				var friendlyName string
5587				err = json.Unmarshal(*v, &friendlyName)
5588				if err != nil {
5589					return err
5590				}
5591				fp.FriendlyName = &friendlyName
5592			}
5593		case "encryptionDetails":
5594			if v != nil {
5595				var encryptionDetails EncryptionDetails
5596				err = json.Unmarshal(*v, &encryptionDetails)
5597				if err != nil {
5598					return err
5599				}
5600				fp.EncryptionDetails = &encryptionDetails
5601			}
5602		case "rolloverEncryptionDetails":
5603			if v != nil {
5604				var rolloverEncryptionDetails EncryptionDetails
5605				err = json.Unmarshal(*v, &rolloverEncryptionDetails)
5606				if err != nil {
5607					return err
5608				}
5609				fp.RolloverEncryptionDetails = &rolloverEncryptionDetails
5610			}
5611		case "internalIdentifier":
5612			if v != nil {
5613				var internalIdentifier string
5614				err = json.Unmarshal(*v, &internalIdentifier)
5615				if err != nil {
5616					return err
5617				}
5618				fp.InternalIdentifier = &internalIdentifier
5619			}
5620		case "bcdrState":
5621			if v != nil {
5622				var bcdrState string
5623				err = json.Unmarshal(*v, &bcdrState)
5624				if err != nil {
5625					return err
5626				}
5627				fp.BcdrState = &bcdrState
5628			}
5629		case "customDetails":
5630			if v != nil {
5631				customDetails, err := unmarshalBasicFabricSpecificDetails(*v)
5632				if err != nil {
5633					return err
5634				}
5635				fp.CustomDetails = customDetails
5636			}
5637		case "healthErrorDetails":
5638			if v != nil {
5639				var healthErrorDetails []HealthError
5640				err = json.Unmarshal(*v, &healthErrorDetails)
5641				if err != nil {
5642					return err
5643				}
5644				fp.HealthErrorDetails = &healthErrorDetails
5645			}
5646		case "health":
5647			if v != nil {
5648				var health string
5649				err = json.Unmarshal(*v, &health)
5650				if err != nil {
5651					return err
5652				}
5653				fp.Health = &health
5654			}
5655		}
5656	}
5657
5658	return nil
5659}
5660
5661// FabricReplicationGroupTaskDetails this class represents the fabric replication group task details.
5662type FabricReplicationGroupTaskDetails struct {
5663	// SkippedReason - The skipped reason.
5664	SkippedReason *string `json:"skippedReason,omitempty"`
5665	// SkippedReasonString - The skipped reason string.
5666	SkippedReasonString *string `json:"skippedReasonString,omitempty"`
5667	// JobTask - The job entity.
5668	JobTask *JobEntity `json:"jobTask,omitempty"`
5669	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
5670	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
5671}
5672
5673// MarshalJSON is the custom marshaler for FabricReplicationGroupTaskDetails.
5674func (frgtd FabricReplicationGroupTaskDetails) MarshalJSON() ([]byte, error) {
5675	frgtd.InstanceType = InstanceTypeFabricReplicationGroupTaskDetails
5676	objectMap := make(map[string]interface{})
5677	if frgtd.SkippedReason != nil {
5678		objectMap["skippedReason"] = frgtd.SkippedReason
5679	}
5680	if frgtd.SkippedReasonString != nil {
5681		objectMap["skippedReasonString"] = frgtd.SkippedReasonString
5682	}
5683	if frgtd.JobTask != nil {
5684		objectMap["jobTask"] = frgtd.JobTask
5685	}
5686	if frgtd.InstanceType != "" {
5687		objectMap["instanceType"] = frgtd.InstanceType
5688	}
5689	return json.Marshal(objectMap)
5690}
5691
5692// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5693func (frgtd FabricReplicationGroupTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
5694	return nil, false
5695}
5696
5697// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5698func (frgtd FabricReplicationGroupTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
5699	return nil, false
5700}
5701
5702// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5703func (frgtd FabricReplicationGroupTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
5704	return &frgtd, true
5705}
5706
5707// AsJobTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5708func (frgtd FabricReplicationGroupTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
5709	return nil, false
5710}
5711
5712// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5713func (frgtd FabricReplicationGroupTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
5714	return nil, false
5715}
5716
5717// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5718func (frgtd FabricReplicationGroupTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
5719	return nil, false
5720}
5721
5722// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5723func (frgtd FabricReplicationGroupTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
5724	return nil, false
5725}
5726
5727// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5728func (frgtd FabricReplicationGroupTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
5729	return nil, false
5730}
5731
5732// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5733func (frgtd FabricReplicationGroupTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
5734	return nil, false
5735}
5736
5737// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for FabricReplicationGroupTaskDetails.
5738func (frgtd FabricReplicationGroupTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
5739	return &frgtd, true
5740}
5741
5742// BasicFabricSpecificCreateNetworkMappingInput input details specific to fabrics during Network Mapping.
5743type BasicFabricSpecificCreateNetworkMappingInput interface {
5744	AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool)
5745	AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool)
5746	AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool)
5747	AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool)
5748}
5749
5750// FabricSpecificCreateNetworkMappingInput input details specific to fabrics during Network Mapping.
5751type FabricSpecificCreateNetworkMappingInput struct {
5752	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
5753	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
5754}
5755
5756func unmarshalBasicFabricSpecificCreateNetworkMappingInput(body []byte) (BasicFabricSpecificCreateNetworkMappingInput, error) {
5757	var m map[string]interface{}
5758	err := json.Unmarshal(body, &m)
5759	if err != nil {
5760		return nil, err
5761	}
5762
5763	switch m["instanceType"] {
5764	case string(InstanceTypeAzureToAzure):
5765		var atacnmi AzureToAzureCreateNetworkMappingInput
5766		err := json.Unmarshal(body, &atacnmi)
5767		return atacnmi, err
5768	case string(InstanceTypeVmmToAzure):
5769		var vtacnmi VmmToAzureCreateNetworkMappingInput
5770		err := json.Unmarshal(body, &vtacnmi)
5771		return vtacnmi, err
5772	case string(InstanceTypeVmmToVmm):
5773		var vtvcnmi VmmToVmmCreateNetworkMappingInput
5774		err := json.Unmarshal(body, &vtvcnmi)
5775		return vtvcnmi, err
5776	default:
5777		var fscnmi FabricSpecificCreateNetworkMappingInput
5778		err := json.Unmarshal(body, &fscnmi)
5779		return fscnmi, err
5780	}
5781}
5782func unmarshalBasicFabricSpecificCreateNetworkMappingInputArray(body []byte) ([]BasicFabricSpecificCreateNetworkMappingInput, error) {
5783	var rawMessages []*json.RawMessage
5784	err := json.Unmarshal(body, &rawMessages)
5785	if err != nil {
5786		return nil, err
5787	}
5788
5789	fscnmiArray := make([]BasicFabricSpecificCreateNetworkMappingInput, len(rawMessages))
5790
5791	for index, rawMessage := range rawMessages {
5792		fscnmi, err := unmarshalBasicFabricSpecificCreateNetworkMappingInput(*rawMessage)
5793		if err != nil {
5794			return nil, err
5795		}
5796		fscnmiArray[index] = fscnmi
5797	}
5798	return fscnmiArray, nil
5799}
5800
5801// MarshalJSON is the custom marshaler for FabricSpecificCreateNetworkMappingInput.
5802func (fscnmi FabricSpecificCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
5803	fscnmi.InstanceType = InstanceTypeFabricSpecificCreateNetworkMappingInput
5804	objectMap := make(map[string]interface{})
5805	if fscnmi.InstanceType != "" {
5806		objectMap["instanceType"] = fscnmi.InstanceType
5807	}
5808	return json.Marshal(objectMap)
5809}
5810
5811// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5812func (fscnmi FabricSpecificCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
5813	return nil, false
5814}
5815
5816// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5817func (fscnmi FabricSpecificCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
5818	return nil, false
5819}
5820
5821// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5822func (fscnmi FabricSpecificCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
5823	return nil, false
5824}
5825
5826// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5827func (fscnmi FabricSpecificCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
5828	return &fscnmi, true
5829}
5830
5831// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for FabricSpecificCreateNetworkMappingInput.
5832func (fscnmi FabricSpecificCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
5833	return &fscnmi, true
5834}
5835
5836// BasicFabricSpecificCreationInput fabric provider specific settings.
5837type BasicFabricSpecificCreationInput interface {
5838	AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool)
5839	AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool)
5840	AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool)
5841	AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool)
5842}
5843
5844// FabricSpecificCreationInput fabric provider specific settings.
5845type FabricSpecificCreationInput struct {
5846	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
5847	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
5848}
5849
5850func unmarshalBasicFabricSpecificCreationInput(body []byte) (BasicFabricSpecificCreationInput, error) {
5851	var m map[string]interface{}
5852	err := json.Unmarshal(body, &m)
5853	if err != nil {
5854		return nil, err
5855	}
5856
5857	switch m["instanceType"] {
5858	case string(InstanceTypeAzure):
5859		var afci AzureFabricCreationInput
5860		err := json.Unmarshal(body, &afci)
5861		return afci, err
5862	case string(InstanceTypeInMageRcm):
5863		var imrfci InMageRcmFabricCreationInput
5864		err := json.Unmarshal(body, &imrfci)
5865		return imrfci, err
5866	case string(InstanceTypeVMwareV2):
5867		var vmvfci VMwareV2FabricCreationInput
5868		err := json.Unmarshal(body, &vmvfci)
5869		return vmvfci, err
5870	default:
5871		var fsci FabricSpecificCreationInput
5872		err := json.Unmarshal(body, &fsci)
5873		return fsci, err
5874	}
5875}
5876func unmarshalBasicFabricSpecificCreationInputArray(body []byte) ([]BasicFabricSpecificCreationInput, error) {
5877	var rawMessages []*json.RawMessage
5878	err := json.Unmarshal(body, &rawMessages)
5879	if err != nil {
5880		return nil, err
5881	}
5882
5883	fsciArray := make([]BasicFabricSpecificCreationInput, len(rawMessages))
5884
5885	for index, rawMessage := range rawMessages {
5886		fsci, err := unmarshalBasicFabricSpecificCreationInput(*rawMessage)
5887		if err != nil {
5888			return nil, err
5889		}
5890		fsciArray[index] = fsci
5891	}
5892	return fsciArray, nil
5893}
5894
5895// MarshalJSON is the custom marshaler for FabricSpecificCreationInput.
5896func (fsci FabricSpecificCreationInput) MarshalJSON() ([]byte, error) {
5897	fsci.InstanceType = InstanceTypeFabricSpecificCreationInput
5898	objectMap := make(map[string]interface{})
5899	if fsci.InstanceType != "" {
5900		objectMap["instanceType"] = fsci.InstanceType
5901	}
5902	return json.Marshal(objectMap)
5903}
5904
5905// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5906func (fsci FabricSpecificCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
5907	return nil, false
5908}
5909
5910// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5911func (fsci FabricSpecificCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
5912	return nil, false
5913}
5914
5915// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5916func (fsci FabricSpecificCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
5917	return nil, false
5918}
5919
5920// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5921func (fsci FabricSpecificCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
5922	return &fsci, true
5923}
5924
5925// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for FabricSpecificCreationInput.
5926func (fsci FabricSpecificCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
5927	return &fsci, true
5928}
5929
5930// BasicFabricSpecificDetails fabric specific details.
5931type BasicFabricSpecificDetails interface {
5932	AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool)
5933	AsHyperVSiteDetails() (*HyperVSiteDetails, bool)
5934	AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool)
5935	AsVmmDetails() (*VmmDetails, bool)
5936	AsVMwareDetails() (*VMwareDetails, bool)
5937	AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool)
5938	AsFabricSpecificDetails() (*FabricSpecificDetails, bool)
5939}
5940
5941// FabricSpecificDetails fabric specific details.
5942type FabricSpecificDetails struct {
5943	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
5944	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
5945}
5946
5947func unmarshalBasicFabricSpecificDetails(body []byte) (BasicFabricSpecificDetails, error) {
5948	var m map[string]interface{}
5949	err := json.Unmarshal(body, &m)
5950	if err != nil {
5951		return nil, err
5952	}
5953
5954	switch m["instanceType"] {
5955	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure):
5956		var afsd AzureFabricSpecificDetails
5957		err := json.Unmarshal(body, &afsd)
5958		return afsd, err
5959	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite):
5960		var hvsd HyperVSiteDetails
5961		err := json.Unmarshal(body, &hvsd)
5962		return hvsd, err
5963	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm):
5964		var imrfsd InMageRcmFabricSpecificDetails
5965		err := json.Unmarshal(body, &imrfsd)
5966		return imrfsd, err
5967	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM):
5968		var vd VmmDetails
5969		err := json.Unmarshal(body, &vd)
5970		return vd, err
5971	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware):
5972		var vmd VMwareDetails
5973		err := json.Unmarshal(body, &vmd)
5974		return vmd, err
5975	case string(InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2):
5976		var vmvfsd VMwareV2FabricSpecificDetails
5977		err := json.Unmarshal(body, &vmvfsd)
5978		return vmvfsd, err
5979	default:
5980		var fsd FabricSpecificDetails
5981		err := json.Unmarshal(body, &fsd)
5982		return fsd, err
5983	}
5984}
5985func unmarshalBasicFabricSpecificDetailsArray(body []byte) ([]BasicFabricSpecificDetails, error) {
5986	var rawMessages []*json.RawMessage
5987	err := json.Unmarshal(body, &rawMessages)
5988	if err != nil {
5989		return nil, err
5990	}
5991
5992	fsdArray := make([]BasicFabricSpecificDetails, len(rawMessages))
5993
5994	for index, rawMessage := range rawMessages {
5995		fsd, err := unmarshalBasicFabricSpecificDetails(*rawMessage)
5996		if err != nil {
5997			return nil, err
5998		}
5999		fsdArray[index] = fsd
6000	}
6001	return fsdArray, nil
6002}
6003
6004// MarshalJSON is the custom marshaler for FabricSpecificDetails.
6005func (fsd FabricSpecificDetails) MarshalJSON() ([]byte, error) {
6006	fsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails
6007	objectMap := make(map[string]interface{})
6008	if fsd.InstanceType != "" {
6009		objectMap["instanceType"] = fsd.InstanceType
6010	}
6011	return json.Marshal(objectMap)
6012}
6013
6014// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6015func (fsd FabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
6016	return nil, false
6017}
6018
6019// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6020func (fsd FabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
6021	return nil, false
6022}
6023
6024// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6025func (fsd FabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
6026	return nil, false
6027}
6028
6029// AsVmmDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6030func (fsd FabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
6031	return nil, false
6032}
6033
6034// AsVMwareDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6035func (fsd FabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
6036	return nil, false
6037}
6038
6039// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6040func (fsd FabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
6041	return nil, false
6042}
6043
6044// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6045func (fsd FabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
6046	return &fsd, true
6047}
6048
6049// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for FabricSpecificDetails.
6050func (fsd FabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
6051	return &fsd, true
6052}
6053
6054// BasicFabricSpecificUpdateNetworkMappingInput input details specific to fabrics during Network Mapping.
6055type BasicFabricSpecificUpdateNetworkMappingInput interface {
6056	AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool)
6057	AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool)
6058	AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool)
6059	AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool)
6060}
6061
6062// FabricSpecificUpdateNetworkMappingInput input details specific to fabrics during Network Mapping.
6063type FabricSpecificUpdateNetworkMappingInput struct {
6064	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
6065	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
6066}
6067
6068func unmarshalBasicFabricSpecificUpdateNetworkMappingInput(body []byte) (BasicFabricSpecificUpdateNetworkMappingInput, error) {
6069	var m map[string]interface{}
6070	err := json.Unmarshal(body, &m)
6071	if err != nil {
6072		return nil, err
6073	}
6074
6075	switch m["instanceType"] {
6076	case string(InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure):
6077		var ataunmi AzureToAzureUpdateNetworkMappingInput
6078		err := json.Unmarshal(body, &ataunmi)
6079		return ataunmi, err
6080	case string(InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure):
6081		var vtaunmi VmmToAzureUpdateNetworkMappingInput
6082		err := json.Unmarshal(body, &vtaunmi)
6083		return vtaunmi, err
6084	case string(InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm):
6085		var vtvunmi VmmToVmmUpdateNetworkMappingInput
6086		err := json.Unmarshal(body, &vtvunmi)
6087		return vtvunmi, err
6088	default:
6089		var fsunmi FabricSpecificUpdateNetworkMappingInput
6090		err := json.Unmarshal(body, &fsunmi)
6091		return fsunmi, err
6092	}
6093}
6094func unmarshalBasicFabricSpecificUpdateNetworkMappingInputArray(body []byte) ([]BasicFabricSpecificUpdateNetworkMappingInput, error) {
6095	var rawMessages []*json.RawMessage
6096	err := json.Unmarshal(body, &rawMessages)
6097	if err != nil {
6098		return nil, err
6099	}
6100
6101	fsunmiArray := make([]BasicFabricSpecificUpdateNetworkMappingInput, len(rawMessages))
6102
6103	for index, rawMessage := range rawMessages {
6104		fsunmi, err := unmarshalBasicFabricSpecificUpdateNetworkMappingInput(*rawMessage)
6105		if err != nil {
6106			return nil, err
6107		}
6108		fsunmiArray[index] = fsunmi
6109	}
6110	return fsunmiArray, nil
6111}
6112
6113// MarshalJSON is the custom marshaler for FabricSpecificUpdateNetworkMappingInput.
6114func (fsunmi FabricSpecificUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
6115	fsunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput
6116	objectMap := make(map[string]interface{})
6117	if fsunmi.InstanceType != "" {
6118		objectMap["instanceType"] = fsunmi.InstanceType
6119	}
6120	return json.Marshal(objectMap)
6121}
6122
6123// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6124func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
6125	return nil, false
6126}
6127
6128// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6129func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
6130	return nil, false
6131}
6132
6133// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6134func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
6135	return nil, false
6136}
6137
6138// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6139func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
6140	return &fsunmi, true
6141}
6142
6143// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for FabricSpecificUpdateNetworkMappingInput.
6144func (fsunmi FabricSpecificUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
6145	return &fsunmi, true
6146}
6147
6148// FailoverJobDetails this class represents the details for a failover job.
6149type FailoverJobDetails struct {
6150	// ProtectedItemDetails - The test VM details.
6151	ProtectedItemDetails *[]FailoverReplicationProtectedItemDetails `json:"protectedItemDetails,omitempty"`
6152	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
6153	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
6154	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
6155	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
6156}
6157
6158// MarshalJSON is the custom marshaler for FailoverJobDetails.
6159func (fjd FailoverJobDetails) MarshalJSON() ([]byte, error) {
6160	fjd.InstanceType = InstanceTypeFailoverJobDetails
6161	objectMap := make(map[string]interface{})
6162	if fjd.ProtectedItemDetails != nil {
6163		objectMap["protectedItemDetails"] = fjd.ProtectedItemDetails
6164	}
6165	if fjd.AffectedObjectDetails != nil {
6166		objectMap["affectedObjectDetails"] = fjd.AffectedObjectDetails
6167	}
6168	if fjd.InstanceType != "" {
6169		objectMap["instanceType"] = fjd.InstanceType
6170	}
6171	return json.Marshal(objectMap)
6172}
6173
6174// AsAsrJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6175func (fjd FailoverJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
6176	return nil, false
6177}
6178
6179// AsExportJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6180func (fjd FailoverJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
6181	return nil, false
6182}
6183
6184// AsFailoverJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6185func (fjd FailoverJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
6186	return &fjd, true
6187}
6188
6189// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6190func (fjd FailoverJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
6191	return nil, false
6192}
6193
6194// AsTestFailoverJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6195func (fjd FailoverJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
6196	return nil, false
6197}
6198
6199// AsJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6200func (fjd FailoverJobDetails) AsJobDetails() (*JobDetails, bool) {
6201	return nil, false
6202}
6203
6204// AsBasicJobDetails is the BasicJobDetails implementation for FailoverJobDetails.
6205func (fjd FailoverJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
6206	return &fjd, true
6207}
6208
6209// FailoverProcessServerRequest request to failover a process server.
6210type FailoverProcessServerRequest struct {
6211	// Properties - The properties of the PS Failover request.
6212	Properties *FailoverProcessServerRequestProperties `json:"properties,omitempty"`
6213}
6214
6215// FailoverProcessServerRequestProperties the properties of the Failover Process Server request.
6216type FailoverProcessServerRequestProperties struct {
6217	// ContainerName - The container identifier.
6218	ContainerName *string `json:"containerName,omitempty"`
6219	// SourceProcessServerID - The source process server.
6220	SourceProcessServerID *string `json:"sourceProcessServerId,omitempty"`
6221	// TargetProcessServerID - The new process server.
6222	TargetProcessServerID *string `json:"targetProcessServerId,omitempty"`
6223	// VmsToMigrate - The VMS to migrate.
6224	VmsToMigrate *[]string `json:"vmsToMigrate,omitempty"`
6225	// UpdateType - A value for failover type. It can be systemlevel/serverlevel
6226	UpdateType *string `json:"updateType,omitempty"`
6227}
6228
6229// FailoverReplicationProtectedItemDetails failover details for a replication protected item.
6230type FailoverReplicationProtectedItemDetails struct {
6231	// Name - The name.
6232	Name *string `json:"name,omitempty"`
6233	// FriendlyName - The friendly name.
6234	FriendlyName *string `json:"friendlyName,omitempty"`
6235	// TestVMName - The test Vm name.
6236	TestVMName *string `json:"testVmName,omitempty"`
6237	// TestVMFriendlyName - The test Vm friendly name.
6238	TestVMFriendlyName *string `json:"testVmFriendlyName,omitempty"`
6239	// NetworkConnectionStatus - The network connection status.
6240	NetworkConnectionStatus *string `json:"networkConnectionStatus,omitempty"`
6241	// NetworkFriendlyName - The network friendly name.
6242	NetworkFriendlyName *string `json:"networkFriendlyName,omitempty"`
6243	// Subnet - The network subnet.
6244	Subnet *string `json:"subnet,omitempty"`
6245	// RecoveryPointID - The recovery point Id.
6246	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
6247	// RecoveryPointTime - The recovery point time.
6248	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
6249}
6250
6251// BasicGroupTaskDetails this class represents the group task details when parent child relationship exists in the
6252// drill down.
6253type BasicGroupTaskDetails interface {
6254	AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool)
6255	AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool)
6256	AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool)
6257	AsGroupTaskDetails() (*GroupTaskDetails, bool)
6258}
6259
6260// GroupTaskDetails this class represents the group task details when parent child relationship exists in the
6261// drill down.
6262type GroupTaskDetails struct {
6263	// ChildTasks - The child tasks.
6264	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
6265	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
6266	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
6267}
6268
6269func unmarshalBasicGroupTaskDetails(body []byte) (BasicGroupTaskDetails, error) {
6270	var m map[string]interface{}
6271	err := json.Unmarshal(body, &m)
6272	if err != nil {
6273		return nil, err
6274	}
6275
6276	switch m["instanceType"] {
6277	case string(InstanceTypeInlineWorkflowTaskDetails):
6278		var iwtd InlineWorkflowTaskDetails
6279		err := json.Unmarshal(body, &iwtd)
6280		return iwtd, err
6281	case string(InstanceTypeRecoveryPlanGroupTaskDetails):
6282		var rpgtd RecoveryPlanGroupTaskDetails
6283		err := json.Unmarshal(body, &rpgtd)
6284		return rpgtd, err
6285	case string(InstanceTypeRecoveryPlanShutdownGroupTaskDetails):
6286		var rpsgtd RecoveryPlanShutdownGroupTaskDetails
6287		err := json.Unmarshal(body, &rpsgtd)
6288		return rpsgtd, err
6289	default:
6290		var gtd GroupTaskDetails
6291		err := json.Unmarshal(body, &gtd)
6292		return gtd, err
6293	}
6294}
6295func unmarshalBasicGroupTaskDetailsArray(body []byte) ([]BasicGroupTaskDetails, error) {
6296	var rawMessages []*json.RawMessage
6297	err := json.Unmarshal(body, &rawMessages)
6298	if err != nil {
6299		return nil, err
6300	}
6301
6302	gtdArray := make([]BasicGroupTaskDetails, len(rawMessages))
6303
6304	for index, rawMessage := range rawMessages {
6305		gtd, err := unmarshalBasicGroupTaskDetails(*rawMessage)
6306		if err != nil {
6307			return nil, err
6308		}
6309		gtdArray[index] = gtd
6310	}
6311	return gtdArray, nil
6312}
6313
6314// MarshalJSON is the custom marshaler for GroupTaskDetails.
6315func (gtd GroupTaskDetails) MarshalJSON() ([]byte, error) {
6316	gtd.InstanceType = InstanceTypeGroupTaskDetails
6317	objectMap := make(map[string]interface{})
6318	if gtd.ChildTasks != nil {
6319		objectMap["childTasks"] = gtd.ChildTasks
6320	}
6321	if gtd.InstanceType != "" {
6322		objectMap["instanceType"] = gtd.InstanceType
6323	}
6324	return json.Marshal(objectMap)
6325}
6326
6327// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6328func (gtd GroupTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
6329	return nil, false
6330}
6331
6332// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6333func (gtd GroupTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
6334	return nil, false
6335}
6336
6337// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6338func (gtd GroupTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
6339	return nil, false
6340}
6341
6342// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6343func (gtd GroupTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
6344	return &gtd, true
6345}
6346
6347// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for GroupTaskDetails.
6348func (gtd GroupTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
6349	return &gtd, true
6350}
6351
6352// HealthError health Error
6353type HealthError struct {
6354	// 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.
6355	InnerHealthErrors *[]InnerHealthError `json:"innerHealthErrors,omitempty"`
6356	// ErrorSource - Source of error.
6357	ErrorSource *string `json:"errorSource,omitempty"`
6358	// ErrorType - Type of error.
6359	ErrorType *string `json:"errorType,omitempty"`
6360	// ErrorLevel - Level of error.
6361	ErrorLevel *string `json:"errorLevel,omitempty"`
6362	// ErrorCategory - Category of error.
6363	ErrorCategory *string `json:"errorCategory,omitempty"`
6364	// ErrorCode - Error code.
6365	ErrorCode *string `json:"errorCode,omitempty"`
6366	// SummaryMessage - Summary message of the entity.
6367	SummaryMessage *string `json:"summaryMessage,omitempty"`
6368	// ErrorMessage - Error message.
6369	ErrorMessage *string `json:"errorMessage,omitempty"`
6370	// PossibleCauses - Possible causes of error.
6371	PossibleCauses *string `json:"possibleCauses,omitempty"`
6372	// RecommendedAction - Recommended action to resolve error.
6373	RecommendedAction *string `json:"recommendedAction,omitempty"`
6374	// CreationTimeUtc - Error creation time (UTC)
6375	CreationTimeUtc *date.Time `json:"creationTimeUtc,omitempty"`
6376	// RecoveryProviderErrorMessage - DRA error message.
6377	RecoveryProviderErrorMessage *string `json:"recoveryProviderErrorMessage,omitempty"`
6378	// EntityID - ID of the entity.
6379	EntityID *string `json:"entityId,omitempty"`
6380	// ErrorID - The health error unique id.
6381	ErrorID *string `json:"errorId,omitempty"`
6382	// CustomerResolvability - Value indicating whether the health error is customer resolvable. Possible values include: 'Allowed', 'NotAllowed'
6383	CustomerResolvability HealthErrorCustomerResolvability `json:"customerResolvability,omitempty"`
6384}
6385
6386// HealthErrorSummary class to define the summary of the health error details.
6387type HealthErrorSummary struct {
6388	// SummaryCode - The code of the health error.
6389	SummaryCode *string `json:"summaryCode,omitempty"`
6390	// Category - The category of the health error. Possible values include: 'None', 'Replication', 'TestFailover', 'Configuration', 'FabricInfrastructure', 'VersionExpiry', 'AgentAutoUpdate'
6391	Category HealthErrorCategory `json:"category,omitempty"`
6392	// Severity - Severity of error. Possible values include: 'NONE', 'Warning', 'Error', 'Info'
6393	Severity Severity `json:"severity,omitempty"`
6394	// SummaryMessage - The summary message of the health error.
6395	SummaryMessage *string `json:"summaryMessage,omitempty"`
6396	// AffectedResourceType - The type of affected ARM resource.
6397	AffectedResourceType *string `json:"affectedResourceType,omitempty"`
6398	// AffectedResourceSubtype - The sub type of any subcomponent within the ARM resource that this might be applicable. Value remains null if not applicable.
6399	AffectedResourceSubtype *string `json:"affectedResourceSubtype,omitempty"`
6400	// 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.
6401	AffectedResourceCorrelationIds *[]string `json:"affectedResourceCorrelationIds,omitempty"`
6402}
6403
6404// HyperVReplica2012EventDetails model class for event details of a HyperVReplica E2E event.
6405type HyperVReplica2012EventDetails struct {
6406	// ContainerName - The container friendly name.
6407	ContainerName *string `json:"containerName,omitempty"`
6408	// FabricName - The fabric friendly name.
6409	FabricName *string `json:"fabricName,omitempty"`
6410	// RemoteContainerName - The remote container name.
6411	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
6412	// RemoteFabricName - The remote fabric name.
6413	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
6414	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
6415	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
6416}
6417
6418// MarshalJSON is the custom marshaler for HyperVReplica2012EventDetails.
6419func (hvr2ed HyperVReplica2012EventDetails) MarshalJSON() ([]byte, error) {
6420	hvr2ed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012
6421	objectMap := make(map[string]interface{})
6422	if hvr2ed.ContainerName != nil {
6423		objectMap["containerName"] = hvr2ed.ContainerName
6424	}
6425	if hvr2ed.FabricName != nil {
6426		objectMap["fabricName"] = hvr2ed.FabricName
6427	}
6428	if hvr2ed.RemoteContainerName != nil {
6429		objectMap["remoteContainerName"] = hvr2ed.RemoteContainerName
6430	}
6431	if hvr2ed.RemoteFabricName != nil {
6432		objectMap["remoteFabricName"] = hvr2ed.RemoteFabricName
6433	}
6434	if hvr2ed.InstanceType != "" {
6435		objectMap["instanceType"] = hvr2ed.InstanceType
6436	}
6437	return json.Marshal(objectMap)
6438}
6439
6440// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6441func (hvr2ed HyperVReplica2012EventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
6442	return nil, false
6443}
6444
6445// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6446func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
6447	return &hvr2ed, true
6448}
6449
6450// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6451func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
6452	return nil, false
6453}
6454
6455// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6456func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
6457	return nil, false
6458}
6459
6460// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6461func (hvr2ed HyperVReplica2012EventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
6462	return nil, false
6463}
6464
6465// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6466func (hvr2ed HyperVReplica2012EventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
6467	return nil, false
6468}
6469
6470// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6471func (hvr2ed HyperVReplica2012EventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
6472	return nil, false
6473}
6474
6475// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6476func (hvr2ed HyperVReplica2012EventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
6477	return nil, false
6478}
6479
6480// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012EventDetails.
6481func (hvr2ed HyperVReplica2012EventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
6482	return &hvr2ed, true
6483}
6484
6485// HyperVReplica2012R2EventDetails model class for event details of a HyperVReplica blue E2E event.
6486type HyperVReplica2012R2EventDetails struct {
6487	// ContainerName - The container friendly name.
6488	ContainerName *string `json:"containerName,omitempty"`
6489	// FabricName - The fabric friendly name.
6490	FabricName *string `json:"fabricName,omitempty"`
6491	// RemoteContainerName - The remote container name.
6492	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
6493	// RemoteFabricName - The remote fabric name.
6494	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
6495	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
6496	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
6497}
6498
6499// MarshalJSON is the custom marshaler for HyperVReplica2012R2EventDetails.
6500func (hvr2ed HyperVReplica2012R2EventDetails) MarshalJSON() ([]byte, error) {
6501	hvr2ed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2
6502	objectMap := make(map[string]interface{})
6503	if hvr2ed.ContainerName != nil {
6504		objectMap["containerName"] = hvr2ed.ContainerName
6505	}
6506	if hvr2ed.FabricName != nil {
6507		objectMap["fabricName"] = hvr2ed.FabricName
6508	}
6509	if hvr2ed.RemoteContainerName != nil {
6510		objectMap["remoteContainerName"] = hvr2ed.RemoteContainerName
6511	}
6512	if hvr2ed.RemoteFabricName != nil {
6513		objectMap["remoteFabricName"] = hvr2ed.RemoteFabricName
6514	}
6515	if hvr2ed.InstanceType != "" {
6516		objectMap["instanceType"] = hvr2ed.InstanceType
6517	}
6518	return json.Marshal(objectMap)
6519}
6520
6521// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6522func (hvr2ed HyperVReplica2012R2EventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
6523	return nil, false
6524}
6525
6526// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6527func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
6528	return nil, false
6529}
6530
6531// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6532func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
6533	return &hvr2ed, true
6534}
6535
6536// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6537func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
6538	return nil, false
6539}
6540
6541// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6542func (hvr2ed HyperVReplica2012R2EventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
6543	return nil, false
6544}
6545
6546// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6547func (hvr2ed HyperVReplica2012R2EventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
6548	return nil, false
6549}
6550
6551// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6552func (hvr2ed HyperVReplica2012R2EventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
6553	return nil, false
6554}
6555
6556// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6557func (hvr2ed HyperVReplica2012R2EventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
6558	return nil, false
6559}
6560
6561// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplica2012R2EventDetails.
6562func (hvr2ed HyperVReplica2012R2EventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
6563	return &hvr2ed, true
6564}
6565
6566// HyperVReplicaAzureApplyRecoveryPointInput applyRecoveryPoint input specific to HyperVReplicaAzure
6567// provider.
6568type HyperVReplicaAzureApplyRecoveryPointInput struct {
6569	// VaultLocation - The vault location where the recovery Vm resides.
6570	VaultLocation *string `json:"vaultLocation,omitempty"`
6571	// PrimaryKekCertificatePfx - The primary kek certificate pfx.
6572	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
6573	// SecondaryKekCertificatePfx - The secondary kek certificate pfx.
6574	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
6575	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
6576	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
6577}
6578
6579// MarshalJSON is the custom marshaler for HyperVReplicaAzureApplyRecoveryPointInput.
6580func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
6581	hvraarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure
6582	objectMap := make(map[string]interface{})
6583	if hvraarpi.VaultLocation != nil {
6584		objectMap["vaultLocation"] = hvraarpi.VaultLocation
6585	}
6586	if hvraarpi.PrimaryKekCertificatePfx != nil {
6587		objectMap["primaryKekCertificatePfx"] = hvraarpi.PrimaryKekCertificatePfx
6588	}
6589	if hvraarpi.SecondaryKekCertificatePfx != nil {
6590		objectMap["secondaryKekCertificatePfx"] = hvraarpi.SecondaryKekCertificatePfx
6591	}
6592	if hvraarpi.InstanceType != "" {
6593		objectMap["instanceType"] = hvraarpi.InstanceType
6594	}
6595	return json.Marshal(objectMap)
6596}
6597
6598// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6599func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
6600	return nil, false
6601}
6602
6603// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6604func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
6605	return &hvraarpi, true
6606}
6607
6608// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6609func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
6610	return nil, false
6611}
6612
6613// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6614func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
6615	return nil, false
6616}
6617
6618// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6619func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
6620	return nil, false
6621}
6622
6623// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for HyperVReplicaAzureApplyRecoveryPointInput.
6624func (hvraarpi HyperVReplicaAzureApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
6625	return &hvraarpi, true
6626}
6627
6628// HyperVReplicaAzureEnableProtectionInput azure specific enable protection input.
6629type HyperVReplicaAzureEnableProtectionInput struct {
6630	// HvHostVMID - The Hyper-V host Vm Id.
6631	HvHostVMID *string `json:"hvHostVmId,omitempty"`
6632	// VMName - The Vm Name.
6633	VMName *string `json:"vmName,omitempty"`
6634	// OsType - The OS type associated with vm.
6635	OsType *string `json:"osType,omitempty"`
6636	// VhdID - The OS disk VHD id associated with vm.
6637	VhdID *string `json:"vhdId,omitempty"`
6638	// TargetStorageAccountID - The storage account name.
6639	TargetStorageAccountID *string `json:"targetStorageAccountId,omitempty"`
6640	// TargetAzureNetworkID - The selected target Azure network Id.
6641	TargetAzureNetworkID *string `json:"targetAzureNetworkId,omitempty"`
6642	// TargetAzureSubnetID - The selected target Azure subnet Id.
6643	TargetAzureSubnetID *string `json:"targetAzureSubnetId,omitempty"`
6644	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
6645	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
6646	// TargetAzureVMName - The target azure Vm Name.
6647	TargetAzureVMName *string `json:"targetAzureVmName,omitempty"`
6648	// LogStorageAccountID - The storage account to be used for logging during replication.
6649	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
6650	// DisksToInclude - The list of VHD IDs of disks to be protected.
6651	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
6652	// TargetAzureV1ResourceGroupID - The Id of the target resource group (for classic deployment) in which the failover VM is to be created.
6653	TargetAzureV1ResourceGroupID *string `json:"targetAzureV1ResourceGroupId,omitempty"`
6654	// TargetAzureV2ResourceGroupID - The Id of the target resource group (for resource manager deployment) in which the failover VM is to be created.
6655	TargetAzureV2ResourceGroupID *string `json:"targetAzureV2ResourceGroupId,omitempty"`
6656	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
6657	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
6658	// TargetAvailabilityZone - The target availability zone.
6659	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
6660	// TargetProximityPlacementGroupID - The proximity placement group ARM Id.
6661	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
6662	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
6663	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
6664}
6665
6666// MarshalJSON is the custom marshaler for HyperVReplicaAzureEnableProtectionInput.
6667func (hvraepi HyperVReplicaAzureEnableProtectionInput) MarshalJSON() ([]byte, error) {
6668	hvraepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure
6669	objectMap := make(map[string]interface{})
6670	if hvraepi.HvHostVMID != nil {
6671		objectMap["hvHostVmId"] = hvraepi.HvHostVMID
6672	}
6673	if hvraepi.VMName != nil {
6674		objectMap["vmName"] = hvraepi.VMName
6675	}
6676	if hvraepi.OsType != nil {
6677		objectMap["osType"] = hvraepi.OsType
6678	}
6679	if hvraepi.VhdID != nil {
6680		objectMap["vhdId"] = hvraepi.VhdID
6681	}
6682	if hvraepi.TargetStorageAccountID != nil {
6683		objectMap["targetStorageAccountId"] = hvraepi.TargetStorageAccountID
6684	}
6685	if hvraepi.TargetAzureNetworkID != nil {
6686		objectMap["targetAzureNetworkId"] = hvraepi.TargetAzureNetworkID
6687	}
6688	if hvraepi.TargetAzureSubnetID != nil {
6689		objectMap["targetAzureSubnetId"] = hvraepi.TargetAzureSubnetID
6690	}
6691	if hvraepi.EnableRdpOnTargetOption != nil {
6692		objectMap["enableRdpOnTargetOption"] = hvraepi.EnableRdpOnTargetOption
6693	}
6694	if hvraepi.TargetAzureVMName != nil {
6695		objectMap["targetAzureVmName"] = hvraepi.TargetAzureVMName
6696	}
6697	if hvraepi.LogStorageAccountID != nil {
6698		objectMap["logStorageAccountId"] = hvraepi.LogStorageAccountID
6699	}
6700	if hvraepi.DisksToInclude != nil {
6701		objectMap["disksToInclude"] = hvraepi.DisksToInclude
6702	}
6703	if hvraepi.TargetAzureV1ResourceGroupID != nil {
6704		objectMap["targetAzureV1ResourceGroupId"] = hvraepi.TargetAzureV1ResourceGroupID
6705	}
6706	if hvraepi.TargetAzureV2ResourceGroupID != nil {
6707		objectMap["targetAzureV2ResourceGroupId"] = hvraepi.TargetAzureV2ResourceGroupID
6708	}
6709	if hvraepi.UseManagedDisks != nil {
6710		objectMap["useManagedDisks"] = hvraepi.UseManagedDisks
6711	}
6712	if hvraepi.TargetAvailabilityZone != nil {
6713		objectMap["targetAvailabilityZone"] = hvraepi.TargetAvailabilityZone
6714	}
6715	if hvraepi.TargetProximityPlacementGroupID != nil {
6716		objectMap["targetProximityPlacementGroupId"] = hvraepi.TargetProximityPlacementGroupID
6717	}
6718	if hvraepi.InstanceType != "" {
6719		objectMap["instanceType"] = hvraepi.InstanceType
6720	}
6721	return json.Marshal(objectMap)
6722}
6723
6724// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6725func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
6726	return nil, false
6727}
6728
6729// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6730func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
6731	return &hvraepi, true
6732}
6733
6734// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6735func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
6736	return nil, false
6737}
6738
6739// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6740func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
6741	return nil, false
6742}
6743
6744// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6745func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
6746	return nil, false
6747}
6748
6749// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6750func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
6751	return nil, false
6752}
6753
6754// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6755func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
6756	return nil, false
6757}
6758
6759// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for HyperVReplicaAzureEnableProtectionInput.
6760func (hvraepi HyperVReplicaAzureEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
6761	return &hvraepi, true
6762}
6763
6764// HyperVReplicaAzureEventDetails model class for event details of a HyperVReplica E2A event.
6765type HyperVReplicaAzureEventDetails struct {
6766	// ContainerName - The container friendly name.
6767	ContainerName *string `json:"containerName,omitempty"`
6768	// FabricName - The fabric friendly name.
6769	FabricName *string `json:"fabricName,omitempty"`
6770	// RemoteContainerName - The remote container name.
6771	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
6772	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
6773	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
6774}
6775
6776// MarshalJSON is the custom marshaler for HyperVReplicaAzureEventDetails.
6777func (hvraed HyperVReplicaAzureEventDetails) MarshalJSON() ([]byte, error) {
6778	hvraed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure
6779	objectMap := make(map[string]interface{})
6780	if hvraed.ContainerName != nil {
6781		objectMap["containerName"] = hvraed.ContainerName
6782	}
6783	if hvraed.FabricName != nil {
6784		objectMap["fabricName"] = hvraed.FabricName
6785	}
6786	if hvraed.RemoteContainerName != nil {
6787		objectMap["remoteContainerName"] = hvraed.RemoteContainerName
6788	}
6789	if hvraed.InstanceType != "" {
6790		objectMap["instanceType"] = hvraed.InstanceType
6791	}
6792	return json.Marshal(objectMap)
6793}
6794
6795// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6796func (hvraed HyperVReplicaAzureEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
6797	return nil, false
6798}
6799
6800// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6801func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
6802	return nil, false
6803}
6804
6805// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6806func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
6807	return nil, false
6808}
6809
6810// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6811func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
6812	return &hvraed, true
6813}
6814
6815// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6816func (hvraed HyperVReplicaAzureEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
6817	return nil, false
6818}
6819
6820// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6821func (hvraed HyperVReplicaAzureEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
6822	return nil, false
6823}
6824
6825// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6826func (hvraed HyperVReplicaAzureEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
6827	return nil, false
6828}
6829
6830// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6831func (hvraed HyperVReplicaAzureEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
6832	return nil, false
6833}
6834
6835// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaAzureEventDetails.
6836func (hvraed HyperVReplicaAzureEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
6837	return &hvraed, true
6838}
6839
6840// HyperVReplicaAzureFailbackProviderInput hvrA provider specific input for failback.
6841type HyperVReplicaAzureFailbackProviderInput struct {
6842	// DataSyncOption - Data sync option.
6843	DataSyncOption *string `json:"dataSyncOption,omitempty"`
6844	// RecoveryVMCreationOption - ALR options to create alternate recovery.
6845	RecoveryVMCreationOption *string `json:"recoveryVmCreationOption,omitempty"`
6846	// ProviderIDForAlternateRecovery - Provider ID for alternate location
6847	ProviderIDForAlternateRecovery *string `json:"providerIdForAlternateRecovery,omitempty"`
6848	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
6849	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
6850}
6851
6852// MarshalJSON is the custom marshaler for HyperVReplicaAzureFailbackProviderInput.
6853func (hvrafpi HyperVReplicaAzureFailbackProviderInput) MarshalJSON() ([]byte, error) {
6854	hvrafpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback
6855	objectMap := make(map[string]interface{})
6856	if hvrafpi.DataSyncOption != nil {
6857		objectMap["dataSyncOption"] = hvrafpi.DataSyncOption
6858	}
6859	if hvrafpi.RecoveryVMCreationOption != nil {
6860		objectMap["recoveryVmCreationOption"] = hvrafpi.RecoveryVMCreationOption
6861	}
6862	if hvrafpi.ProviderIDForAlternateRecovery != nil {
6863		objectMap["providerIdForAlternateRecovery"] = hvrafpi.ProviderIDForAlternateRecovery
6864	}
6865	if hvrafpi.InstanceType != "" {
6866		objectMap["instanceType"] = hvrafpi.InstanceType
6867	}
6868	return json.Marshal(objectMap)
6869}
6870
6871// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6872func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
6873	return nil, false
6874}
6875
6876// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6877func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
6878	return &hvrafpi, true
6879}
6880
6881// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6882func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
6883	return nil, false
6884}
6885
6886// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6887func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
6888	return nil, false
6889}
6890
6891// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6892func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
6893	return nil, false
6894}
6895
6896// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6897func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
6898	return nil, false
6899}
6900
6901// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailbackProviderInput.
6902func (hvrafpi HyperVReplicaAzureFailbackProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
6903	return &hvrafpi, true
6904}
6905
6906// HyperVReplicaAzureFailoverProviderInput hvrA provider specific input for failover.
6907type HyperVReplicaAzureFailoverProviderInput struct {
6908	// VaultLocation - Location of the vault.
6909	VaultLocation *string `json:"vaultLocation,omitempty"`
6910	// PrimaryKekCertificatePfx - Primary kek certificate pfx.
6911	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
6912	// SecondaryKekCertificatePfx - Secondary kek certificate pfx.
6913	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
6914	// 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.
6915	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
6916	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
6917	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
6918}
6919
6920// MarshalJSON is the custom marshaler for HyperVReplicaAzureFailoverProviderInput.
6921func (hvrafpi HyperVReplicaAzureFailoverProviderInput) MarshalJSON() ([]byte, error) {
6922	hvrafpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure
6923	objectMap := make(map[string]interface{})
6924	if hvrafpi.VaultLocation != nil {
6925		objectMap["vaultLocation"] = hvrafpi.VaultLocation
6926	}
6927	if hvrafpi.PrimaryKekCertificatePfx != nil {
6928		objectMap["primaryKekCertificatePfx"] = hvrafpi.PrimaryKekCertificatePfx
6929	}
6930	if hvrafpi.SecondaryKekCertificatePfx != nil {
6931		objectMap["secondaryKekCertificatePfx"] = hvrafpi.SecondaryKekCertificatePfx
6932	}
6933	if hvrafpi.RecoveryPointID != nil {
6934		objectMap["recoveryPointId"] = hvrafpi.RecoveryPointID
6935	}
6936	if hvrafpi.InstanceType != "" {
6937		objectMap["instanceType"] = hvrafpi.InstanceType
6938	}
6939	return json.Marshal(objectMap)
6940}
6941
6942// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6943func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
6944	return nil, false
6945}
6946
6947// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6948func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
6949	return nil, false
6950}
6951
6952// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6953func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
6954	return &hvrafpi, true
6955}
6956
6957// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6958func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
6959	return nil, false
6960}
6961
6962// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6963func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
6964	return nil, false
6965}
6966
6967// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6968func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
6969	return nil, false
6970}
6971
6972// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for HyperVReplicaAzureFailoverProviderInput.
6973func (hvrafpi HyperVReplicaAzureFailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
6974	return &hvrafpi, true
6975}
6976
6977// HyperVReplicaAzurePolicyDetails hyper-V Replica Azure specific protection profile details.
6978type HyperVReplicaAzurePolicyDetails struct {
6979	// RecoveryPointHistoryDurationInHours - The duration (in hours) to which point the recovery history needs to be maintained.
6980	RecoveryPointHistoryDurationInHours *int32 `json:"recoveryPointHistoryDurationInHours,omitempty"`
6981	// ApplicationConsistentSnapshotFrequencyInHours - The interval (in hours) at which Hyper-V Replica should create an application consistent snapshot within the VM.
6982	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
6983	// ReplicationInterval - The replication interval.
6984	ReplicationInterval *int32 `json:"replicationInterval,omitempty"`
6985	// OnlineReplicationStartTime - The scheduled start time for the initial replication. If this parameter is Null, the initial replication starts immediately.
6986	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
6987	// Encryption - A value indicating whether encryption is enabled for virtual machines in this cloud.
6988	Encryption *string `json:"encryption,omitempty"`
6989	// ActiveStorageAccountID - The active storage account Id.
6990	ActiveStorageAccountID *string `json:"activeStorageAccountId,omitempty"`
6991	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
6992	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
6993}
6994
6995// MarshalJSON is the custom marshaler for HyperVReplicaAzurePolicyDetails.
6996func (hvrapd HyperVReplicaAzurePolicyDetails) MarshalJSON() ([]byte, error) {
6997	hvrapd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure
6998	objectMap := make(map[string]interface{})
6999	if hvrapd.RecoveryPointHistoryDurationInHours != nil {
7000		objectMap["recoveryPointHistoryDurationInHours"] = hvrapd.RecoveryPointHistoryDurationInHours
7001	}
7002	if hvrapd.ApplicationConsistentSnapshotFrequencyInHours != nil {
7003		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrapd.ApplicationConsistentSnapshotFrequencyInHours
7004	}
7005	if hvrapd.ReplicationInterval != nil {
7006		objectMap["replicationInterval"] = hvrapd.ReplicationInterval
7007	}
7008	if hvrapd.OnlineReplicationStartTime != nil {
7009		objectMap["onlineReplicationStartTime"] = hvrapd.OnlineReplicationStartTime
7010	}
7011	if hvrapd.Encryption != nil {
7012		objectMap["encryption"] = hvrapd.Encryption
7013	}
7014	if hvrapd.ActiveStorageAccountID != nil {
7015		objectMap["activeStorageAccountId"] = hvrapd.ActiveStorageAccountID
7016	}
7017	if hvrapd.InstanceType != "" {
7018		objectMap["instanceType"] = hvrapd.InstanceType
7019	}
7020	return json.Marshal(objectMap)
7021}
7022
7023// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7024func (hvrapd HyperVReplicaAzurePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
7025	return nil, false
7026}
7027
7028// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7029func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
7030	return &hvrapd, true
7031}
7032
7033// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7034func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
7035	return nil, false
7036}
7037
7038// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7039func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
7040	return nil, false
7041}
7042
7043// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7044func (hvrapd HyperVReplicaAzurePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
7045	return nil, false
7046}
7047
7048// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7049func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
7050	return nil, false
7051}
7052
7053// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7054func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
7055	return nil, false
7056}
7057
7058// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7059func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
7060	return nil, false
7061}
7062
7063// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7064func (hvrapd HyperVReplicaAzurePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
7065	return nil, false
7066}
7067
7068// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7069func (hvrapd HyperVReplicaAzurePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
7070	return nil, false
7071}
7072
7073// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7074func (hvrapd HyperVReplicaAzurePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
7075	return nil, false
7076}
7077
7078// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7079func (hvrapd HyperVReplicaAzurePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
7080	return nil, false
7081}
7082
7083// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaAzurePolicyDetails.
7084func (hvrapd HyperVReplicaAzurePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
7085	return &hvrapd, true
7086}
7087
7088// HyperVReplicaAzurePolicyInput hyper-V Replica Azure specific input for creating a protection profile.
7089type HyperVReplicaAzurePolicyInput struct {
7090	// RecoveryPointHistoryDuration - The duration (in hours) to which point the recovery history needs to be maintained.
7091	RecoveryPointHistoryDuration *int32 `json:"recoveryPointHistoryDuration,omitempty"`
7092	// ApplicationConsistentSnapshotFrequencyInHours - The interval (in hours) at which Hyper-V Replica should create an application consistent snapshot within the VM.
7093	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
7094	// ReplicationInterval - The replication interval.
7095	ReplicationInterval *int32 `json:"replicationInterval,omitempty"`
7096	// OnlineReplicationStartTime - The scheduled start time for the initial replication. If this parameter is Null, the initial replication starts immediately.
7097	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
7098	// StorageAccounts - The list of storage accounts to which the VMs in the primary cloud can replicate to.
7099	StorageAccounts *[]string `json:"storageAccounts,omitempty"`
7100	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
7101	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
7102}
7103
7104// MarshalJSON is the custom marshaler for HyperVReplicaAzurePolicyInput.
7105func (hvrapi HyperVReplicaAzurePolicyInput) MarshalJSON() ([]byte, error) {
7106	hvrapi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure
7107	objectMap := make(map[string]interface{})
7108	if hvrapi.RecoveryPointHistoryDuration != nil {
7109		objectMap["recoveryPointHistoryDuration"] = hvrapi.RecoveryPointHistoryDuration
7110	}
7111	if hvrapi.ApplicationConsistentSnapshotFrequencyInHours != nil {
7112		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrapi.ApplicationConsistentSnapshotFrequencyInHours
7113	}
7114	if hvrapi.ReplicationInterval != nil {
7115		objectMap["replicationInterval"] = hvrapi.ReplicationInterval
7116	}
7117	if hvrapi.OnlineReplicationStartTime != nil {
7118		objectMap["onlineReplicationStartTime"] = hvrapi.OnlineReplicationStartTime
7119	}
7120	if hvrapi.StorageAccounts != nil {
7121		objectMap["storageAccounts"] = hvrapi.StorageAccounts
7122	}
7123	if hvrapi.InstanceType != "" {
7124		objectMap["instanceType"] = hvrapi.InstanceType
7125	}
7126	return json.Marshal(objectMap)
7127}
7128
7129// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7130func (hvrapi HyperVReplicaAzurePolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
7131	return nil, false
7132}
7133
7134// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7135func (hvrapi HyperVReplicaAzurePolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
7136	return &hvrapi, true
7137}
7138
7139// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7140func (hvrapi HyperVReplicaAzurePolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
7141	return nil, false
7142}
7143
7144// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7145func (hvrapi HyperVReplicaAzurePolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
7146	return nil, false
7147}
7148
7149// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7150func (hvrapi HyperVReplicaAzurePolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
7151	return nil, false
7152}
7153
7154// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7155func (hvrapi HyperVReplicaAzurePolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
7156	return nil, false
7157}
7158
7159// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7160func (hvrapi HyperVReplicaAzurePolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
7161	return nil, false
7162}
7163
7164// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7165func (hvrapi HyperVReplicaAzurePolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
7166	return nil, false
7167}
7168
7169// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7170func (hvrapi HyperVReplicaAzurePolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
7171	return nil, false
7172}
7173
7174// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaAzurePolicyInput.
7175func (hvrapi HyperVReplicaAzurePolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
7176	return &hvrapi, true
7177}
7178
7179// HyperVReplicaAzureReplicationDetails hyper V Replica Azure provider specific settings.
7180type HyperVReplicaAzureReplicationDetails struct {
7181	// AzureVMDiskDetails - Azure VM Disk details.
7182	AzureVMDiskDetails *[]AzureVMDiskDetails `json:"azureVmDiskDetails,omitempty"`
7183	// RecoveryAzureVMName - Recovery Azure given name.
7184	RecoveryAzureVMName *string `json:"recoveryAzureVmName,omitempty"`
7185	// RecoveryAzureVMSize - The Recovery Azure VM size.
7186	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
7187	// RecoveryAzureStorageAccount - The recovery Azure storage account.
7188	RecoveryAzureStorageAccount *string `json:"recoveryAzureStorageAccount,omitempty"`
7189	// 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.
7190	RecoveryAzureLogStorageAccountID *string `json:"recoveryAzureLogStorageAccountId,omitempty"`
7191	// LastReplicatedTime - The Last replication time.
7192	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
7193	// RpoInSeconds - Last RPO value.
7194	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
7195	// LastRpoCalculatedTime - The last RPO calculated time.
7196	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
7197	// VMID - The virtual machine Id.
7198	VMID *string `json:"vmId,omitempty"`
7199	// VMProtectionState - The protection state for the vm.
7200	VMProtectionState *string `json:"vmProtectionState,omitempty"`
7201	// VMProtectionStateDescription - The protection state description for the vm.
7202	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
7203	// InitialReplicationDetails - Initial replication details.
7204	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
7205	// VMNics - The PE Network details.
7206	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
7207	// SelectedRecoveryAzureNetworkID - The selected recovery azure network Id.
7208	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
7209	// SelectedSourceNicID - The selected source nic Id which will be used as the primary nic during failover.
7210	SelectedSourceNicID *string `json:"selectedSourceNicId,omitempty"`
7211	// Encryption - The encryption info.
7212	Encryption *string `json:"encryption,omitempty"`
7213	// OSDetails - The operating system info.
7214	OSDetails *OSDetails `json:"oSDetails,omitempty"`
7215	// SourceVMRAMSizeInMB - The RAM size of the VM on the primary side.
7216	SourceVMRAMSizeInMB *int32 `json:"sourceVmRamSizeInMB,omitempty"`
7217	// SourceVMCPUCount - The CPU count of the VM on the primary side.
7218	SourceVMCPUCount *int32 `json:"sourceVmCpuCount,omitempty"`
7219	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
7220	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
7221	// RecoveryAzureResourceGroupID - The target resource group Id.
7222	RecoveryAzureResourceGroupID *string `json:"recoveryAzureResourceGroupId,omitempty"`
7223	// RecoveryAvailabilitySetID - The recovery availability set Id.
7224	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
7225	// TargetAvailabilityZone - The target availability zone.
7226	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
7227	// TargetProximityPlacementGroupID - The target proximity placement group Id.
7228	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
7229	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
7230	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
7231	// LicenseType - License Type of the VM to be used.
7232	LicenseType *string `json:"licenseType,omitempty"`
7233	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
7234	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
7235}
7236
7237// MarshalJSON is the custom marshaler for HyperVReplicaAzureReplicationDetails.
7238func (hvrard HyperVReplicaAzureReplicationDetails) MarshalJSON() ([]byte, error) {
7239	hvrard.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure
7240	objectMap := make(map[string]interface{})
7241	if hvrard.AzureVMDiskDetails != nil {
7242		objectMap["azureVmDiskDetails"] = hvrard.AzureVMDiskDetails
7243	}
7244	if hvrard.RecoveryAzureVMName != nil {
7245		objectMap["recoveryAzureVmName"] = hvrard.RecoveryAzureVMName
7246	}
7247	if hvrard.RecoveryAzureVMSize != nil {
7248		objectMap["recoveryAzureVMSize"] = hvrard.RecoveryAzureVMSize
7249	}
7250	if hvrard.RecoveryAzureStorageAccount != nil {
7251		objectMap["recoveryAzureStorageAccount"] = hvrard.RecoveryAzureStorageAccount
7252	}
7253	if hvrard.RecoveryAzureLogStorageAccountID != nil {
7254		objectMap["recoveryAzureLogStorageAccountId"] = hvrard.RecoveryAzureLogStorageAccountID
7255	}
7256	if hvrard.LastReplicatedTime != nil {
7257		objectMap["lastReplicatedTime"] = hvrard.LastReplicatedTime
7258	}
7259	if hvrard.RpoInSeconds != nil {
7260		objectMap["rpoInSeconds"] = hvrard.RpoInSeconds
7261	}
7262	if hvrard.LastRpoCalculatedTime != nil {
7263		objectMap["lastRpoCalculatedTime"] = hvrard.LastRpoCalculatedTime
7264	}
7265	if hvrard.VMID != nil {
7266		objectMap["vmId"] = hvrard.VMID
7267	}
7268	if hvrard.VMProtectionState != nil {
7269		objectMap["vmProtectionState"] = hvrard.VMProtectionState
7270	}
7271	if hvrard.VMProtectionStateDescription != nil {
7272		objectMap["vmProtectionStateDescription"] = hvrard.VMProtectionStateDescription
7273	}
7274	if hvrard.InitialReplicationDetails != nil {
7275		objectMap["initialReplicationDetails"] = hvrard.InitialReplicationDetails
7276	}
7277	if hvrard.VMNics != nil {
7278		objectMap["vmNics"] = hvrard.VMNics
7279	}
7280	if hvrard.SelectedRecoveryAzureNetworkID != nil {
7281		objectMap["selectedRecoveryAzureNetworkId"] = hvrard.SelectedRecoveryAzureNetworkID
7282	}
7283	if hvrard.SelectedSourceNicID != nil {
7284		objectMap["selectedSourceNicId"] = hvrard.SelectedSourceNicID
7285	}
7286	if hvrard.Encryption != nil {
7287		objectMap["encryption"] = hvrard.Encryption
7288	}
7289	if hvrard.OSDetails != nil {
7290		objectMap["oSDetails"] = hvrard.OSDetails
7291	}
7292	if hvrard.SourceVMRAMSizeInMB != nil {
7293		objectMap["sourceVmRamSizeInMB"] = hvrard.SourceVMRAMSizeInMB
7294	}
7295	if hvrard.SourceVMCPUCount != nil {
7296		objectMap["sourceVmCpuCount"] = hvrard.SourceVMCPUCount
7297	}
7298	if hvrard.EnableRdpOnTargetOption != nil {
7299		objectMap["enableRdpOnTargetOption"] = hvrard.EnableRdpOnTargetOption
7300	}
7301	if hvrard.RecoveryAzureResourceGroupID != nil {
7302		objectMap["recoveryAzureResourceGroupId"] = hvrard.RecoveryAzureResourceGroupID
7303	}
7304	if hvrard.RecoveryAvailabilitySetID != nil {
7305		objectMap["recoveryAvailabilitySetId"] = hvrard.RecoveryAvailabilitySetID
7306	}
7307	if hvrard.TargetAvailabilityZone != nil {
7308		objectMap["targetAvailabilityZone"] = hvrard.TargetAvailabilityZone
7309	}
7310	if hvrard.TargetProximityPlacementGroupID != nil {
7311		objectMap["targetProximityPlacementGroupId"] = hvrard.TargetProximityPlacementGroupID
7312	}
7313	if hvrard.UseManagedDisks != nil {
7314		objectMap["useManagedDisks"] = hvrard.UseManagedDisks
7315	}
7316	if hvrard.LicenseType != nil {
7317		objectMap["licenseType"] = hvrard.LicenseType
7318	}
7319	if hvrard.InstanceType != "" {
7320		objectMap["instanceType"] = hvrard.InstanceType
7321	}
7322	return json.Marshal(objectMap)
7323}
7324
7325// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7326func (hvrard HyperVReplicaAzureReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
7327	return nil, false
7328}
7329
7330// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7331func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
7332	return &hvrard, true
7333}
7334
7335// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7336func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
7337	return nil, false
7338}
7339
7340// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7341func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
7342	return nil, false
7343}
7344
7345// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7346func (hvrard HyperVReplicaAzureReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
7347	return nil, false
7348}
7349
7350// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7351func (hvrard HyperVReplicaAzureReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
7352	return nil, false
7353}
7354
7355// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7356func (hvrard HyperVReplicaAzureReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
7357	return nil, false
7358}
7359
7360// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7361func (hvrard HyperVReplicaAzureReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
7362	return nil, false
7363}
7364
7365// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7366func (hvrard HyperVReplicaAzureReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
7367	return nil, false
7368}
7369
7370// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaAzureReplicationDetails.
7371func (hvrard HyperVReplicaAzureReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
7372	return &hvrard, true
7373}
7374
7375// HyperVReplicaAzureReprotectInput azure specific reprotect input.
7376type HyperVReplicaAzureReprotectInput struct {
7377	// HvHostVMID - The Hyper-V host Vm Id.
7378	HvHostVMID *string `json:"hvHostVmId,omitempty"`
7379	// VMName - The Vm Name.
7380	VMName *string `json:"vmName,omitempty"`
7381	// OsType - The OS type associated with vm.
7382	OsType *string `json:"osType,omitempty"`
7383	// VHDID - The OS disk VHD id associated with vm.
7384	VHDID *string `json:"vHDId,omitempty"`
7385	// StorageAccountID - The storage account name.
7386	StorageAccountID *string `json:"storageAccountId,omitempty"`
7387	// LogStorageAccountID - The storage account to be used for logging during replication.
7388	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
7389	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
7390	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
7391}
7392
7393// MarshalJSON is the custom marshaler for HyperVReplicaAzureReprotectInput.
7394func (hvrari HyperVReplicaAzureReprotectInput) MarshalJSON() ([]byte, error) {
7395	hvrari.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure
7396	objectMap := make(map[string]interface{})
7397	if hvrari.HvHostVMID != nil {
7398		objectMap["hvHostVmId"] = hvrari.HvHostVMID
7399	}
7400	if hvrari.VMName != nil {
7401		objectMap["vmName"] = hvrari.VMName
7402	}
7403	if hvrari.OsType != nil {
7404		objectMap["osType"] = hvrari.OsType
7405	}
7406	if hvrari.VHDID != nil {
7407		objectMap["vHDId"] = hvrari.VHDID
7408	}
7409	if hvrari.StorageAccountID != nil {
7410		objectMap["storageAccountId"] = hvrari.StorageAccountID
7411	}
7412	if hvrari.LogStorageAccountID != nil {
7413		objectMap["logStorageAccountId"] = hvrari.LogStorageAccountID
7414	}
7415	if hvrari.InstanceType != "" {
7416		objectMap["instanceType"] = hvrari.InstanceType
7417	}
7418	return json.Marshal(objectMap)
7419}
7420
7421// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7422func (hvrari HyperVReplicaAzureReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
7423	return nil, false
7424}
7425
7426// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7427func (hvrari HyperVReplicaAzureReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
7428	return &hvrari, true
7429}
7430
7431// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7432func (hvrari HyperVReplicaAzureReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
7433	return nil, false
7434}
7435
7436// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7437func (hvrari HyperVReplicaAzureReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
7438	return nil, false
7439}
7440
7441// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7442func (hvrari HyperVReplicaAzureReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
7443	return nil, false
7444}
7445
7446// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for HyperVReplicaAzureReprotectInput.
7447func (hvrari HyperVReplicaAzureReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
7448	return &hvrari, true
7449}
7450
7451// HyperVReplicaAzureTestFailoverInput hvrA provider specific input for test failover.
7452type HyperVReplicaAzureTestFailoverInput struct {
7453	// VaultLocation - Location of the vault.
7454	VaultLocation *string `json:"vaultLocation,omitempty"`
7455	// PrimaryKekCertificatePfx - Primary kek certificate pfx.
7456	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
7457	// SecondaryKekCertificatePfx - Secondary kek certificate pfx.
7458	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
7459	// 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.
7460	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
7461	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
7462	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
7463}
7464
7465// MarshalJSON is the custom marshaler for HyperVReplicaAzureTestFailoverInput.
7466func (hvratfi HyperVReplicaAzureTestFailoverInput) MarshalJSON() ([]byte, error) {
7467	hvratfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure
7468	objectMap := make(map[string]interface{})
7469	if hvratfi.VaultLocation != nil {
7470		objectMap["vaultLocation"] = hvratfi.VaultLocation
7471	}
7472	if hvratfi.PrimaryKekCertificatePfx != nil {
7473		objectMap["primaryKekCertificatePfx"] = hvratfi.PrimaryKekCertificatePfx
7474	}
7475	if hvratfi.SecondaryKekCertificatePfx != nil {
7476		objectMap["secondaryKekCertificatePfx"] = hvratfi.SecondaryKekCertificatePfx
7477	}
7478	if hvratfi.RecoveryPointID != nil {
7479		objectMap["recoveryPointId"] = hvratfi.RecoveryPointID
7480	}
7481	if hvratfi.InstanceType != "" {
7482		objectMap["instanceType"] = hvratfi.InstanceType
7483	}
7484	return json.Marshal(objectMap)
7485}
7486
7487// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7488func (hvratfi HyperVReplicaAzureTestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
7489	return nil, false
7490}
7491
7492// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7493func (hvratfi HyperVReplicaAzureTestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
7494	return &hvratfi, true
7495}
7496
7497// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7498func (hvratfi HyperVReplicaAzureTestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
7499	return nil, false
7500}
7501
7502// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7503func (hvratfi HyperVReplicaAzureTestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
7504	return nil, false
7505}
7506
7507// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7508func (hvratfi HyperVReplicaAzureTestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
7509	return nil, false
7510}
7511
7512// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7513func (hvratfi HyperVReplicaAzureTestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
7514	return nil, false
7515}
7516
7517// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for HyperVReplicaAzureTestFailoverInput.
7518func (hvratfi HyperVReplicaAzureTestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
7519	return &hvratfi, true
7520}
7521
7522// HyperVReplicaAzureUnplannedFailoverInput hvrA provider specific input for unplanned failover.
7523type HyperVReplicaAzureUnplannedFailoverInput struct {
7524	// VaultLocation - Location of the vault.
7525	VaultLocation *string `json:"vaultLocation,omitempty"`
7526	// PrimaryKekCertificatePfx - Primary kek certificate pfx.
7527	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
7528	// SecondaryKekCertificatePfx - Secondary kek certificate pfx.
7529	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
7530	// 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.
7531	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
7532	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
7533	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
7534}
7535
7536// MarshalJSON is the custom marshaler for HyperVReplicaAzureUnplannedFailoverInput.
7537func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
7538	hvraufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure
7539	objectMap := make(map[string]interface{})
7540	if hvraufi.VaultLocation != nil {
7541		objectMap["vaultLocation"] = hvraufi.VaultLocation
7542	}
7543	if hvraufi.PrimaryKekCertificatePfx != nil {
7544		objectMap["primaryKekCertificatePfx"] = hvraufi.PrimaryKekCertificatePfx
7545	}
7546	if hvraufi.SecondaryKekCertificatePfx != nil {
7547		objectMap["secondaryKekCertificatePfx"] = hvraufi.SecondaryKekCertificatePfx
7548	}
7549	if hvraufi.RecoveryPointID != nil {
7550		objectMap["recoveryPointId"] = hvraufi.RecoveryPointID
7551	}
7552	if hvraufi.InstanceType != "" {
7553		objectMap["instanceType"] = hvraufi.InstanceType
7554	}
7555	return json.Marshal(objectMap)
7556}
7557
7558// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7559func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
7560	return nil, false
7561}
7562
7563// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7564func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
7565	return &hvraufi, true
7566}
7567
7568// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7569func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
7570	return nil, false
7571}
7572
7573// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7574func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
7575	return nil, false
7576}
7577
7578// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7579func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
7580	return nil, false
7581}
7582
7583// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7584func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
7585	return nil, false
7586}
7587
7588// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for HyperVReplicaAzureUnplannedFailoverInput.
7589func (hvraufi HyperVReplicaAzureUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
7590	return &hvraufi, true
7591}
7592
7593// HyperVReplicaAzureUpdateReplicationProtectedItemInput hyperV replica Azure input to update replication
7594// protected item.
7595type HyperVReplicaAzureUpdateReplicationProtectedItemInput struct {
7596	// RecoveryAzureV1ResourceGroupID - The recovery Azure resource group Id for classic deployment.
7597	RecoveryAzureV1ResourceGroupID *string `json:"recoveryAzureV1ResourceGroupId,omitempty"`
7598	// RecoveryAzureV2ResourceGroupID - The recovery Azure resource group Id for resource manager deployment.
7599	RecoveryAzureV2ResourceGroupID *string `json:"recoveryAzureV2ResourceGroupId,omitempty"`
7600	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
7601	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
7602	// DiskIDToDiskEncryptionMap - The dictionary of disk resource Id to disk encryption set ARM Id.
7603	DiskIDToDiskEncryptionMap map[string]*string `json:"diskIdToDiskEncryptionMap"`
7604	// TargetProximityPlacementGroupID - The target proximity placement group Id.
7605	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
7606	// TargetAvailabilityZone - The target availability zone.
7607	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
7608	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
7609	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
7610}
7611
7612// MarshalJSON is the custom marshaler for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7613func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
7614	hvraurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure
7615	objectMap := make(map[string]interface{})
7616	if hvraurpii.RecoveryAzureV1ResourceGroupID != nil {
7617		objectMap["recoveryAzureV1ResourceGroupId"] = hvraurpii.RecoveryAzureV1ResourceGroupID
7618	}
7619	if hvraurpii.RecoveryAzureV2ResourceGroupID != nil {
7620		objectMap["recoveryAzureV2ResourceGroupId"] = hvraurpii.RecoveryAzureV2ResourceGroupID
7621	}
7622	if hvraurpii.UseManagedDisks != nil {
7623		objectMap["useManagedDisks"] = hvraurpii.UseManagedDisks
7624	}
7625	if hvraurpii.DiskIDToDiskEncryptionMap != nil {
7626		objectMap["diskIdToDiskEncryptionMap"] = hvraurpii.DiskIDToDiskEncryptionMap
7627	}
7628	if hvraurpii.TargetProximityPlacementGroupID != nil {
7629		objectMap["targetProximityPlacementGroupId"] = hvraurpii.TargetProximityPlacementGroupID
7630	}
7631	if hvraurpii.TargetAvailabilityZone != nil {
7632		objectMap["targetAvailabilityZone"] = hvraurpii.TargetAvailabilityZone
7633	}
7634	if hvraurpii.InstanceType != "" {
7635		objectMap["instanceType"] = hvraurpii.InstanceType
7636	}
7637	return json.Marshal(objectMap)
7638}
7639
7640// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7641func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
7642	return nil, false
7643}
7644
7645// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7646func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
7647	return &hvraurpii, true
7648}
7649
7650// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7651func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
7652	return nil, false
7653}
7654
7655// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7656func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
7657	return nil, false
7658}
7659
7660// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7661func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
7662	return nil, false
7663}
7664
7665// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for HyperVReplicaAzureUpdateReplicationProtectedItemInput.
7666func (hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
7667	return &hvraurpii, true
7668}
7669
7670// HyperVReplicaBaseEventDetails abstract model class for event details of a HyperVReplica E2E event.
7671type HyperVReplicaBaseEventDetails struct {
7672	// ContainerName - The container friendly name.
7673	ContainerName *string `json:"containerName,omitempty"`
7674	// FabricName - The fabric friendly name.
7675	FabricName *string `json:"fabricName,omitempty"`
7676	// RemoteContainerName - The remote container name.
7677	RemoteContainerName *string `json:"remoteContainerName,omitempty"`
7678	// RemoteFabricName - The remote fabric name.
7679	RemoteFabricName *string `json:"remoteFabricName,omitempty"`
7680	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
7681	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
7682}
7683
7684// MarshalJSON is the custom marshaler for HyperVReplicaBaseEventDetails.
7685func (hvrbed HyperVReplicaBaseEventDetails) MarshalJSON() ([]byte, error) {
7686	hvrbed.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails
7687	objectMap := make(map[string]interface{})
7688	if hvrbed.ContainerName != nil {
7689		objectMap["containerName"] = hvrbed.ContainerName
7690	}
7691	if hvrbed.FabricName != nil {
7692		objectMap["fabricName"] = hvrbed.FabricName
7693	}
7694	if hvrbed.RemoteContainerName != nil {
7695		objectMap["remoteContainerName"] = hvrbed.RemoteContainerName
7696	}
7697	if hvrbed.RemoteFabricName != nil {
7698		objectMap["remoteFabricName"] = hvrbed.RemoteFabricName
7699	}
7700	if hvrbed.InstanceType != "" {
7701		objectMap["instanceType"] = hvrbed.InstanceType
7702	}
7703	return json.Marshal(objectMap)
7704}
7705
7706// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7707func (hvrbed HyperVReplicaBaseEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
7708	return nil, false
7709}
7710
7711// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7712func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
7713	return nil, false
7714}
7715
7716// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7717func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
7718	return nil, false
7719}
7720
7721// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7722func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
7723	return nil, false
7724}
7725
7726// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7727func (hvrbed HyperVReplicaBaseEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
7728	return &hvrbed, true
7729}
7730
7731// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7732func (hvrbed HyperVReplicaBaseEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
7733	return nil, false
7734}
7735
7736// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7737func (hvrbed HyperVReplicaBaseEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
7738	return nil, false
7739}
7740
7741// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7742func (hvrbed HyperVReplicaBaseEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
7743	return nil, false
7744}
7745
7746// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for HyperVReplicaBaseEventDetails.
7747func (hvrbed HyperVReplicaBaseEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
7748	return &hvrbed, true
7749}
7750
7751// HyperVReplicaBasePolicyDetails base class for HyperVReplica policy details.
7752type HyperVReplicaBasePolicyDetails struct {
7753	// RecoveryPoints - A value indicating the number of recovery points.
7754	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
7755	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
7756	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
7757	// Compression - A value indicating whether compression has to be enabled.
7758	Compression *string `json:"compression,omitempty"`
7759	// InitialReplicationMethod - A value indicating whether IR is online.
7760	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
7761	// OnlineReplicationStartTime - A value indicating the online IR start time.
7762	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
7763	// OfflineReplicationImportPath - A value indicating the offline IR import path.
7764	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
7765	// OfflineReplicationExportPath - A value indicating the offline IR export path.
7766	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
7767	// ReplicationPort - A value indicating the recovery HTTPS port.
7768	ReplicationPort *int32 `json:"replicationPort,omitempty"`
7769	// AllowedAuthenticationType - A value indicating the authentication type.
7770	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
7771	// ReplicaDeletionOption - A value indicating whether the VM has to be auto deleted. Supported Values: String.Empty, None, OnRecoveryCloud
7772	ReplicaDeletionOption *string `json:"replicaDeletionOption,omitempty"`
7773	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
7774	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
7775}
7776
7777// MarshalJSON is the custom marshaler for HyperVReplicaBasePolicyDetails.
7778func (hvrbpd HyperVReplicaBasePolicyDetails) MarshalJSON() ([]byte, error) {
7779	hvrbpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails
7780	objectMap := make(map[string]interface{})
7781	if hvrbpd.RecoveryPoints != nil {
7782		objectMap["recoveryPoints"] = hvrbpd.RecoveryPoints
7783	}
7784	if hvrbpd.ApplicationConsistentSnapshotFrequencyInHours != nil {
7785		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrbpd.ApplicationConsistentSnapshotFrequencyInHours
7786	}
7787	if hvrbpd.Compression != nil {
7788		objectMap["compression"] = hvrbpd.Compression
7789	}
7790	if hvrbpd.InitialReplicationMethod != nil {
7791		objectMap["initialReplicationMethod"] = hvrbpd.InitialReplicationMethod
7792	}
7793	if hvrbpd.OnlineReplicationStartTime != nil {
7794		objectMap["onlineReplicationStartTime"] = hvrbpd.OnlineReplicationStartTime
7795	}
7796	if hvrbpd.OfflineReplicationImportPath != nil {
7797		objectMap["offlineReplicationImportPath"] = hvrbpd.OfflineReplicationImportPath
7798	}
7799	if hvrbpd.OfflineReplicationExportPath != nil {
7800		objectMap["offlineReplicationExportPath"] = hvrbpd.OfflineReplicationExportPath
7801	}
7802	if hvrbpd.ReplicationPort != nil {
7803		objectMap["replicationPort"] = hvrbpd.ReplicationPort
7804	}
7805	if hvrbpd.AllowedAuthenticationType != nil {
7806		objectMap["allowedAuthenticationType"] = hvrbpd.AllowedAuthenticationType
7807	}
7808	if hvrbpd.ReplicaDeletionOption != nil {
7809		objectMap["replicaDeletionOption"] = hvrbpd.ReplicaDeletionOption
7810	}
7811	if hvrbpd.InstanceType != "" {
7812		objectMap["instanceType"] = hvrbpd.InstanceType
7813	}
7814	return json.Marshal(objectMap)
7815}
7816
7817// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7818func (hvrbpd HyperVReplicaBasePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
7819	return nil, false
7820}
7821
7822// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7823func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
7824	return nil, false
7825}
7826
7827// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7828func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
7829	return &hvrbpd, true
7830}
7831
7832// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7833func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
7834	return nil, false
7835}
7836
7837// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7838func (hvrbpd HyperVReplicaBasePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
7839	return nil, false
7840}
7841
7842// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7843func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
7844	return nil, false
7845}
7846
7847// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7848func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
7849	return nil, false
7850}
7851
7852// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7853func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
7854	return nil, false
7855}
7856
7857// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7858func (hvrbpd HyperVReplicaBasePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
7859	return nil, false
7860}
7861
7862// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7863func (hvrbpd HyperVReplicaBasePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
7864	return nil, false
7865}
7866
7867// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7868func (hvrbpd HyperVReplicaBasePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
7869	return nil, false
7870}
7871
7872// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7873func (hvrbpd HyperVReplicaBasePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
7874	return nil, false
7875}
7876
7877// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBasePolicyDetails.
7878func (hvrbpd HyperVReplicaBasePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
7879	return &hvrbpd, true
7880}
7881
7882// HyperVReplicaBaseReplicationDetails hyper V replica provider specific settings base class.
7883type HyperVReplicaBaseReplicationDetails struct {
7884	// LastReplicatedTime - The Last replication time.
7885	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
7886	// VMNics - The PE Network details.
7887	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
7888	// VMID - The virtual machine Id.
7889	VMID *string `json:"vmId,omitempty"`
7890	// VMProtectionState - The protection state for the vm.
7891	VMProtectionState *string `json:"vmProtectionState,omitempty"`
7892	// VMProtectionStateDescription - The protection state description for the vm.
7893	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
7894	// InitialReplicationDetails - Initial replication details.
7895	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
7896	// VMDiskDetails - VM disk details.
7897	VMDiskDetails *[]DiskDetails `json:"vMDiskDetails,omitempty"`
7898	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
7899	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
7900}
7901
7902// MarshalJSON is the custom marshaler for HyperVReplicaBaseReplicationDetails.
7903func (hvrbrd HyperVReplicaBaseReplicationDetails) MarshalJSON() ([]byte, error) {
7904	hvrbrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails
7905	objectMap := make(map[string]interface{})
7906	if hvrbrd.LastReplicatedTime != nil {
7907		objectMap["lastReplicatedTime"] = hvrbrd.LastReplicatedTime
7908	}
7909	if hvrbrd.VMNics != nil {
7910		objectMap["vmNics"] = hvrbrd.VMNics
7911	}
7912	if hvrbrd.VMID != nil {
7913		objectMap["vmId"] = hvrbrd.VMID
7914	}
7915	if hvrbrd.VMProtectionState != nil {
7916		objectMap["vmProtectionState"] = hvrbrd.VMProtectionState
7917	}
7918	if hvrbrd.VMProtectionStateDescription != nil {
7919		objectMap["vmProtectionStateDescription"] = hvrbrd.VMProtectionStateDescription
7920	}
7921	if hvrbrd.InitialReplicationDetails != nil {
7922		objectMap["initialReplicationDetails"] = hvrbrd.InitialReplicationDetails
7923	}
7924	if hvrbrd.VMDiskDetails != nil {
7925		objectMap["vMDiskDetails"] = hvrbrd.VMDiskDetails
7926	}
7927	if hvrbrd.InstanceType != "" {
7928		objectMap["instanceType"] = hvrbrd.InstanceType
7929	}
7930	return json.Marshal(objectMap)
7931}
7932
7933// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7934func (hvrbrd HyperVReplicaBaseReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
7935	return nil, false
7936}
7937
7938// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7939func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
7940	return nil, false
7941}
7942
7943// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7944func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
7945	return &hvrbrd, true
7946}
7947
7948// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7949func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
7950	return nil, false
7951}
7952
7953// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7954func (hvrbrd HyperVReplicaBaseReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
7955	return nil, false
7956}
7957
7958// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7959func (hvrbrd HyperVReplicaBaseReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
7960	return nil, false
7961}
7962
7963// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7964func (hvrbrd HyperVReplicaBaseReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
7965	return nil, false
7966}
7967
7968// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7969func (hvrbrd HyperVReplicaBaseReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
7970	return nil, false
7971}
7972
7973// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7974func (hvrbrd HyperVReplicaBaseReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
7975	return nil, false
7976}
7977
7978// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBaseReplicationDetails.
7979func (hvrbrd HyperVReplicaBaseReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
7980	return &hvrbrd, true
7981}
7982
7983// HyperVReplicaBluePolicyDetails hyper-V Replica Blue specific protection profile details.
7984type HyperVReplicaBluePolicyDetails struct {
7985	// ReplicationFrequencyInSeconds - A value indicating the replication interval.
7986	ReplicationFrequencyInSeconds *int32 `json:"replicationFrequencyInSeconds,omitempty"`
7987	// RecoveryPoints - A value indicating the number of recovery points.
7988	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
7989	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
7990	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
7991	// Compression - A value indicating whether compression has to be enabled.
7992	Compression *string `json:"compression,omitempty"`
7993	// InitialReplicationMethod - A value indicating whether IR is online.
7994	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
7995	// OnlineReplicationStartTime - A value indicating the online IR start time.
7996	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
7997	// OfflineReplicationImportPath - A value indicating the offline IR import path.
7998	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
7999	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8000	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8001	// ReplicationPort - A value indicating the recovery HTTPS port.
8002	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8003	// AllowedAuthenticationType - A value indicating the authentication type.
8004	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8005	// ReplicaDeletionOption - A value indicating whether the VM has to be auto deleted. Supported Values: String.Empty, None, OnRecoveryCloud
8006	ReplicaDeletionOption *string `json:"replicaDeletionOption,omitempty"`
8007	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
8008	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
8009}
8010
8011// MarshalJSON is the custom marshaler for HyperVReplicaBluePolicyDetails.
8012func (hvrbpd HyperVReplicaBluePolicyDetails) MarshalJSON() ([]byte, error) {
8013	hvrbpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2
8014	objectMap := make(map[string]interface{})
8015	if hvrbpd.ReplicationFrequencyInSeconds != nil {
8016		objectMap["replicationFrequencyInSeconds"] = hvrbpd.ReplicationFrequencyInSeconds
8017	}
8018	if hvrbpd.RecoveryPoints != nil {
8019		objectMap["recoveryPoints"] = hvrbpd.RecoveryPoints
8020	}
8021	if hvrbpd.ApplicationConsistentSnapshotFrequencyInHours != nil {
8022		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrbpd.ApplicationConsistentSnapshotFrequencyInHours
8023	}
8024	if hvrbpd.Compression != nil {
8025		objectMap["compression"] = hvrbpd.Compression
8026	}
8027	if hvrbpd.InitialReplicationMethod != nil {
8028		objectMap["initialReplicationMethod"] = hvrbpd.InitialReplicationMethod
8029	}
8030	if hvrbpd.OnlineReplicationStartTime != nil {
8031		objectMap["onlineReplicationStartTime"] = hvrbpd.OnlineReplicationStartTime
8032	}
8033	if hvrbpd.OfflineReplicationImportPath != nil {
8034		objectMap["offlineReplicationImportPath"] = hvrbpd.OfflineReplicationImportPath
8035	}
8036	if hvrbpd.OfflineReplicationExportPath != nil {
8037		objectMap["offlineReplicationExportPath"] = hvrbpd.OfflineReplicationExportPath
8038	}
8039	if hvrbpd.ReplicationPort != nil {
8040		objectMap["replicationPort"] = hvrbpd.ReplicationPort
8041	}
8042	if hvrbpd.AllowedAuthenticationType != nil {
8043		objectMap["allowedAuthenticationType"] = hvrbpd.AllowedAuthenticationType
8044	}
8045	if hvrbpd.ReplicaDeletionOption != nil {
8046		objectMap["replicaDeletionOption"] = hvrbpd.ReplicaDeletionOption
8047	}
8048	if hvrbpd.InstanceType != "" {
8049		objectMap["instanceType"] = hvrbpd.InstanceType
8050	}
8051	return json.Marshal(objectMap)
8052}
8053
8054// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8055func (hvrbpd HyperVReplicaBluePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
8056	return nil, false
8057}
8058
8059// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8060func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
8061	return nil, false
8062}
8063
8064// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8065func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
8066	return nil, false
8067}
8068
8069// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8070func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
8071	return &hvrbpd, true
8072}
8073
8074// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8075func (hvrbpd HyperVReplicaBluePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
8076	return nil, false
8077}
8078
8079// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8080func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
8081	return nil, false
8082}
8083
8084// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8085func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
8086	return nil, false
8087}
8088
8089// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8090func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
8091	return nil, false
8092}
8093
8094// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8095func (hvrbpd HyperVReplicaBluePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
8096	return nil, false
8097}
8098
8099// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8100func (hvrbpd HyperVReplicaBluePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
8101	return nil, false
8102}
8103
8104// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8105func (hvrbpd HyperVReplicaBluePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
8106	return nil, false
8107}
8108
8109// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8110func (hvrbpd HyperVReplicaBluePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
8111	return nil, false
8112}
8113
8114// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaBluePolicyDetails.
8115func (hvrbpd HyperVReplicaBluePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
8116	return &hvrbpd, true
8117}
8118
8119// HyperVReplicaBluePolicyInput hyperV Replica Blue policy input.
8120type HyperVReplicaBluePolicyInput struct {
8121	// ReplicationFrequencyInSeconds - A value indicating the replication interval.
8122	ReplicationFrequencyInSeconds *int32 `json:"replicationFrequencyInSeconds,omitempty"`
8123	// RecoveryPoints - A value indicating the number of recovery points.
8124	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
8125	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
8126	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
8127	// Compression - A value indicating whether compression has to be enabled.
8128	Compression *string `json:"compression,omitempty"`
8129	// InitialReplicationMethod - A value indicating whether IR is online.
8130	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
8131	// OnlineReplicationStartTime - A value indicating the online IR start time.
8132	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
8133	// OfflineReplicationImportPath - A value indicating the offline IR import path.
8134	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
8135	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8136	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8137	// ReplicationPort - A value indicating the recovery HTTPS port.
8138	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8139	// AllowedAuthenticationType - A value indicating the authentication type.
8140	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8141	// ReplicaDeletion - A value indicating whether the VM has to be auto deleted.
8142	ReplicaDeletion *string `json:"replicaDeletion,omitempty"`
8143	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
8144	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
8145}
8146
8147// MarshalJSON is the custom marshaler for HyperVReplicaBluePolicyInput.
8148func (hvrbpi HyperVReplicaBluePolicyInput) MarshalJSON() ([]byte, error) {
8149	hvrbpi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2
8150	objectMap := make(map[string]interface{})
8151	if hvrbpi.ReplicationFrequencyInSeconds != nil {
8152		objectMap["replicationFrequencyInSeconds"] = hvrbpi.ReplicationFrequencyInSeconds
8153	}
8154	if hvrbpi.RecoveryPoints != nil {
8155		objectMap["recoveryPoints"] = hvrbpi.RecoveryPoints
8156	}
8157	if hvrbpi.ApplicationConsistentSnapshotFrequencyInHours != nil {
8158		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrbpi.ApplicationConsistentSnapshotFrequencyInHours
8159	}
8160	if hvrbpi.Compression != nil {
8161		objectMap["compression"] = hvrbpi.Compression
8162	}
8163	if hvrbpi.InitialReplicationMethod != nil {
8164		objectMap["initialReplicationMethod"] = hvrbpi.InitialReplicationMethod
8165	}
8166	if hvrbpi.OnlineReplicationStartTime != nil {
8167		objectMap["onlineReplicationStartTime"] = hvrbpi.OnlineReplicationStartTime
8168	}
8169	if hvrbpi.OfflineReplicationImportPath != nil {
8170		objectMap["offlineReplicationImportPath"] = hvrbpi.OfflineReplicationImportPath
8171	}
8172	if hvrbpi.OfflineReplicationExportPath != nil {
8173		objectMap["offlineReplicationExportPath"] = hvrbpi.OfflineReplicationExportPath
8174	}
8175	if hvrbpi.ReplicationPort != nil {
8176		objectMap["replicationPort"] = hvrbpi.ReplicationPort
8177	}
8178	if hvrbpi.AllowedAuthenticationType != nil {
8179		objectMap["allowedAuthenticationType"] = hvrbpi.AllowedAuthenticationType
8180	}
8181	if hvrbpi.ReplicaDeletion != nil {
8182		objectMap["replicaDeletion"] = hvrbpi.ReplicaDeletion
8183	}
8184	if hvrbpi.InstanceType != "" {
8185		objectMap["instanceType"] = hvrbpi.InstanceType
8186	}
8187	return json.Marshal(objectMap)
8188}
8189
8190// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8191func (hvrbpi HyperVReplicaBluePolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
8192	return nil, false
8193}
8194
8195// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8196func (hvrbpi HyperVReplicaBluePolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
8197	return nil, false
8198}
8199
8200// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8201func (hvrbpi HyperVReplicaBluePolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
8202	return &hvrbpi, true
8203}
8204
8205// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8206func (hvrbpi HyperVReplicaBluePolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
8207	return nil, false
8208}
8209
8210// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8211func (hvrbpi HyperVReplicaBluePolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
8212	return nil, false
8213}
8214
8215// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8216func (hvrbpi HyperVReplicaBluePolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
8217	return nil, false
8218}
8219
8220// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8221func (hvrbpi HyperVReplicaBluePolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
8222	return nil, false
8223}
8224
8225// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8226func (hvrbpi HyperVReplicaBluePolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
8227	return nil, false
8228}
8229
8230// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8231func (hvrbpi HyperVReplicaBluePolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
8232	return nil, false
8233}
8234
8235// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaBluePolicyInput.
8236func (hvrbpi HyperVReplicaBluePolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
8237	return &hvrbpi, true
8238}
8239
8240// HyperVReplicaBlueReplicationDetails hyperV replica 2012 R2 (Blue) replication details.
8241type HyperVReplicaBlueReplicationDetails struct {
8242	// LastReplicatedTime - The Last replication time.
8243	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
8244	// VMNics - The PE Network details.
8245	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
8246	// VMID - The virtual machine Id.
8247	VMID *string `json:"vmId,omitempty"`
8248	// VMProtectionState - The protection state for the vm.
8249	VMProtectionState *string `json:"vmProtectionState,omitempty"`
8250	// VMProtectionStateDescription - The protection state description for the vm.
8251	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
8252	// InitialReplicationDetails - Initial replication details.
8253	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
8254	// VMDiskDetails - VM disk details.
8255	VMDiskDetails *[]DiskDetails `json:"vMDiskDetails,omitempty"`
8256	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
8257	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
8258}
8259
8260// MarshalJSON is the custom marshaler for HyperVReplicaBlueReplicationDetails.
8261func (hvrbrd HyperVReplicaBlueReplicationDetails) MarshalJSON() ([]byte, error) {
8262	hvrbrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2
8263	objectMap := make(map[string]interface{})
8264	if hvrbrd.LastReplicatedTime != nil {
8265		objectMap["lastReplicatedTime"] = hvrbrd.LastReplicatedTime
8266	}
8267	if hvrbrd.VMNics != nil {
8268		objectMap["vmNics"] = hvrbrd.VMNics
8269	}
8270	if hvrbrd.VMID != nil {
8271		objectMap["vmId"] = hvrbrd.VMID
8272	}
8273	if hvrbrd.VMProtectionState != nil {
8274		objectMap["vmProtectionState"] = hvrbrd.VMProtectionState
8275	}
8276	if hvrbrd.VMProtectionStateDescription != nil {
8277		objectMap["vmProtectionStateDescription"] = hvrbrd.VMProtectionStateDescription
8278	}
8279	if hvrbrd.InitialReplicationDetails != nil {
8280		objectMap["initialReplicationDetails"] = hvrbrd.InitialReplicationDetails
8281	}
8282	if hvrbrd.VMDiskDetails != nil {
8283		objectMap["vMDiskDetails"] = hvrbrd.VMDiskDetails
8284	}
8285	if hvrbrd.InstanceType != "" {
8286		objectMap["instanceType"] = hvrbrd.InstanceType
8287	}
8288	return json.Marshal(objectMap)
8289}
8290
8291// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8292func (hvrbrd HyperVReplicaBlueReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
8293	return nil, false
8294}
8295
8296// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8297func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
8298	return nil, false
8299}
8300
8301// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8302func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
8303	return nil, false
8304}
8305
8306// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8307func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
8308	return &hvrbrd, true
8309}
8310
8311// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8312func (hvrbrd HyperVReplicaBlueReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
8313	return nil, false
8314}
8315
8316// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8317func (hvrbrd HyperVReplicaBlueReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
8318	return nil, false
8319}
8320
8321// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8322func (hvrbrd HyperVReplicaBlueReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
8323	return nil, false
8324}
8325
8326// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8327func (hvrbrd HyperVReplicaBlueReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
8328	return nil, false
8329}
8330
8331// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8332func (hvrbrd HyperVReplicaBlueReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
8333	return nil, false
8334}
8335
8336// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaBlueReplicationDetails.
8337func (hvrbrd HyperVReplicaBlueReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
8338	return &hvrbrd, true
8339}
8340
8341// HyperVReplicaPolicyDetails hyper-V Replica Blue specific protection profile details.
8342type HyperVReplicaPolicyDetails struct {
8343	// RecoveryPoints - A value indicating the number of recovery points.
8344	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
8345	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
8346	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
8347	// Compression - A value indicating whether compression has to be enabled.
8348	Compression *string `json:"compression,omitempty"`
8349	// InitialReplicationMethod - A value indicating whether IR is online.
8350	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
8351	// OnlineReplicationStartTime - A value indicating the online IR start time.
8352	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
8353	// OfflineReplicationImportPath - A value indicating the offline IR import path.
8354	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
8355	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8356	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8357	// ReplicationPort - A value indicating the recovery HTTPS port.
8358	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8359	// AllowedAuthenticationType - A value indicating the authentication type.
8360	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8361	// ReplicaDeletionOption - A value indicating whether the VM has to be auto deleted. Supported Values: String.Empty, None, OnRecoveryCloud
8362	ReplicaDeletionOption *string `json:"replicaDeletionOption,omitempty"`
8363	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
8364	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
8365}
8366
8367// MarshalJSON is the custom marshaler for HyperVReplicaPolicyDetails.
8368func (hvrpd HyperVReplicaPolicyDetails) MarshalJSON() ([]byte, error) {
8369	hvrpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012
8370	objectMap := make(map[string]interface{})
8371	if hvrpd.RecoveryPoints != nil {
8372		objectMap["recoveryPoints"] = hvrpd.RecoveryPoints
8373	}
8374	if hvrpd.ApplicationConsistentSnapshotFrequencyInHours != nil {
8375		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrpd.ApplicationConsistentSnapshotFrequencyInHours
8376	}
8377	if hvrpd.Compression != nil {
8378		objectMap["compression"] = hvrpd.Compression
8379	}
8380	if hvrpd.InitialReplicationMethod != nil {
8381		objectMap["initialReplicationMethod"] = hvrpd.InitialReplicationMethod
8382	}
8383	if hvrpd.OnlineReplicationStartTime != nil {
8384		objectMap["onlineReplicationStartTime"] = hvrpd.OnlineReplicationStartTime
8385	}
8386	if hvrpd.OfflineReplicationImportPath != nil {
8387		objectMap["offlineReplicationImportPath"] = hvrpd.OfflineReplicationImportPath
8388	}
8389	if hvrpd.OfflineReplicationExportPath != nil {
8390		objectMap["offlineReplicationExportPath"] = hvrpd.OfflineReplicationExportPath
8391	}
8392	if hvrpd.ReplicationPort != nil {
8393		objectMap["replicationPort"] = hvrpd.ReplicationPort
8394	}
8395	if hvrpd.AllowedAuthenticationType != nil {
8396		objectMap["allowedAuthenticationType"] = hvrpd.AllowedAuthenticationType
8397	}
8398	if hvrpd.ReplicaDeletionOption != nil {
8399		objectMap["replicaDeletionOption"] = hvrpd.ReplicaDeletionOption
8400	}
8401	if hvrpd.InstanceType != "" {
8402		objectMap["instanceType"] = hvrpd.InstanceType
8403	}
8404	return json.Marshal(objectMap)
8405}
8406
8407// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8408func (hvrpd HyperVReplicaPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
8409	return nil, false
8410}
8411
8412// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8413func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
8414	return nil, false
8415}
8416
8417// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8418func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
8419	return nil, false
8420}
8421
8422// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8423func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
8424	return nil, false
8425}
8426
8427// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8428func (hvrpd HyperVReplicaPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
8429	return &hvrpd, true
8430}
8431
8432// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8433func (hvrpd HyperVReplicaPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
8434	return nil, false
8435}
8436
8437// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8438func (hvrpd HyperVReplicaPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
8439	return nil, false
8440}
8441
8442// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8443func (hvrpd HyperVReplicaPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
8444	return nil, false
8445}
8446
8447// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8448func (hvrpd HyperVReplicaPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
8449	return nil, false
8450}
8451
8452// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8453func (hvrpd HyperVReplicaPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
8454	return nil, false
8455}
8456
8457// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8458func (hvrpd HyperVReplicaPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
8459	return nil, false
8460}
8461
8462// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8463func (hvrpd HyperVReplicaPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
8464	return nil, false
8465}
8466
8467// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for HyperVReplicaPolicyDetails.
8468func (hvrpd HyperVReplicaPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
8469	return &hvrpd, true
8470}
8471
8472// HyperVReplicaPolicyInput hyper-V Replica specific policy Input.
8473type HyperVReplicaPolicyInput struct {
8474	// RecoveryPoints - A value indicating the number of recovery points.
8475	RecoveryPoints *int32 `json:"recoveryPoints,omitempty"`
8476	// ApplicationConsistentSnapshotFrequencyInHours - A value indicating the application consistent frequency.
8477	ApplicationConsistentSnapshotFrequencyInHours *int32 `json:"applicationConsistentSnapshotFrequencyInHours,omitempty"`
8478	// Compression - A value indicating whether compression has to be enabled.
8479	Compression *string `json:"compression,omitempty"`
8480	// InitialReplicationMethod - A value indicating whether IR is online.
8481	InitialReplicationMethod *string `json:"initialReplicationMethod,omitempty"`
8482	// OnlineReplicationStartTime - A value indicating the online IR start time.
8483	OnlineReplicationStartTime *string `json:"onlineReplicationStartTime,omitempty"`
8484	// OfflineReplicationImportPath - A value indicating the offline IR import path.
8485	OfflineReplicationImportPath *string `json:"offlineReplicationImportPath,omitempty"`
8486	// OfflineReplicationExportPath - A value indicating the offline IR export path.
8487	OfflineReplicationExportPath *string `json:"offlineReplicationExportPath,omitempty"`
8488	// ReplicationPort - A value indicating the recovery HTTPS port.
8489	ReplicationPort *int32 `json:"replicationPort,omitempty"`
8490	// AllowedAuthenticationType - A value indicating the authentication type.
8491	AllowedAuthenticationType *int32 `json:"allowedAuthenticationType,omitempty"`
8492	// ReplicaDeletion - A value indicating whether the VM has to be auto deleted.
8493	ReplicaDeletion *string `json:"replicaDeletion,omitempty"`
8494	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
8495	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
8496}
8497
8498// MarshalJSON is the custom marshaler for HyperVReplicaPolicyInput.
8499func (hvrpi HyperVReplicaPolicyInput) MarshalJSON() ([]byte, error) {
8500	hvrpi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012
8501	objectMap := make(map[string]interface{})
8502	if hvrpi.RecoveryPoints != nil {
8503		objectMap["recoveryPoints"] = hvrpi.RecoveryPoints
8504	}
8505	if hvrpi.ApplicationConsistentSnapshotFrequencyInHours != nil {
8506		objectMap["applicationConsistentSnapshotFrequencyInHours"] = hvrpi.ApplicationConsistentSnapshotFrequencyInHours
8507	}
8508	if hvrpi.Compression != nil {
8509		objectMap["compression"] = hvrpi.Compression
8510	}
8511	if hvrpi.InitialReplicationMethod != nil {
8512		objectMap["initialReplicationMethod"] = hvrpi.InitialReplicationMethod
8513	}
8514	if hvrpi.OnlineReplicationStartTime != nil {
8515		objectMap["onlineReplicationStartTime"] = hvrpi.OnlineReplicationStartTime
8516	}
8517	if hvrpi.OfflineReplicationImportPath != nil {
8518		objectMap["offlineReplicationImportPath"] = hvrpi.OfflineReplicationImportPath
8519	}
8520	if hvrpi.OfflineReplicationExportPath != nil {
8521		objectMap["offlineReplicationExportPath"] = hvrpi.OfflineReplicationExportPath
8522	}
8523	if hvrpi.ReplicationPort != nil {
8524		objectMap["replicationPort"] = hvrpi.ReplicationPort
8525	}
8526	if hvrpi.AllowedAuthenticationType != nil {
8527		objectMap["allowedAuthenticationType"] = hvrpi.AllowedAuthenticationType
8528	}
8529	if hvrpi.ReplicaDeletion != nil {
8530		objectMap["replicaDeletion"] = hvrpi.ReplicaDeletion
8531	}
8532	if hvrpi.InstanceType != "" {
8533		objectMap["instanceType"] = hvrpi.InstanceType
8534	}
8535	return json.Marshal(objectMap)
8536}
8537
8538// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8539func (hvrpi HyperVReplicaPolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
8540	return nil, false
8541}
8542
8543// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8544func (hvrpi HyperVReplicaPolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
8545	return nil, false
8546}
8547
8548// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8549func (hvrpi HyperVReplicaPolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
8550	return nil, false
8551}
8552
8553// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8554func (hvrpi HyperVReplicaPolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
8555	return &hvrpi, true
8556}
8557
8558// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8559func (hvrpi HyperVReplicaPolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
8560	return nil, false
8561}
8562
8563// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8564func (hvrpi HyperVReplicaPolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
8565	return nil, false
8566}
8567
8568// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8569func (hvrpi HyperVReplicaPolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
8570	return nil, false
8571}
8572
8573// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8574func (hvrpi HyperVReplicaPolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
8575	return nil, false
8576}
8577
8578// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8579func (hvrpi HyperVReplicaPolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
8580	return nil, false
8581}
8582
8583// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for HyperVReplicaPolicyInput.
8584func (hvrpi HyperVReplicaPolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
8585	return &hvrpi, true
8586}
8587
8588// HyperVReplicaReplicationDetails hyperV replica 2012 replication details.
8589type HyperVReplicaReplicationDetails struct {
8590	// LastReplicatedTime - The Last replication time.
8591	LastReplicatedTime *date.Time `json:"lastReplicatedTime,omitempty"`
8592	// VMNics - The PE Network details.
8593	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
8594	// VMID - The virtual machine Id.
8595	VMID *string `json:"vmId,omitempty"`
8596	// VMProtectionState - The protection state for the vm.
8597	VMProtectionState *string `json:"vmProtectionState,omitempty"`
8598	// VMProtectionStateDescription - The protection state description for the vm.
8599	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
8600	// InitialReplicationDetails - Initial replication details.
8601	InitialReplicationDetails *InitialReplicationDetails `json:"initialReplicationDetails,omitempty"`
8602	// VMDiskDetails - VM disk details.
8603	VMDiskDetails *[]DiskDetails `json:"vMDiskDetails,omitempty"`
8604	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
8605	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
8606}
8607
8608// MarshalJSON is the custom marshaler for HyperVReplicaReplicationDetails.
8609func (hvrrd HyperVReplicaReplicationDetails) MarshalJSON() ([]byte, error) {
8610	hvrrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012
8611	objectMap := make(map[string]interface{})
8612	if hvrrd.LastReplicatedTime != nil {
8613		objectMap["lastReplicatedTime"] = hvrrd.LastReplicatedTime
8614	}
8615	if hvrrd.VMNics != nil {
8616		objectMap["vmNics"] = hvrrd.VMNics
8617	}
8618	if hvrrd.VMID != nil {
8619		objectMap["vmId"] = hvrrd.VMID
8620	}
8621	if hvrrd.VMProtectionState != nil {
8622		objectMap["vmProtectionState"] = hvrrd.VMProtectionState
8623	}
8624	if hvrrd.VMProtectionStateDescription != nil {
8625		objectMap["vmProtectionStateDescription"] = hvrrd.VMProtectionStateDescription
8626	}
8627	if hvrrd.InitialReplicationDetails != nil {
8628		objectMap["initialReplicationDetails"] = hvrrd.InitialReplicationDetails
8629	}
8630	if hvrrd.VMDiskDetails != nil {
8631		objectMap["vMDiskDetails"] = hvrrd.VMDiskDetails
8632	}
8633	if hvrrd.InstanceType != "" {
8634		objectMap["instanceType"] = hvrrd.InstanceType
8635	}
8636	return json.Marshal(objectMap)
8637}
8638
8639// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8640func (hvrrd HyperVReplicaReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
8641	return nil, false
8642}
8643
8644// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8645func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
8646	return nil, false
8647}
8648
8649// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8650func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
8651	return nil, false
8652}
8653
8654// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8655func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
8656	return nil, false
8657}
8658
8659// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8660func (hvrrd HyperVReplicaReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
8661	return &hvrrd, true
8662}
8663
8664// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8665func (hvrrd HyperVReplicaReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
8666	return nil, false
8667}
8668
8669// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8670func (hvrrd HyperVReplicaReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
8671	return nil, false
8672}
8673
8674// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8675func (hvrrd HyperVReplicaReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
8676	return nil, false
8677}
8678
8679// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8680func (hvrrd HyperVReplicaReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
8681	return nil, false
8682}
8683
8684// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for HyperVReplicaReplicationDetails.
8685func (hvrrd HyperVReplicaReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
8686	return &hvrrd, true
8687}
8688
8689// HyperVSiteDetails hyperVSite fabric specific details.
8690type HyperVSiteDetails struct {
8691	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
8692	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
8693}
8694
8695// MarshalJSON is the custom marshaler for HyperVSiteDetails.
8696func (hvsd HyperVSiteDetails) MarshalJSON() ([]byte, error) {
8697	hvsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite
8698	objectMap := make(map[string]interface{})
8699	if hvsd.InstanceType != "" {
8700		objectMap["instanceType"] = hvsd.InstanceType
8701	}
8702	return json.Marshal(objectMap)
8703}
8704
8705// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8706func (hvsd HyperVSiteDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
8707	return nil, false
8708}
8709
8710// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8711func (hvsd HyperVSiteDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
8712	return &hvsd, true
8713}
8714
8715// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8716func (hvsd HyperVSiteDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
8717	return nil, false
8718}
8719
8720// AsVmmDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8721func (hvsd HyperVSiteDetails) AsVmmDetails() (*VmmDetails, bool) {
8722	return nil, false
8723}
8724
8725// AsVMwareDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8726func (hvsd HyperVSiteDetails) AsVMwareDetails() (*VMwareDetails, bool) {
8727	return nil, false
8728}
8729
8730// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8731func (hvsd HyperVSiteDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
8732	return nil, false
8733}
8734
8735// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8736func (hvsd HyperVSiteDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
8737	return nil, false
8738}
8739
8740// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for HyperVSiteDetails.
8741func (hvsd HyperVSiteDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
8742	return &hvsd, true
8743}
8744
8745// HyperVVirtualMachineDetails single Host fabric provider specific VM settings.
8746type HyperVVirtualMachineDetails struct {
8747	// SourceItemID - The source id of the object.
8748	SourceItemID *string `json:"sourceItemId,omitempty"`
8749	// Generation - The id of the object in fabric.
8750	Generation *string `json:"generation,omitempty"`
8751	// OsDetails - The Last replication time.
8752	OsDetails *OSDetails `json:"osDetails,omitempty"`
8753	// DiskDetails - The Last successful failover time.
8754	DiskDetails *[]DiskDetails `json:"diskDetails,omitempty"`
8755	// HasPhysicalDisk - A value indicating whether the VM has a physical disk attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
8756	HasPhysicalDisk PresenceStatus `json:"hasPhysicalDisk,omitempty"`
8757	// 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'
8758	HasFibreChannelAdapter PresenceStatus `json:"hasFibreChannelAdapter,omitempty"`
8759	// HasSharedVhd - A value indicating whether the VM has a shared VHD attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
8760	HasSharedVhd PresenceStatus `json:"hasSharedVhd,omitempty"`
8761	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
8762	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
8763}
8764
8765// MarshalJSON is the custom marshaler for HyperVVirtualMachineDetails.
8766func (hvvmd HyperVVirtualMachineDetails) MarshalJSON() ([]byte, error) {
8767	hvvmd.InstanceType = InstanceTypeHyperVVirtualMachine
8768	objectMap := make(map[string]interface{})
8769	if hvvmd.SourceItemID != nil {
8770		objectMap["sourceItemId"] = hvvmd.SourceItemID
8771	}
8772	if hvvmd.Generation != nil {
8773		objectMap["generation"] = hvvmd.Generation
8774	}
8775	if hvvmd.OsDetails != nil {
8776		objectMap["osDetails"] = hvvmd.OsDetails
8777	}
8778	if hvvmd.DiskDetails != nil {
8779		objectMap["diskDetails"] = hvvmd.DiskDetails
8780	}
8781	if hvvmd.HasPhysicalDisk != "" {
8782		objectMap["hasPhysicalDisk"] = hvvmd.HasPhysicalDisk
8783	}
8784	if hvvmd.HasFibreChannelAdapter != "" {
8785		objectMap["hasFibreChannelAdapter"] = hvvmd.HasFibreChannelAdapter
8786	}
8787	if hvvmd.HasSharedVhd != "" {
8788		objectMap["hasSharedVhd"] = hvvmd.HasSharedVhd
8789	}
8790	if hvvmd.InstanceType != "" {
8791		objectMap["instanceType"] = hvvmd.InstanceType
8792	}
8793	return json.Marshal(objectMap)
8794}
8795
8796// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8797func (hvvmd HyperVVirtualMachineDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
8798	return &hvvmd, true
8799}
8800
8801// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8802func (hvvmd HyperVVirtualMachineDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
8803	return nil, false
8804}
8805
8806// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8807func (hvvmd HyperVVirtualMachineDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
8808	return nil, false
8809}
8810
8811// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8812func (hvvmd HyperVVirtualMachineDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
8813	return nil, false
8814}
8815
8816// AsConfigurationSettings is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8817func (hvvmd HyperVVirtualMachineDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
8818	return nil, false
8819}
8820
8821// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for HyperVVirtualMachineDetails.
8822func (hvvmd HyperVVirtualMachineDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
8823	return &hvvmd, true
8824}
8825
8826// IdentityProviderDetails identity provider details.
8827type IdentityProviderDetails struct {
8828	// TenantID - The tenant Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8829	TenantID *string `json:"tenantId,omitempty"`
8830	// ApplicationID - The application/client Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8831	ApplicationID *string `json:"applicationId,omitempty"`
8832	// ObjectID - The object Id of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8833	ObjectID *string `json:"objectId,omitempty"`
8834	// Audience - The intended Audience of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8835	Audience *string `json:"audience,omitempty"`
8836	// AadAuthority - The base authority for Azure Active Directory authentication.
8837	AadAuthority *string `json:"aadAuthority,omitempty"`
8838}
8839
8840// IdentityProviderInput identity provider input.
8841type IdentityProviderInput struct {
8842	// TenantID - The tenant Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8843	TenantID *string `json:"tenantId,omitempty"`
8844	// ApplicationID - The application/client Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8845	ApplicationID *string `json:"applicationId,omitempty"`
8846	// ObjectID - The object Id of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8847	ObjectID *string `json:"objectId,omitempty"`
8848	// Audience - The intended Audience of the service principal with which the on-premise management/data plane components would communicate with our Azure services.
8849	Audience *string `json:"audience,omitempty"`
8850	// AadAuthority - The base authority for Azure Active Directory authentication.
8851	AadAuthority *string `json:"aadAuthority,omitempty"`
8852}
8853
8854// InconsistentVMDetails this class stores the monitoring details for consistency check of inconsistent
8855// Protected Entity.
8856type InconsistentVMDetails struct {
8857	// VMName - The Vm name.
8858	VMName *string `json:"vmName,omitempty"`
8859	// CloudName - The Cloud name.
8860	CloudName *string `json:"cloudName,omitempty"`
8861	// Details - The list of details regarding state of the Protected Entity in SRS and On prem.
8862	Details *[]string `json:"details,omitempty"`
8863	// ErrorIds - The list of error ids.
8864	ErrorIds *[]string `json:"errorIds,omitempty"`
8865}
8866
8867// InitialReplicationDetails initial replication details.
8868type InitialReplicationDetails struct {
8869	// InitialReplicationType - Initial replication type.
8870	InitialReplicationType *string `json:"initialReplicationType,omitempty"`
8871	// InitialReplicationProgressPercentage - The initial replication progress percentage.
8872	InitialReplicationProgressPercentage *string `json:"initialReplicationProgressPercentage,omitempty"`
8873}
8874
8875// InlineWorkflowTaskDetails this class represents the inline workflow task details.
8876type InlineWorkflowTaskDetails struct {
8877	// WorkflowIds - The list of child workflow ids.
8878	WorkflowIds *[]string `json:"workflowIds,omitempty"`
8879	// ChildTasks - The child tasks.
8880	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
8881	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
8882	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
8883}
8884
8885// MarshalJSON is the custom marshaler for InlineWorkflowTaskDetails.
8886func (iwtd InlineWorkflowTaskDetails) MarshalJSON() ([]byte, error) {
8887	iwtd.InstanceType = InstanceTypeInlineWorkflowTaskDetails
8888	objectMap := make(map[string]interface{})
8889	if iwtd.WorkflowIds != nil {
8890		objectMap["workflowIds"] = iwtd.WorkflowIds
8891	}
8892	if iwtd.ChildTasks != nil {
8893		objectMap["childTasks"] = iwtd.ChildTasks
8894	}
8895	if iwtd.InstanceType != "" {
8896		objectMap["instanceType"] = iwtd.InstanceType
8897	}
8898	return json.Marshal(objectMap)
8899}
8900
8901// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8902func (iwtd InlineWorkflowTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
8903	return &iwtd, true
8904}
8905
8906// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8907func (iwtd InlineWorkflowTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
8908	return nil, false
8909}
8910
8911// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8912func (iwtd InlineWorkflowTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
8913	return nil, false
8914}
8915
8916// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8917func (iwtd InlineWorkflowTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
8918	return nil, false
8919}
8920
8921// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for InlineWorkflowTaskDetails.
8922func (iwtd InlineWorkflowTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
8923	return &iwtd, true
8924}
8925
8926// InMageAgentDetails the details of the InMage agent.
8927type InMageAgentDetails struct {
8928	// AgentVersion - The agent version.
8929	AgentVersion *string `json:"agentVersion,omitempty"`
8930	// AgentUpdateStatus - A value indicating whether installed agent needs to be updated.
8931	AgentUpdateStatus *string `json:"agentUpdateStatus,omitempty"`
8932	// PostUpdateRebootStatus - A value indicating whether reboot is required after update is applied.
8933	PostUpdateRebootStatus *string `json:"postUpdateRebootStatus,omitempty"`
8934	// AgentExpiryDate - Agent expiry date.
8935	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
8936}
8937
8938// InMageAgentVersionDetails inMage agent version details.
8939type InMageAgentVersionDetails struct {
8940	// PostUpdateRebootStatus - A value indicating whether reboot is required after update is applied.
8941	PostUpdateRebootStatus *string `json:"postUpdateRebootStatus,omitempty"`
8942	// Version - The agent version.
8943	Version *string `json:"version,omitempty"`
8944	// ExpiryDate - Version expiry date.
8945	ExpiryDate *date.Time `json:"expiryDate,omitempty"`
8946	// Status - A value indicating whether security update required. Possible values include: 'Supported', 'NotSupported', 'Deprecated', 'UpdateRequired', 'SecurityUpdateRequired'
8947	Status AgentVersionStatus `json:"status,omitempty"`
8948}
8949
8950// InMageAzureV2ApplyRecoveryPointInput applyRecoveryPoint input specific to InMageAzureV2 provider.
8951type InMageAzureV2ApplyRecoveryPointInput struct {
8952	// VaultLocation - The vault location where the recovery Vm resides.
8953	VaultLocation *string `json:"vaultLocation,omitempty"`
8954	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
8955	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
8956}
8957
8958// MarshalJSON is the custom marshaler for InMageAzureV2ApplyRecoveryPointInput.
8959func (imavarpi InMageAzureV2ApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
8960	imavarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2
8961	objectMap := make(map[string]interface{})
8962	if imavarpi.VaultLocation != nil {
8963		objectMap["vaultLocation"] = imavarpi.VaultLocation
8964	}
8965	if imavarpi.InstanceType != "" {
8966		objectMap["instanceType"] = imavarpi.InstanceType
8967	}
8968	return json.Marshal(objectMap)
8969}
8970
8971// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8972func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
8973	return nil, false
8974}
8975
8976// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8977func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
8978	return nil, false
8979}
8980
8981// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8982func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
8983	return &imavarpi, true
8984}
8985
8986// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8987func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
8988	return nil, false
8989}
8990
8991// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8992func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
8993	return nil, false
8994}
8995
8996// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageAzureV2ApplyRecoveryPointInput.
8997func (imavarpi InMageAzureV2ApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
8998	return &imavarpi, true
8999}
9000
9001// InMageAzureV2DiskInputDetails disk input details.
9002type InMageAzureV2DiskInputDetails struct {
9003	// DiskID - The DiskId.
9004	DiskID *string `json:"diskId,omitempty"`
9005	// LogStorageAccountID - The LogStorageAccountId.
9006	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
9007	// DiskType - The DiskType. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
9008	DiskType DiskAccountType `json:"diskType,omitempty"`
9009	// DiskEncryptionSetID - The DiskEncryptionSet ARM ID.
9010	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
9011}
9012
9013// InMageAzureV2EnableProtectionInput vMware Azure specific enable protection input.
9014type InMageAzureV2EnableProtectionInput struct {
9015	// MasterTargetID - The Master target Id.
9016	MasterTargetID *string `json:"masterTargetId,omitempty"`
9017	// ProcessServerID - The Process Server Id.
9018	ProcessServerID *string `json:"processServerId,omitempty"`
9019	// StorageAccountID - The storage account name.
9020	StorageAccountID *string `json:"storageAccountId,omitempty"`
9021	// RunAsAccountID - The CS account Id.
9022	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
9023	// MultiVMGroupID - The multi vm group Id.
9024	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
9025	// MultiVMGroupName - The multi vm group name.
9026	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
9027	// DisksToInclude - The disks to include list.
9028	DisksToInclude *[]InMageAzureV2DiskInputDetails `json:"disksToInclude,omitempty"`
9029	// TargetAzureNetworkID - The selected target Azure network Id.
9030	TargetAzureNetworkID *string `json:"targetAzureNetworkId,omitempty"`
9031	// TargetAzureSubnetID - The selected target Azure subnet Id.
9032	TargetAzureSubnetID *string `json:"targetAzureSubnetId,omitempty"`
9033	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
9034	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
9035	// TargetAzureVMName - The target azure Vm Name.
9036	TargetAzureVMName *string `json:"targetAzureVmName,omitempty"`
9037	// LogStorageAccountID - The storage account to be used for logging during replication.
9038	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
9039	// TargetAzureV1ResourceGroupID - The Id of the target resource group (for classic deployment) in which the failover VM is to be created.
9040	TargetAzureV1ResourceGroupID *string `json:"targetAzureV1ResourceGroupId,omitempty"`
9041	// TargetAzureV2ResourceGroupID - The Id of the target resource group (for resource manager deployment) in which the failover VM is to be created.
9042	TargetAzureV2ResourceGroupID *string `json:"targetAzureV2ResourceGroupId,omitempty"`
9043	// DiskType - The DiskType. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
9044	DiskType DiskAccountType `json:"diskType,omitempty"`
9045	// DiskEncryptionSetID - The DiskEncryptionSet ARM ID.
9046	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
9047	// TargetAvailabilityZone - The target availability zone.
9048	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
9049	// TargetProximityPlacementGroupID - The proximity placement group ARM Id.
9050	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
9051	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
9052	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
9053}
9054
9055// MarshalJSON is the custom marshaler for InMageAzureV2EnableProtectionInput.
9056func (imavepi InMageAzureV2EnableProtectionInput) MarshalJSON() ([]byte, error) {
9057	imavepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2
9058	objectMap := make(map[string]interface{})
9059	if imavepi.MasterTargetID != nil {
9060		objectMap["masterTargetId"] = imavepi.MasterTargetID
9061	}
9062	if imavepi.ProcessServerID != nil {
9063		objectMap["processServerId"] = imavepi.ProcessServerID
9064	}
9065	if imavepi.StorageAccountID != nil {
9066		objectMap["storageAccountId"] = imavepi.StorageAccountID
9067	}
9068	if imavepi.RunAsAccountID != nil {
9069		objectMap["runAsAccountId"] = imavepi.RunAsAccountID
9070	}
9071	if imavepi.MultiVMGroupID != nil {
9072		objectMap["multiVmGroupId"] = imavepi.MultiVMGroupID
9073	}
9074	if imavepi.MultiVMGroupName != nil {
9075		objectMap["multiVmGroupName"] = imavepi.MultiVMGroupName
9076	}
9077	if imavepi.DisksToInclude != nil {
9078		objectMap["disksToInclude"] = imavepi.DisksToInclude
9079	}
9080	if imavepi.TargetAzureNetworkID != nil {
9081		objectMap["targetAzureNetworkId"] = imavepi.TargetAzureNetworkID
9082	}
9083	if imavepi.TargetAzureSubnetID != nil {
9084		objectMap["targetAzureSubnetId"] = imavepi.TargetAzureSubnetID
9085	}
9086	if imavepi.EnableRdpOnTargetOption != nil {
9087		objectMap["enableRdpOnTargetOption"] = imavepi.EnableRdpOnTargetOption
9088	}
9089	if imavepi.TargetAzureVMName != nil {
9090		objectMap["targetAzureVmName"] = imavepi.TargetAzureVMName
9091	}
9092	if imavepi.LogStorageAccountID != nil {
9093		objectMap["logStorageAccountId"] = imavepi.LogStorageAccountID
9094	}
9095	if imavepi.TargetAzureV1ResourceGroupID != nil {
9096		objectMap["targetAzureV1ResourceGroupId"] = imavepi.TargetAzureV1ResourceGroupID
9097	}
9098	if imavepi.TargetAzureV2ResourceGroupID != nil {
9099		objectMap["targetAzureV2ResourceGroupId"] = imavepi.TargetAzureV2ResourceGroupID
9100	}
9101	if imavepi.DiskType != "" {
9102		objectMap["diskType"] = imavepi.DiskType
9103	}
9104	if imavepi.DiskEncryptionSetID != nil {
9105		objectMap["diskEncryptionSetId"] = imavepi.DiskEncryptionSetID
9106	}
9107	if imavepi.TargetAvailabilityZone != nil {
9108		objectMap["targetAvailabilityZone"] = imavepi.TargetAvailabilityZone
9109	}
9110	if imavepi.TargetProximityPlacementGroupID != nil {
9111		objectMap["targetProximityPlacementGroupId"] = imavepi.TargetProximityPlacementGroupID
9112	}
9113	if imavepi.InstanceType != "" {
9114		objectMap["instanceType"] = imavepi.InstanceType
9115	}
9116	return json.Marshal(objectMap)
9117}
9118
9119// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9120func (imavepi InMageAzureV2EnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
9121	return nil, false
9122}
9123
9124// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9125func (imavepi InMageAzureV2EnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
9126	return nil, false
9127}
9128
9129// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9130func (imavepi InMageAzureV2EnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
9131	return &imavepi, true
9132}
9133
9134// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9135func (imavepi InMageAzureV2EnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
9136	return nil, false
9137}
9138
9139// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9140func (imavepi InMageAzureV2EnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
9141	return nil, false
9142}
9143
9144// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9145func (imavepi InMageAzureV2EnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
9146	return nil, false
9147}
9148
9149// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9150func (imavepi InMageAzureV2EnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
9151	return nil, false
9152}
9153
9154// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageAzureV2EnableProtectionInput.
9155func (imavepi InMageAzureV2EnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
9156	return &imavepi, true
9157}
9158
9159// InMageAzureV2EventDetails model class for event details of a VMwareAzureV2 event.
9160type InMageAzureV2EventDetails struct {
9161	// EventType - InMage Event type. Takes one of the values of {InMageDataContract.InMageMonitoringEventType}.
9162	EventType *string `json:"eventType,omitempty"`
9163	// Category - InMage Event Category.
9164	Category *string `json:"category,omitempty"`
9165	// Component - InMage Event Component.
9166	Component *string `json:"component,omitempty"`
9167	// CorrectiveAction - Corrective Action string for the event.
9168	CorrectiveAction *string `json:"correctiveAction,omitempty"`
9169	// Details - InMage Event Details.
9170	Details *string `json:"details,omitempty"`
9171	// Summary - InMage Event Summary.
9172	Summary *string `json:"summary,omitempty"`
9173	// SiteName - VMware Site name.
9174	SiteName *string `json:"siteName,omitempty"`
9175	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
9176	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
9177}
9178
9179// MarshalJSON is the custom marshaler for InMageAzureV2EventDetails.
9180func (imaved InMageAzureV2EventDetails) MarshalJSON() ([]byte, error) {
9181	imaved.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2
9182	objectMap := make(map[string]interface{})
9183	if imaved.EventType != nil {
9184		objectMap["eventType"] = imaved.EventType
9185	}
9186	if imaved.Category != nil {
9187		objectMap["category"] = imaved.Category
9188	}
9189	if imaved.Component != nil {
9190		objectMap["component"] = imaved.Component
9191	}
9192	if imaved.CorrectiveAction != nil {
9193		objectMap["correctiveAction"] = imaved.CorrectiveAction
9194	}
9195	if imaved.Details != nil {
9196		objectMap["details"] = imaved.Details
9197	}
9198	if imaved.Summary != nil {
9199		objectMap["summary"] = imaved.Summary
9200	}
9201	if imaved.SiteName != nil {
9202		objectMap["siteName"] = imaved.SiteName
9203	}
9204	if imaved.InstanceType != "" {
9205		objectMap["instanceType"] = imaved.InstanceType
9206	}
9207	return json.Marshal(objectMap)
9208}
9209
9210// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9211func (imaved InMageAzureV2EventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
9212	return nil, false
9213}
9214
9215// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9216func (imaved InMageAzureV2EventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
9217	return nil, false
9218}
9219
9220// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9221func (imaved InMageAzureV2EventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
9222	return nil, false
9223}
9224
9225// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9226func (imaved InMageAzureV2EventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
9227	return nil, false
9228}
9229
9230// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9231func (imaved InMageAzureV2EventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
9232	return nil, false
9233}
9234
9235// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9236func (imaved InMageAzureV2EventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
9237	return &imaved, true
9238}
9239
9240// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9241func (imaved InMageAzureV2EventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
9242	return nil, false
9243}
9244
9245// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9246func (imaved InMageAzureV2EventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
9247	return nil, false
9248}
9249
9250// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageAzureV2EventDetails.
9251func (imaved InMageAzureV2EventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
9252	return &imaved, true
9253}
9254
9255// InMageAzureV2FailoverProviderInput inMageAzureV2 provider specific input for failover.
9256type InMageAzureV2FailoverProviderInput struct {
9257	// VaultLocation - Location of the vault.
9258	VaultLocation *string `json:"vaultLocation,omitempty"`
9259	// 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.
9260	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
9261	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
9262	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
9263}
9264
9265// MarshalJSON is the custom marshaler for InMageAzureV2FailoverProviderInput.
9266func (imavfpi InMageAzureV2FailoverProviderInput) MarshalJSON() ([]byte, error) {
9267	imavfpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2
9268	objectMap := make(map[string]interface{})
9269	if imavfpi.VaultLocation != nil {
9270		objectMap["vaultLocation"] = imavfpi.VaultLocation
9271	}
9272	if imavfpi.RecoveryPointID != nil {
9273		objectMap["recoveryPointId"] = imavfpi.RecoveryPointID
9274	}
9275	if imavfpi.InstanceType != "" {
9276		objectMap["instanceType"] = imavfpi.InstanceType
9277	}
9278	return json.Marshal(objectMap)
9279}
9280
9281// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9282func (imavfpi InMageAzureV2FailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
9283	return nil, false
9284}
9285
9286// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9287func (imavfpi InMageAzureV2FailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
9288	return nil, false
9289}
9290
9291// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9292func (imavfpi InMageAzureV2FailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
9293	return nil, false
9294}
9295
9296// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9297func (imavfpi InMageAzureV2FailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
9298	return &imavfpi, true
9299}
9300
9301// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9302func (imavfpi InMageAzureV2FailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
9303	return nil, false
9304}
9305
9306// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9307func (imavfpi InMageAzureV2FailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
9308	return nil, false
9309}
9310
9311// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageAzureV2FailoverProviderInput.
9312func (imavfpi InMageAzureV2FailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
9313	return &imavfpi, true
9314}
9315
9316// InMageAzureV2ManagedDiskDetails inMageAzureV2 Managed disk details.
9317type InMageAzureV2ManagedDiskDetails struct {
9318	// DiskID - The disk id.
9319	DiskID *string `json:"diskId,omitempty"`
9320	// SeedManagedDiskID - Seed managed disk Id.
9321	SeedManagedDiskID *string `json:"seedManagedDiskId,omitempty"`
9322	// ReplicaDiskType - The replica disk type.
9323	ReplicaDiskType *string `json:"replicaDiskType,omitempty"`
9324}
9325
9326// InMageAzureV2PolicyDetails inMage Azure v2 specific protection profile details.
9327type InMageAzureV2PolicyDetails struct {
9328	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
9329	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
9330	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
9331	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
9332	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
9333	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
9334	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
9335	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
9336	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
9337	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
9338	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
9339	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
9340}
9341
9342// MarshalJSON is the custom marshaler for InMageAzureV2PolicyDetails.
9343func (imavpd InMageAzureV2PolicyDetails) MarshalJSON() ([]byte, error) {
9344	imavpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2
9345	objectMap := make(map[string]interface{})
9346	if imavpd.CrashConsistentFrequencyInMinutes != nil {
9347		objectMap["crashConsistentFrequencyInMinutes"] = imavpd.CrashConsistentFrequencyInMinutes
9348	}
9349	if imavpd.RecoveryPointThresholdInMinutes != nil {
9350		objectMap["recoveryPointThresholdInMinutes"] = imavpd.RecoveryPointThresholdInMinutes
9351	}
9352	if imavpd.RecoveryPointHistory != nil {
9353		objectMap["recoveryPointHistory"] = imavpd.RecoveryPointHistory
9354	}
9355	if imavpd.AppConsistentFrequencyInMinutes != nil {
9356		objectMap["appConsistentFrequencyInMinutes"] = imavpd.AppConsistentFrequencyInMinutes
9357	}
9358	if imavpd.MultiVMSyncStatus != nil {
9359		objectMap["multiVmSyncStatus"] = imavpd.MultiVMSyncStatus
9360	}
9361	if imavpd.InstanceType != "" {
9362		objectMap["instanceType"] = imavpd.InstanceType
9363	}
9364	return json.Marshal(objectMap)
9365}
9366
9367// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9368func (imavpd InMageAzureV2PolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
9369	return nil, false
9370}
9371
9372// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9373func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
9374	return nil, false
9375}
9376
9377// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9378func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
9379	return nil, false
9380}
9381
9382// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9383func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
9384	return nil, false
9385}
9386
9387// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9388func (imavpd InMageAzureV2PolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
9389	return nil, false
9390}
9391
9392// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9393func (imavpd InMageAzureV2PolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
9394	return &imavpd, true
9395}
9396
9397// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9398func (imavpd InMageAzureV2PolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
9399	return nil, false
9400}
9401
9402// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9403func (imavpd InMageAzureV2PolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
9404	return nil, false
9405}
9406
9407// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9408func (imavpd InMageAzureV2PolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
9409	return nil, false
9410}
9411
9412// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9413func (imavpd InMageAzureV2PolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
9414	return nil, false
9415}
9416
9417// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9418func (imavpd InMageAzureV2PolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
9419	return nil, false
9420}
9421
9422// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9423func (imavpd InMageAzureV2PolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
9424	return nil, false
9425}
9426
9427// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageAzureV2PolicyDetails.
9428func (imavpd InMageAzureV2PolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
9429	return &imavpd, true
9430}
9431
9432// InMageAzureV2PolicyInput vMWare Azure specific policy Input.
9433type InMageAzureV2PolicyInput struct {
9434	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
9435	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
9436	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
9437	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
9438	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
9439	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
9440	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
9441	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
9442	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
9443	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
9444	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
9445	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
9446}
9447
9448// MarshalJSON is the custom marshaler for InMageAzureV2PolicyInput.
9449func (imavpi InMageAzureV2PolicyInput) MarshalJSON() ([]byte, error) {
9450	imavpi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2
9451	objectMap := make(map[string]interface{})
9452	if imavpi.RecoveryPointThresholdInMinutes != nil {
9453		objectMap["recoveryPointThresholdInMinutes"] = imavpi.RecoveryPointThresholdInMinutes
9454	}
9455	if imavpi.RecoveryPointHistory != nil {
9456		objectMap["recoveryPointHistory"] = imavpi.RecoveryPointHistory
9457	}
9458	if imavpi.CrashConsistentFrequencyInMinutes != nil {
9459		objectMap["crashConsistentFrequencyInMinutes"] = imavpi.CrashConsistentFrequencyInMinutes
9460	}
9461	if imavpi.AppConsistentFrequencyInMinutes != nil {
9462		objectMap["appConsistentFrequencyInMinutes"] = imavpi.AppConsistentFrequencyInMinutes
9463	}
9464	if imavpi.MultiVMSyncStatus != "" {
9465		objectMap["multiVmSyncStatus"] = imavpi.MultiVMSyncStatus
9466	}
9467	if imavpi.InstanceType != "" {
9468		objectMap["instanceType"] = imavpi.InstanceType
9469	}
9470	return json.Marshal(objectMap)
9471}
9472
9473// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9474func (imavpi InMageAzureV2PolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
9475	return nil, false
9476}
9477
9478// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9479func (imavpi InMageAzureV2PolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
9480	return nil, false
9481}
9482
9483// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9484func (imavpi InMageAzureV2PolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
9485	return nil, false
9486}
9487
9488// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9489func (imavpi InMageAzureV2PolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
9490	return nil, false
9491}
9492
9493// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9494func (imavpi InMageAzureV2PolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
9495	return &imavpi, true
9496}
9497
9498// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9499func (imavpi InMageAzureV2PolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
9500	return nil, false
9501}
9502
9503// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9504func (imavpi InMageAzureV2PolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
9505	return nil, false
9506}
9507
9508// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9509func (imavpi InMageAzureV2PolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
9510	return nil, false
9511}
9512
9513// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9514func (imavpi InMageAzureV2PolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
9515	return nil, false
9516}
9517
9518// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageAzureV2PolicyInput.
9519func (imavpi InMageAzureV2PolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
9520	return &imavpi, true
9521}
9522
9523// InMageAzureV2ProtectedDiskDetails inMageAzureV2 protected disk details.
9524type InMageAzureV2ProtectedDiskDetails struct {
9525	// DiskID - The disk id.
9526	DiskID *string `json:"diskId,omitempty"`
9527	// DiskName - The disk name.
9528	DiskName *string `json:"diskName,omitempty"`
9529	// ProtectionStage - The protection stage.
9530	ProtectionStage *string `json:"protectionStage,omitempty"`
9531	// HealthErrorCode - The health error code for the disk.
9532	HealthErrorCode *string `json:"healthErrorCode,omitempty"`
9533	// RpoInSeconds - The RPO in seconds.
9534	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
9535	// ResyncRequired - A value indicating whether resync is required for this disk.
9536	ResyncRequired *string `json:"resyncRequired,omitempty"`
9537	// ResyncProgressPercentage - The resync progress percentage.
9538	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
9539	// ResyncDurationInSeconds - The resync duration in seconds.
9540	ResyncDurationInSeconds *int64 `json:"resyncDurationInSeconds,omitempty"`
9541	// DiskCapacityInBytes - The disk capacity in bytes.
9542	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
9543	// FileSystemCapacityInBytes - The disk file system capacity in bytes.
9544	FileSystemCapacityInBytes *int64 `json:"fileSystemCapacityInBytes,omitempty"`
9545	// SourceDataInMegaBytes - The source data transit in MB.
9546	SourceDataInMegaBytes *float64 `json:"sourceDataInMegaBytes,omitempty"`
9547	// PsDataInMegaBytes - The PS data transit in MB.
9548	PsDataInMegaBytes *float64 `json:"psDataInMegaBytes,omitempty"`
9549	// TargetDataInMegaBytes - The target data transit in MB.
9550	TargetDataInMegaBytes *float64 `json:"targetDataInMegaBytes,omitempty"`
9551	// DiskResized - A value indicating whether disk is resized.
9552	DiskResized *string `json:"diskResized,omitempty"`
9553	// LastRpoCalculatedTime - The last RPO calculated time.
9554	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
9555}
9556
9557// InMageAzureV2RecoveryPointDetails inMage Azure V2 provider specific recovery point details.
9558type InMageAzureV2RecoveryPointDetails struct {
9559	// IsMultiVMSyncPoint - A value indicating whether the recovery point is multi VM consistent.
9560	IsMultiVMSyncPoint *string `json:"isMultiVmSyncPoint,omitempty"`
9561	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
9562	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
9563}
9564
9565// MarshalJSON is the custom marshaler for InMageAzureV2RecoveryPointDetails.
9566func (imavrpd InMageAzureV2RecoveryPointDetails) MarshalJSON() ([]byte, error) {
9567	imavrpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2
9568	objectMap := make(map[string]interface{})
9569	if imavrpd.IsMultiVMSyncPoint != nil {
9570		objectMap["isMultiVmSyncPoint"] = imavrpd.IsMultiVMSyncPoint
9571	}
9572	if imavrpd.InstanceType != "" {
9573		objectMap["instanceType"] = imavrpd.InstanceType
9574	}
9575	return json.Marshal(objectMap)
9576}
9577
9578// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9579func (imavrpd InMageAzureV2RecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
9580	return nil, false
9581}
9582
9583// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9584func (imavrpd InMageAzureV2RecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
9585	return &imavrpd, true
9586}
9587
9588// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9589func (imavrpd InMageAzureV2RecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
9590	return nil, false
9591}
9592
9593// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9594func (imavrpd InMageAzureV2RecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
9595	return nil, false
9596}
9597
9598// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageAzureV2RecoveryPointDetails.
9599func (imavrpd InMageAzureV2RecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
9600	return &imavrpd, true
9601}
9602
9603// InMageAzureV2ReplicationDetails inMageAzureV2 provider specific settings
9604type InMageAzureV2ReplicationDetails struct {
9605	// InfrastructureVMID - The infrastructure VM Id.
9606	InfrastructureVMID *string `json:"infrastructureVmId,omitempty"`
9607	// VCenterInfrastructureID - The vCenter infrastructure Id.
9608	VCenterInfrastructureID *string `json:"vCenterInfrastructureId,omitempty"`
9609	// ProtectionStage - The protection stage.
9610	ProtectionStage *string `json:"protectionStage,omitempty"`
9611	// VMID - The virtual machine Id.
9612	VMID *string `json:"vmId,omitempty"`
9613	// VMProtectionState - The protection state for the vm.
9614	VMProtectionState *string `json:"vmProtectionState,omitempty"`
9615	// VMProtectionStateDescription - The protection state description for the vm.
9616	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
9617	// ResyncProgressPercentage - The resync progress percentage.
9618	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
9619	// RpoInSeconds - The RPO in seconds.
9620	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
9621	// CompressedDataRateInMB - The compressed data change rate in MB.
9622	CompressedDataRateInMB *float64 `json:"compressedDataRateInMB,omitempty"`
9623	// UncompressedDataRateInMB - The uncompressed data change rate in MB.
9624	UncompressedDataRateInMB *float64 `json:"uncompressedDataRateInMB,omitempty"`
9625	// IPAddress - The source IP address.
9626	IPAddress *string `json:"ipAddress,omitempty"`
9627	// AgentVersion - The agent version.
9628	AgentVersion *string `json:"agentVersion,omitempty"`
9629	// AgentExpiryDate - Agent expiry date.
9630	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
9631	// IsAgentUpdateRequired - A value indicating whether installed agent needs to be updated.
9632	IsAgentUpdateRequired *string `json:"isAgentUpdateRequired,omitempty"`
9633	// IsRebootAfterUpdateRequired - A value indicating whether the source server requires a restart after update.
9634	IsRebootAfterUpdateRequired *string `json:"isRebootAfterUpdateRequired,omitempty"`
9635	// LastHeartbeat - The last heartbeat received from the source server.
9636	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
9637	// ProcessServerID - The process server Id.
9638	ProcessServerID *string `json:"processServerId,omitempty"`
9639	// ProcessServerName - READ-ONLY; The process server name.
9640	ProcessServerName *string `json:"processServerName,omitempty"`
9641	// MultiVMGroupID - The multi vm group Id.
9642	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
9643	// MultiVMGroupName - The multi vm group name.
9644	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
9645	// MultiVMSyncStatus - A value indicating whether multi vm sync is enabled or disabled.
9646	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
9647	// ProtectedDisks - The list of protected disks.
9648	ProtectedDisks *[]InMageAzureV2ProtectedDiskDetails `json:"protectedDisks,omitempty"`
9649	// DiskResized - A value indicating whether any disk is resized for this VM.
9650	DiskResized *string `json:"diskResized,omitempty"`
9651	// MasterTargetID - The master target Id.
9652	MasterTargetID *string `json:"masterTargetId,omitempty"`
9653	// SourceVMCPUCount - The CPU count of the VM on the primary side.
9654	SourceVMCPUCount *int32 `json:"sourceVmCpuCount,omitempty"`
9655	// SourceVMRAMSizeInMB - The RAM size of the VM on the primary side.
9656	SourceVMRAMSizeInMB *int32 `json:"sourceVmRamSizeInMB,omitempty"`
9657	// OsType - The type of the OS on the VM.
9658	OsType *string `json:"osType,omitempty"`
9659	// VhdName - The OS disk VHD name.
9660	VhdName *string `json:"vhdName,omitempty"`
9661	// OsDiskID - The id of the disk containing the OS.
9662	OsDiskID *string `json:"osDiskId,omitempty"`
9663	// AzureVMDiskDetails - Azure VM Disk details.
9664	AzureVMDiskDetails *[]AzureVMDiskDetails `json:"azureVMDiskDetails,omitempty"`
9665	// RecoveryAzureVMName - Recovery Azure given name.
9666	RecoveryAzureVMName *string `json:"recoveryAzureVMName,omitempty"`
9667	// RecoveryAzureVMSize - The Recovery Azure VM size.
9668	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
9669	// RecoveryAzureStorageAccount - The recovery Azure storage account.
9670	RecoveryAzureStorageAccount *string `json:"recoveryAzureStorageAccount,omitempty"`
9671	// 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.
9672	RecoveryAzureLogStorageAccountID *string `json:"recoveryAzureLogStorageAccountId,omitempty"`
9673	// VMNics - The PE Network details.
9674	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
9675	// SelectedRecoveryAzureNetworkID - The selected recovery azure network Id.
9676	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
9677	// SelectedTfoAzureNetworkID - The test failover virtual network.
9678	SelectedTfoAzureNetworkID *string `json:"selectedTfoAzureNetworkId,omitempty"`
9679	// SelectedSourceNicID - The selected source nic Id which will be used as the primary nic during failover.
9680	SelectedSourceNicID *string `json:"selectedSourceNicId,omitempty"`
9681	// DiscoveryType - A value indicating the discovery type of the machine. Value can be vCenter or physical.
9682	DiscoveryType *string `json:"discoveryType,omitempty"`
9683	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
9684	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
9685	// Datastores - The data stores of the on-premise machine. Value can be list of strings that contain data store names.
9686	Datastores *[]string `json:"datastores,omitempty"`
9687	// 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.
9688	TargetVMID *string `json:"targetVmId,omitempty"`
9689	// RecoveryAzureResourceGroupID - The target resource group Id.
9690	RecoveryAzureResourceGroupID *string `json:"recoveryAzureResourceGroupId,omitempty"`
9691	// RecoveryAvailabilitySetID - The recovery availability set Id.
9692	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
9693	// TargetAvailabilityZone - The target availability zone.
9694	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
9695	// TargetProximityPlacementGroupID - The target proximity placement group Id.
9696	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
9697	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
9698	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
9699	// LicenseType - License Type of the VM to be used.
9700	LicenseType *string `json:"licenseType,omitempty"`
9701	// ValidationErrors - The validation errors of the on-premise machine Value can be list of validation errors.
9702	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
9703	// LastRpoCalculatedTime - The last RPO calculated time.
9704	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
9705	// LastUpdateReceivedTime - The last update time received from on-prem components.
9706	LastUpdateReceivedTime *date.Time `json:"lastUpdateReceivedTime,omitempty"`
9707	// ReplicaID - The replica id of the protected item.
9708	ReplicaID *string `json:"replicaId,omitempty"`
9709	// OsVersion - The OS Version of the protected item.
9710	OsVersion *string `json:"osVersion,omitempty"`
9711	// ProtectedManagedDisks - The list of protected managed disks.
9712	ProtectedManagedDisks *[]InMageAzureV2ManagedDiskDetails `json:"protectedManagedDisks,omitempty"`
9713	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
9714	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
9715}
9716
9717// MarshalJSON is the custom marshaler for InMageAzureV2ReplicationDetails.
9718func (imavrd InMageAzureV2ReplicationDetails) MarshalJSON() ([]byte, error) {
9719	imavrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2
9720	objectMap := make(map[string]interface{})
9721	if imavrd.InfrastructureVMID != nil {
9722		objectMap["infrastructureVmId"] = imavrd.InfrastructureVMID
9723	}
9724	if imavrd.VCenterInfrastructureID != nil {
9725		objectMap["vCenterInfrastructureId"] = imavrd.VCenterInfrastructureID
9726	}
9727	if imavrd.ProtectionStage != nil {
9728		objectMap["protectionStage"] = imavrd.ProtectionStage
9729	}
9730	if imavrd.VMID != nil {
9731		objectMap["vmId"] = imavrd.VMID
9732	}
9733	if imavrd.VMProtectionState != nil {
9734		objectMap["vmProtectionState"] = imavrd.VMProtectionState
9735	}
9736	if imavrd.VMProtectionStateDescription != nil {
9737		objectMap["vmProtectionStateDescription"] = imavrd.VMProtectionStateDescription
9738	}
9739	if imavrd.ResyncProgressPercentage != nil {
9740		objectMap["resyncProgressPercentage"] = imavrd.ResyncProgressPercentage
9741	}
9742	if imavrd.RpoInSeconds != nil {
9743		objectMap["rpoInSeconds"] = imavrd.RpoInSeconds
9744	}
9745	if imavrd.CompressedDataRateInMB != nil {
9746		objectMap["compressedDataRateInMB"] = imavrd.CompressedDataRateInMB
9747	}
9748	if imavrd.UncompressedDataRateInMB != nil {
9749		objectMap["uncompressedDataRateInMB"] = imavrd.UncompressedDataRateInMB
9750	}
9751	if imavrd.IPAddress != nil {
9752		objectMap["ipAddress"] = imavrd.IPAddress
9753	}
9754	if imavrd.AgentVersion != nil {
9755		objectMap["agentVersion"] = imavrd.AgentVersion
9756	}
9757	if imavrd.AgentExpiryDate != nil {
9758		objectMap["agentExpiryDate"] = imavrd.AgentExpiryDate
9759	}
9760	if imavrd.IsAgentUpdateRequired != nil {
9761		objectMap["isAgentUpdateRequired"] = imavrd.IsAgentUpdateRequired
9762	}
9763	if imavrd.IsRebootAfterUpdateRequired != nil {
9764		objectMap["isRebootAfterUpdateRequired"] = imavrd.IsRebootAfterUpdateRequired
9765	}
9766	if imavrd.LastHeartbeat != nil {
9767		objectMap["lastHeartbeat"] = imavrd.LastHeartbeat
9768	}
9769	if imavrd.ProcessServerID != nil {
9770		objectMap["processServerId"] = imavrd.ProcessServerID
9771	}
9772	if imavrd.MultiVMGroupID != nil {
9773		objectMap["multiVmGroupId"] = imavrd.MultiVMGroupID
9774	}
9775	if imavrd.MultiVMGroupName != nil {
9776		objectMap["multiVmGroupName"] = imavrd.MultiVMGroupName
9777	}
9778	if imavrd.MultiVMSyncStatus != nil {
9779		objectMap["multiVmSyncStatus"] = imavrd.MultiVMSyncStatus
9780	}
9781	if imavrd.ProtectedDisks != nil {
9782		objectMap["protectedDisks"] = imavrd.ProtectedDisks
9783	}
9784	if imavrd.DiskResized != nil {
9785		objectMap["diskResized"] = imavrd.DiskResized
9786	}
9787	if imavrd.MasterTargetID != nil {
9788		objectMap["masterTargetId"] = imavrd.MasterTargetID
9789	}
9790	if imavrd.SourceVMCPUCount != nil {
9791		objectMap["sourceVmCpuCount"] = imavrd.SourceVMCPUCount
9792	}
9793	if imavrd.SourceVMRAMSizeInMB != nil {
9794		objectMap["sourceVmRamSizeInMB"] = imavrd.SourceVMRAMSizeInMB
9795	}
9796	if imavrd.OsType != nil {
9797		objectMap["osType"] = imavrd.OsType
9798	}
9799	if imavrd.VhdName != nil {
9800		objectMap["vhdName"] = imavrd.VhdName
9801	}
9802	if imavrd.OsDiskID != nil {
9803		objectMap["osDiskId"] = imavrd.OsDiskID
9804	}
9805	if imavrd.AzureVMDiskDetails != nil {
9806		objectMap["azureVMDiskDetails"] = imavrd.AzureVMDiskDetails
9807	}
9808	if imavrd.RecoveryAzureVMName != nil {
9809		objectMap["recoveryAzureVMName"] = imavrd.RecoveryAzureVMName
9810	}
9811	if imavrd.RecoveryAzureVMSize != nil {
9812		objectMap["recoveryAzureVMSize"] = imavrd.RecoveryAzureVMSize
9813	}
9814	if imavrd.RecoveryAzureStorageAccount != nil {
9815		objectMap["recoveryAzureStorageAccount"] = imavrd.RecoveryAzureStorageAccount
9816	}
9817	if imavrd.RecoveryAzureLogStorageAccountID != nil {
9818		objectMap["recoveryAzureLogStorageAccountId"] = imavrd.RecoveryAzureLogStorageAccountID
9819	}
9820	if imavrd.VMNics != nil {
9821		objectMap["vmNics"] = imavrd.VMNics
9822	}
9823	if imavrd.SelectedRecoveryAzureNetworkID != nil {
9824		objectMap["selectedRecoveryAzureNetworkId"] = imavrd.SelectedRecoveryAzureNetworkID
9825	}
9826	if imavrd.SelectedTfoAzureNetworkID != nil {
9827		objectMap["selectedTfoAzureNetworkId"] = imavrd.SelectedTfoAzureNetworkID
9828	}
9829	if imavrd.SelectedSourceNicID != nil {
9830		objectMap["selectedSourceNicId"] = imavrd.SelectedSourceNicID
9831	}
9832	if imavrd.DiscoveryType != nil {
9833		objectMap["discoveryType"] = imavrd.DiscoveryType
9834	}
9835	if imavrd.EnableRdpOnTargetOption != nil {
9836		objectMap["enableRdpOnTargetOption"] = imavrd.EnableRdpOnTargetOption
9837	}
9838	if imavrd.Datastores != nil {
9839		objectMap["datastores"] = imavrd.Datastores
9840	}
9841	if imavrd.TargetVMID != nil {
9842		objectMap["targetVmId"] = imavrd.TargetVMID
9843	}
9844	if imavrd.RecoveryAzureResourceGroupID != nil {
9845		objectMap["recoveryAzureResourceGroupId"] = imavrd.RecoveryAzureResourceGroupID
9846	}
9847	if imavrd.RecoveryAvailabilitySetID != nil {
9848		objectMap["recoveryAvailabilitySetId"] = imavrd.RecoveryAvailabilitySetID
9849	}
9850	if imavrd.TargetAvailabilityZone != nil {
9851		objectMap["targetAvailabilityZone"] = imavrd.TargetAvailabilityZone
9852	}
9853	if imavrd.TargetProximityPlacementGroupID != nil {
9854		objectMap["targetProximityPlacementGroupId"] = imavrd.TargetProximityPlacementGroupID
9855	}
9856	if imavrd.UseManagedDisks != nil {
9857		objectMap["useManagedDisks"] = imavrd.UseManagedDisks
9858	}
9859	if imavrd.LicenseType != nil {
9860		objectMap["licenseType"] = imavrd.LicenseType
9861	}
9862	if imavrd.ValidationErrors != nil {
9863		objectMap["validationErrors"] = imavrd.ValidationErrors
9864	}
9865	if imavrd.LastRpoCalculatedTime != nil {
9866		objectMap["lastRpoCalculatedTime"] = imavrd.LastRpoCalculatedTime
9867	}
9868	if imavrd.LastUpdateReceivedTime != nil {
9869		objectMap["lastUpdateReceivedTime"] = imavrd.LastUpdateReceivedTime
9870	}
9871	if imavrd.ReplicaID != nil {
9872		objectMap["replicaId"] = imavrd.ReplicaID
9873	}
9874	if imavrd.OsVersion != nil {
9875		objectMap["osVersion"] = imavrd.OsVersion
9876	}
9877	if imavrd.ProtectedManagedDisks != nil {
9878		objectMap["protectedManagedDisks"] = imavrd.ProtectedManagedDisks
9879	}
9880	if imavrd.InstanceType != "" {
9881		objectMap["instanceType"] = imavrd.InstanceType
9882	}
9883	return json.Marshal(objectMap)
9884}
9885
9886// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9887func (imavrd InMageAzureV2ReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
9888	return nil, false
9889}
9890
9891// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9892func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
9893	return nil, false
9894}
9895
9896// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9897func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
9898	return nil, false
9899}
9900
9901// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9902func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
9903	return nil, false
9904}
9905
9906// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9907func (imavrd InMageAzureV2ReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
9908	return nil, false
9909}
9910
9911// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9912func (imavrd InMageAzureV2ReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
9913	return &imavrd, true
9914}
9915
9916// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9917func (imavrd InMageAzureV2ReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
9918	return nil, false
9919}
9920
9921// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9922func (imavrd InMageAzureV2ReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
9923	return nil, false
9924}
9925
9926// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9927func (imavrd InMageAzureV2ReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
9928	return nil, false
9929}
9930
9931// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageAzureV2ReplicationDetails.
9932func (imavrd InMageAzureV2ReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
9933	return &imavrd, true
9934}
9935
9936// InMageAzureV2ReprotectInput inMageAzureV2 specific provider input.
9937type InMageAzureV2ReprotectInput struct {
9938	// MasterTargetID - The Master target Id.
9939	MasterTargetID *string `json:"masterTargetId,omitempty"`
9940	// ProcessServerID - The Process Server Id.
9941	ProcessServerID *string `json:"processServerId,omitempty"`
9942	// StorageAccountID - The storage account id.
9943	StorageAccountID *string `json:"storageAccountId,omitempty"`
9944	// RunAsAccountID - The CS account Id.
9945	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
9946	// PolicyID - The Policy Id.
9947	PolicyID *string `json:"policyId,omitempty"`
9948	// LogStorageAccountID - The storage account to be used for logging during replication.
9949	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
9950	// DisksToInclude - The disks to include list.
9951	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
9952	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
9953	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
9954}
9955
9956// MarshalJSON is the custom marshaler for InMageAzureV2ReprotectInput.
9957func (imavri InMageAzureV2ReprotectInput) MarshalJSON() ([]byte, error) {
9958	imavri.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2
9959	objectMap := make(map[string]interface{})
9960	if imavri.MasterTargetID != nil {
9961		objectMap["masterTargetId"] = imavri.MasterTargetID
9962	}
9963	if imavri.ProcessServerID != nil {
9964		objectMap["processServerId"] = imavri.ProcessServerID
9965	}
9966	if imavri.StorageAccountID != nil {
9967		objectMap["storageAccountId"] = imavri.StorageAccountID
9968	}
9969	if imavri.RunAsAccountID != nil {
9970		objectMap["runAsAccountId"] = imavri.RunAsAccountID
9971	}
9972	if imavri.PolicyID != nil {
9973		objectMap["policyId"] = imavri.PolicyID
9974	}
9975	if imavri.LogStorageAccountID != nil {
9976		objectMap["logStorageAccountId"] = imavri.LogStorageAccountID
9977	}
9978	if imavri.DisksToInclude != nil {
9979		objectMap["disksToInclude"] = imavri.DisksToInclude
9980	}
9981	if imavri.InstanceType != "" {
9982		objectMap["instanceType"] = imavri.InstanceType
9983	}
9984	return json.Marshal(objectMap)
9985}
9986
9987// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
9988func (imavri InMageAzureV2ReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
9989	return nil, false
9990}
9991
9992// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
9993func (imavri InMageAzureV2ReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
9994	return nil, false
9995}
9996
9997// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
9998func (imavri InMageAzureV2ReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
9999	return &imavri, true
10000}
10001
10002// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10003func (imavri InMageAzureV2ReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
10004	return nil, false
10005}
10006
10007// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10008func (imavri InMageAzureV2ReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
10009	return nil, false
10010}
10011
10012// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageAzureV2ReprotectInput.
10013func (imavri InMageAzureV2ReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
10014	return &imavri, true
10015}
10016
10017// InMageAzureV2TestFailoverInput inMageAzureV2 provider specific input for test failover.
10018type InMageAzureV2TestFailoverInput struct {
10019	// VaultLocation - Location of the vault.
10020	VaultLocation *string `json:"vaultLocation,omitempty"`
10021	// 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.
10022	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10023	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
10024	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
10025}
10026
10027// MarshalJSON is the custom marshaler for InMageAzureV2TestFailoverInput.
10028func (imavtfi InMageAzureV2TestFailoverInput) MarshalJSON() ([]byte, error) {
10029	imavtfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2
10030	objectMap := make(map[string]interface{})
10031	if imavtfi.VaultLocation != nil {
10032		objectMap["vaultLocation"] = imavtfi.VaultLocation
10033	}
10034	if imavtfi.RecoveryPointID != nil {
10035		objectMap["recoveryPointId"] = imavtfi.RecoveryPointID
10036	}
10037	if imavtfi.InstanceType != "" {
10038		objectMap["instanceType"] = imavtfi.InstanceType
10039	}
10040	return json.Marshal(objectMap)
10041}
10042
10043// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10044func (imavtfi InMageAzureV2TestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
10045	return nil, false
10046}
10047
10048// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10049func (imavtfi InMageAzureV2TestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
10050	return nil, false
10051}
10052
10053// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10054func (imavtfi InMageAzureV2TestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
10055	return &imavtfi, true
10056}
10057
10058// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10059func (imavtfi InMageAzureV2TestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
10060	return nil, false
10061}
10062
10063// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10064func (imavtfi InMageAzureV2TestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
10065	return nil, false
10066}
10067
10068// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10069func (imavtfi InMageAzureV2TestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
10070	return nil, false
10071}
10072
10073// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageAzureV2TestFailoverInput.
10074func (imavtfi InMageAzureV2TestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
10075	return &imavtfi, true
10076}
10077
10078// InMageAzureV2UnplannedFailoverInput inMageAzureV2 provider specific input for unplanned failover.
10079type InMageAzureV2UnplannedFailoverInput struct {
10080	// VaultLocation - Location of the vault.
10081	VaultLocation *string `json:"vaultLocation,omitempty"`
10082	// 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.
10083	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10084	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
10085	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
10086}
10087
10088// MarshalJSON is the custom marshaler for InMageAzureV2UnplannedFailoverInput.
10089func (imavufi InMageAzureV2UnplannedFailoverInput) MarshalJSON() ([]byte, error) {
10090	imavufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2
10091	objectMap := make(map[string]interface{})
10092	if imavufi.VaultLocation != nil {
10093		objectMap["vaultLocation"] = imavufi.VaultLocation
10094	}
10095	if imavufi.RecoveryPointID != nil {
10096		objectMap["recoveryPointId"] = imavufi.RecoveryPointID
10097	}
10098	if imavufi.InstanceType != "" {
10099		objectMap["instanceType"] = imavufi.InstanceType
10100	}
10101	return json.Marshal(objectMap)
10102}
10103
10104// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10105func (imavufi InMageAzureV2UnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
10106	return nil, false
10107}
10108
10109// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10110func (imavufi InMageAzureV2UnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
10111	return nil, false
10112}
10113
10114// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10115func (imavufi InMageAzureV2UnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
10116	return &imavufi, true
10117}
10118
10119// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10120func (imavufi InMageAzureV2UnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
10121	return nil, false
10122}
10123
10124// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10125func (imavufi InMageAzureV2UnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
10126	return nil, false
10127}
10128
10129// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10130func (imavufi InMageAzureV2UnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
10131	return nil, false
10132}
10133
10134// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageAzureV2UnplannedFailoverInput.
10135func (imavufi InMageAzureV2UnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
10136	return &imavufi, true
10137}
10138
10139// InMageAzureV2UpdateReplicationProtectedItemInput inMage Azure V2 input to update replication protected
10140// item.
10141type InMageAzureV2UpdateReplicationProtectedItemInput struct {
10142	// RecoveryAzureV1ResourceGroupID - The recovery Azure resource group Id for classic deployment.
10143	RecoveryAzureV1ResourceGroupID *string `json:"recoveryAzureV1ResourceGroupId,omitempty"`
10144	// RecoveryAzureV2ResourceGroupID - The recovery Azure resource group Id for resource manager deployment.
10145	RecoveryAzureV2ResourceGroupID *string `json:"recoveryAzureV2ResourceGroupId,omitempty"`
10146	// UseManagedDisks - A value indicating whether managed disks should be used during failover.
10147	UseManagedDisks *string `json:"useManagedDisks,omitempty"`
10148	// TargetProximityPlacementGroupID - The target proximity placement group Id.
10149	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
10150	// TargetAvailabilityZone - The target availability zone.
10151	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
10152	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
10153	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
10154}
10155
10156// MarshalJSON is the custom marshaler for InMageAzureV2UpdateReplicationProtectedItemInput.
10157func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
10158	imavurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2
10159	objectMap := make(map[string]interface{})
10160	if imavurpii.RecoveryAzureV1ResourceGroupID != nil {
10161		objectMap["recoveryAzureV1ResourceGroupId"] = imavurpii.RecoveryAzureV1ResourceGroupID
10162	}
10163	if imavurpii.RecoveryAzureV2ResourceGroupID != nil {
10164		objectMap["recoveryAzureV2ResourceGroupId"] = imavurpii.RecoveryAzureV2ResourceGroupID
10165	}
10166	if imavurpii.UseManagedDisks != nil {
10167		objectMap["useManagedDisks"] = imavurpii.UseManagedDisks
10168	}
10169	if imavurpii.TargetProximityPlacementGroupID != nil {
10170		objectMap["targetProximityPlacementGroupId"] = imavurpii.TargetProximityPlacementGroupID
10171	}
10172	if imavurpii.TargetAvailabilityZone != nil {
10173		objectMap["targetAvailabilityZone"] = imavurpii.TargetAvailabilityZone
10174	}
10175	if imavurpii.InstanceType != "" {
10176		objectMap["instanceType"] = imavurpii.InstanceType
10177	}
10178	return json.Marshal(objectMap)
10179}
10180
10181// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10182func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
10183	return nil, false
10184}
10185
10186// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10187func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
10188	return nil, false
10189}
10190
10191// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10192func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
10193	return &imavurpii, true
10194}
10195
10196// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10197func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
10198	return nil, false
10199}
10200
10201// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10202func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
10203	return nil, false
10204}
10205
10206// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageAzureV2UpdateReplicationProtectedItemInput.
10207func (imavurpii InMageAzureV2UpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
10208	return &imavurpii, true
10209}
10210
10211// InMageBasePolicyDetails base class for the policies of providers using InMage replication.
10212type InMageBasePolicyDetails struct {
10213	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
10214	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
10215	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
10216	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
10217	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
10218	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
10219	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
10220	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
10221	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
10222	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
10223}
10224
10225// MarshalJSON is the custom marshaler for InMageBasePolicyDetails.
10226func (imbpd InMageBasePolicyDetails) MarshalJSON() ([]byte, error) {
10227	imbpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails
10228	objectMap := make(map[string]interface{})
10229	if imbpd.RecoveryPointThresholdInMinutes != nil {
10230		objectMap["recoveryPointThresholdInMinutes"] = imbpd.RecoveryPointThresholdInMinutes
10231	}
10232	if imbpd.RecoveryPointHistory != nil {
10233		objectMap["recoveryPointHistory"] = imbpd.RecoveryPointHistory
10234	}
10235	if imbpd.AppConsistentFrequencyInMinutes != nil {
10236		objectMap["appConsistentFrequencyInMinutes"] = imbpd.AppConsistentFrequencyInMinutes
10237	}
10238	if imbpd.MultiVMSyncStatus != nil {
10239		objectMap["multiVmSyncStatus"] = imbpd.MultiVMSyncStatus
10240	}
10241	if imbpd.InstanceType != "" {
10242		objectMap["instanceType"] = imbpd.InstanceType
10243	}
10244	return json.Marshal(objectMap)
10245}
10246
10247// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10248func (imbpd InMageBasePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
10249	return nil, false
10250}
10251
10252// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10253func (imbpd InMageBasePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
10254	return nil, false
10255}
10256
10257// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10258func (imbpd InMageBasePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
10259	return nil, false
10260}
10261
10262// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10263func (imbpd InMageBasePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
10264	return nil, false
10265}
10266
10267// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10268func (imbpd InMageBasePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
10269	return nil, false
10270}
10271
10272// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10273func (imbpd InMageBasePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
10274	return nil, false
10275}
10276
10277// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10278func (imbpd InMageBasePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
10279	return &imbpd, true
10280}
10281
10282// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10283func (imbpd InMageBasePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
10284	return nil, false
10285}
10286
10287// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10288func (imbpd InMageBasePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
10289	return nil, false
10290}
10291
10292// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10293func (imbpd InMageBasePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
10294	return nil, false
10295}
10296
10297// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10298func (imbpd InMageBasePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
10299	return nil, false
10300}
10301
10302// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10303func (imbpd InMageBasePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
10304	return nil, false
10305}
10306
10307// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageBasePolicyDetails.
10308func (imbpd InMageBasePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
10309	return &imbpd, true
10310}
10311
10312// InMageDisableProtectionProviderSpecificInput inMage disable protection provider specific input.
10313type InMageDisableProtectionProviderSpecificInput struct {
10314	// ReplicaVMDeletionStatus - A value indicating whether the replica VM should be destroyed or retained. Values from Delete and Retain.
10315	ReplicaVMDeletionStatus *string `json:"replicaVmDeletionStatus,omitempty"`
10316	// InstanceType - Possible values include: 'InstanceTypeDisableProtectionProviderSpecificInput', 'InstanceTypeInMage'
10317	InstanceType InstanceTypeBasicDisableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
10318}
10319
10320// MarshalJSON is the custom marshaler for InMageDisableProtectionProviderSpecificInput.
10321func (imdppsi InMageDisableProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
10322	imdppsi.InstanceType = InstanceTypeInMage
10323	objectMap := make(map[string]interface{})
10324	if imdppsi.ReplicaVMDeletionStatus != nil {
10325		objectMap["replicaVmDeletionStatus"] = imdppsi.ReplicaVMDeletionStatus
10326	}
10327	if imdppsi.InstanceType != "" {
10328		objectMap["instanceType"] = imdppsi.InstanceType
10329	}
10330	return json.Marshal(objectMap)
10331}
10332
10333// AsInMageDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for InMageDisableProtectionProviderSpecificInput.
10334func (imdppsi InMageDisableProtectionProviderSpecificInput) AsInMageDisableProtectionProviderSpecificInput() (*InMageDisableProtectionProviderSpecificInput, bool) {
10335	return &imdppsi, true
10336}
10337
10338// AsDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for InMageDisableProtectionProviderSpecificInput.
10339func (imdppsi InMageDisableProtectionProviderSpecificInput) AsDisableProtectionProviderSpecificInput() (*DisableProtectionProviderSpecificInput, bool) {
10340	return nil, false
10341}
10342
10343// AsBasicDisableProtectionProviderSpecificInput is the BasicDisableProtectionProviderSpecificInput implementation for InMageDisableProtectionProviderSpecificInput.
10344func (imdppsi InMageDisableProtectionProviderSpecificInput) AsBasicDisableProtectionProviderSpecificInput() (BasicDisableProtectionProviderSpecificInput, bool) {
10345	return &imdppsi, true
10346}
10347
10348// InMageDiskDetails vMware/Physical specific Disk Details
10349type InMageDiskDetails struct {
10350	// DiskID - The disk Id.
10351	DiskID *string `json:"diskId,omitempty"`
10352	// DiskName - The disk name.
10353	DiskName *string `json:"diskName,omitempty"`
10354	// DiskSizeInMB - The disk size in MB.
10355	DiskSizeInMB *string `json:"diskSizeInMB,omitempty"`
10356	// DiskType - Whether disk is system disk or data disk.
10357	DiskType *string `json:"diskType,omitempty"`
10358	// DiskConfiguration - Whether disk is dynamic disk or basic disk.
10359	DiskConfiguration *string `json:"diskConfiguration,omitempty"`
10360	// VolumeList - Volumes of the disk.
10361	VolumeList *[]DiskVolumeDetails `json:"volumeList,omitempty"`
10362}
10363
10364// InMageDiskExclusionInput diskExclusionInput when doing enable protection of virtual machine in InMage
10365// provider.
10366type InMageDiskExclusionInput struct {
10367	// VolumeOptions - The volume label based option for disk exclusion.
10368	VolumeOptions *[]InMageVolumeExclusionOptions `json:"volumeOptions,omitempty"`
10369	// DiskSignatureOptions - The guest disk signature based option for disk exclusion.
10370	DiskSignatureOptions *[]InMageDiskSignatureExclusionOptions `json:"diskSignatureOptions,omitempty"`
10371}
10372
10373// InMageDiskSignatureExclusionOptions guest disk signature based disk exclusion option when doing enable
10374// protection of virtual machine in InMage provider.
10375type InMageDiskSignatureExclusionOptions struct {
10376	// DiskSignature - The guest signature of disk to be excluded from replication.
10377	DiskSignature *string `json:"diskSignature,omitempty"`
10378}
10379
10380// InMageEnableProtectionInput vMware Azure specific enable protection input.
10381type InMageEnableProtectionInput struct {
10382	// VMFriendlyName - The Vm Name.
10383	VMFriendlyName *string `json:"vmFriendlyName,omitempty"`
10384	// MasterTargetID - The Master Target Id.
10385	MasterTargetID *string `json:"masterTargetId,omitempty"`
10386	// ProcessServerID - The Process Server Id.
10387	ProcessServerID *string `json:"processServerId,omitempty"`
10388	// RetentionDrive - The retention drive to use on the MT.
10389	RetentionDrive *string `json:"retentionDrive,omitempty"`
10390	// RunAsAccountID - The CS account Id.
10391	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
10392	// MultiVMGroupID - The multi vm group Id.
10393	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
10394	// MultiVMGroupName - The multi vm group name.
10395	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
10396	// DatastoreName - The target data store name.
10397	DatastoreName *string `json:"datastoreName,omitempty"`
10398	// DiskExclusionInput - The enable disk exclusion input.
10399	DiskExclusionInput *InMageDiskExclusionInput `json:"diskExclusionInput,omitempty"`
10400	// DisksToInclude - The disks to include list.
10401	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
10402	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
10403	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
10404}
10405
10406// MarshalJSON is the custom marshaler for InMageEnableProtectionInput.
10407func (imepi InMageEnableProtectionInput) MarshalJSON() ([]byte, error) {
10408	imepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage
10409	objectMap := make(map[string]interface{})
10410	if imepi.VMFriendlyName != nil {
10411		objectMap["vmFriendlyName"] = imepi.VMFriendlyName
10412	}
10413	if imepi.MasterTargetID != nil {
10414		objectMap["masterTargetId"] = imepi.MasterTargetID
10415	}
10416	if imepi.ProcessServerID != nil {
10417		objectMap["processServerId"] = imepi.ProcessServerID
10418	}
10419	if imepi.RetentionDrive != nil {
10420		objectMap["retentionDrive"] = imepi.RetentionDrive
10421	}
10422	if imepi.RunAsAccountID != nil {
10423		objectMap["runAsAccountId"] = imepi.RunAsAccountID
10424	}
10425	if imepi.MultiVMGroupID != nil {
10426		objectMap["multiVmGroupId"] = imepi.MultiVMGroupID
10427	}
10428	if imepi.MultiVMGroupName != nil {
10429		objectMap["multiVmGroupName"] = imepi.MultiVMGroupName
10430	}
10431	if imepi.DatastoreName != nil {
10432		objectMap["datastoreName"] = imepi.DatastoreName
10433	}
10434	if imepi.DiskExclusionInput != nil {
10435		objectMap["diskExclusionInput"] = imepi.DiskExclusionInput
10436	}
10437	if imepi.DisksToInclude != nil {
10438		objectMap["disksToInclude"] = imepi.DisksToInclude
10439	}
10440	if imepi.InstanceType != "" {
10441		objectMap["instanceType"] = imepi.InstanceType
10442	}
10443	return json.Marshal(objectMap)
10444}
10445
10446// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10447func (imepi InMageEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
10448	return nil, false
10449}
10450
10451// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10452func (imepi InMageEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
10453	return nil, false
10454}
10455
10456// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10457func (imepi InMageEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
10458	return nil, false
10459}
10460
10461// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10462func (imepi InMageEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
10463	return &imepi, true
10464}
10465
10466// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10467func (imepi InMageEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
10468	return nil, false
10469}
10470
10471// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10472func (imepi InMageEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
10473	return nil, false
10474}
10475
10476// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10477func (imepi InMageEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
10478	return nil, false
10479}
10480
10481// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageEnableProtectionInput.
10482func (imepi InMageEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
10483	return &imepi, true
10484}
10485
10486// InMageFailoverProviderInput provider specific input for InMage failover.
10487type InMageFailoverProviderInput struct {
10488	// 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'
10489	RecoveryPointType RecoveryPointType `json:"recoveryPointType,omitempty"`
10490	// 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.
10491	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10492	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
10493	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
10494}
10495
10496// MarshalJSON is the custom marshaler for InMageFailoverProviderInput.
10497func (imfpi InMageFailoverProviderInput) MarshalJSON() ([]byte, error) {
10498	imfpi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage
10499	objectMap := make(map[string]interface{})
10500	if imfpi.RecoveryPointType != "" {
10501		objectMap["recoveryPointType"] = imfpi.RecoveryPointType
10502	}
10503	if imfpi.RecoveryPointID != nil {
10504		objectMap["recoveryPointId"] = imfpi.RecoveryPointID
10505	}
10506	if imfpi.InstanceType != "" {
10507		objectMap["instanceType"] = imfpi.InstanceType
10508	}
10509	return json.Marshal(objectMap)
10510}
10511
10512// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10513func (imfpi InMageFailoverProviderInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
10514	return nil, false
10515}
10516
10517// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10518func (imfpi InMageFailoverProviderInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
10519	return nil, false
10520}
10521
10522// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10523func (imfpi InMageFailoverProviderInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
10524	return nil, false
10525}
10526
10527// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10528func (imfpi InMageFailoverProviderInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
10529	return nil, false
10530}
10531
10532// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10533func (imfpi InMageFailoverProviderInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
10534	return &imfpi, true
10535}
10536
10537// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10538func (imfpi InMageFailoverProviderInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
10539	return nil, false
10540}
10541
10542// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for InMageFailoverProviderInput.
10543func (imfpi InMageFailoverProviderInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
10544	return &imfpi, true
10545}
10546
10547// InMagePolicyDetails inMage specific protection profile details.
10548type InMagePolicyDetails struct {
10549	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
10550	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
10551	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
10552	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
10553	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
10554	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
10555	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled.
10556	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
10557	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
10558	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
10559}
10560
10561// MarshalJSON is the custom marshaler for InMagePolicyDetails.
10562func (impd InMagePolicyDetails) MarshalJSON() ([]byte, error) {
10563	impd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage
10564	objectMap := make(map[string]interface{})
10565	if impd.RecoveryPointThresholdInMinutes != nil {
10566		objectMap["recoveryPointThresholdInMinutes"] = impd.RecoveryPointThresholdInMinutes
10567	}
10568	if impd.RecoveryPointHistory != nil {
10569		objectMap["recoveryPointHistory"] = impd.RecoveryPointHistory
10570	}
10571	if impd.AppConsistentFrequencyInMinutes != nil {
10572		objectMap["appConsistentFrequencyInMinutes"] = impd.AppConsistentFrequencyInMinutes
10573	}
10574	if impd.MultiVMSyncStatus != nil {
10575		objectMap["multiVmSyncStatus"] = impd.MultiVMSyncStatus
10576	}
10577	if impd.InstanceType != "" {
10578		objectMap["instanceType"] = impd.InstanceType
10579	}
10580	return json.Marshal(objectMap)
10581}
10582
10583// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10584func (impd InMagePolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
10585	return nil, false
10586}
10587
10588// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10589func (impd InMagePolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
10590	return nil, false
10591}
10592
10593// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10594func (impd InMagePolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
10595	return nil, false
10596}
10597
10598// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10599func (impd InMagePolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
10600	return nil, false
10601}
10602
10603// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10604func (impd InMagePolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
10605	return nil, false
10606}
10607
10608// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10609func (impd InMagePolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
10610	return nil, false
10611}
10612
10613// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10614func (impd InMagePolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
10615	return nil, false
10616}
10617
10618// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10619func (impd InMagePolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
10620	return &impd, true
10621}
10622
10623// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10624func (impd InMagePolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
10625	return nil, false
10626}
10627
10628// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10629func (impd InMagePolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
10630	return nil, false
10631}
10632
10633// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10634func (impd InMagePolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
10635	return nil, false
10636}
10637
10638// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10639func (impd InMagePolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
10640	return nil, false
10641}
10642
10643// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMagePolicyDetails.
10644func (impd InMagePolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
10645	return &impd, true
10646}
10647
10648// InMagePolicyInput vMWare Azure specific protection profile Input.
10649type InMagePolicyInput struct {
10650	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
10651	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
10652	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
10653	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
10654	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
10655	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
10656	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
10657	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
10658	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
10659	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
10660}
10661
10662// MarshalJSON is the custom marshaler for InMagePolicyInput.
10663func (impi InMagePolicyInput) MarshalJSON() ([]byte, error) {
10664	impi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage
10665	objectMap := make(map[string]interface{})
10666	if impi.RecoveryPointThresholdInMinutes != nil {
10667		objectMap["recoveryPointThresholdInMinutes"] = impi.RecoveryPointThresholdInMinutes
10668	}
10669	if impi.RecoveryPointHistory != nil {
10670		objectMap["recoveryPointHistory"] = impi.RecoveryPointHistory
10671	}
10672	if impi.AppConsistentFrequencyInMinutes != nil {
10673		objectMap["appConsistentFrequencyInMinutes"] = impi.AppConsistentFrequencyInMinutes
10674	}
10675	if impi.MultiVMSyncStatus != "" {
10676		objectMap["multiVmSyncStatus"] = impi.MultiVMSyncStatus
10677	}
10678	if impi.InstanceType != "" {
10679		objectMap["instanceType"] = impi.InstanceType
10680	}
10681	return json.Marshal(objectMap)
10682}
10683
10684// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10685func (impi InMagePolicyInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
10686	return nil, false
10687}
10688
10689// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10690func (impi InMagePolicyInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
10691	return nil, false
10692}
10693
10694// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10695func (impi InMagePolicyInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
10696	return nil, false
10697}
10698
10699// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10700func (impi InMagePolicyInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
10701	return nil, false
10702}
10703
10704// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10705func (impi InMagePolicyInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
10706	return nil, false
10707}
10708
10709// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10710func (impi InMagePolicyInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
10711	return &impi, true
10712}
10713
10714// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10715func (impi InMagePolicyInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
10716	return nil, false
10717}
10718
10719// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10720func (impi InMagePolicyInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
10721	return nil, false
10722}
10723
10724// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10725func (impi InMagePolicyInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
10726	return nil, false
10727}
10728
10729// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMagePolicyInput.
10730func (impi InMagePolicyInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
10731	return &impi, true
10732}
10733
10734// InMageProtectedDiskDetails inMage protected disk details.
10735type InMageProtectedDiskDetails struct {
10736	// DiskID - The disk id.
10737	DiskID *string `json:"diskId,omitempty"`
10738	// DiskName - The disk name.
10739	DiskName *string `json:"diskName,omitempty"`
10740	// ProtectionStage - The protection stage.
10741	ProtectionStage *string `json:"protectionStage,omitempty"`
10742	// HealthErrorCode - The health error code for the disk.
10743	HealthErrorCode *string `json:"healthErrorCode,omitempty"`
10744	// RpoInSeconds - The RPO in seconds.
10745	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
10746	// ResyncRequired - A value indicating whether resync is required for this disk.
10747	ResyncRequired *string `json:"resyncRequired,omitempty"`
10748	// ResyncProgressPercentage - The resync progress percentage.
10749	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
10750	// ResyncDurationInSeconds - The resync duration in seconds.
10751	ResyncDurationInSeconds *int64 `json:"resyncDurationInSeconds,omitempty"`
10752	// DiskCapacityInBytes - The disk capacity in bytes.
10753	DiskCapacityInBytes *int64 `json:"diskCapacityInBytes,omitempty"`
10754	// FileSystemCapacityInBytes - The file system capacity in bytes.
10755	FileSystemCapacityInBytes *int64 `json:"fileSystemCapacityInBytes,omitempty"`
10756	// SourceDataInMB - The source data transit in MB.
10757	SourceDataInMB *float64 `json:"sourceDataInMB,omitempty"`
10758	// PsDataInMB - The PS data transit in MB.
10759	PsDataInMB *float64 `json:"psDataInMB,omitempty"`
10760	// TargetDataInMB - The target data transit in MB.
10761	TargetDataInMB *float64 `json:"targetDataInMB,omitempty"`
10762	// DiskResized - A value indicating whether disk is resized.
10763	DiskResized *string `json:"diskResized,omitempty"`
10764	// LastRpoCalculatedTime - The last RPO calculated time.
10765	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
10766}
10767
10768// InMageRcmAgentUpgradeBlockingErrorDetails inMageRcm source agent upgrade blocking error details.
10769type InMageRcmAgentUpgradeBlockingErrorDetails struct {
10770	// ErrorCode - READ-ONLY; The error code.
10771	ErrorCode *string `json:"errorCode,omitempty"`
10772	// ErrorMessage - READ-ONLY; The error message.
10773	ErrorMessage *string `json:"errorMessage,omitempty"`
10774	// PossibleCauses - READ-ONLY; The possible causes.
10775	PossibleCauses *string `json:"possibleCauses,omitempty"`
10776	// RecommendedAction - READ-ONLY; The recommended action.
10777	RecommendedAction *string `json:"recommendedAction,omitempty"`
10778	// ErrorMessageParameters - READ-ONLY; The error message parameters.
10779	ErrorMessageParameters map[string]*string `json:"errorMessageParameters"`
10780	// ErrorTags - READ-ONLY; The error tags.
10781	ErrorTags map[string]*string `json:"errorTags"`
10782}
10783
10784// MarshalJSON is the custom marshaler for InMageRcmAgentUpgradeBlockingErrorDetails.
10785func (imraubed InMageRcmAgentUpgradeBlockingErrorDetails) MarshalJSON() ([]byte, error) {
10786	objectMap := make(map[string]interface{})
10787	return json.Marshal(objectMap)
10788}
10789
10790// InMageRcmApplyRecoveryPointInput applyRecoveryPoint input specific to InMageRcm provider.
10791type InMageRcmApplyRecoveryPointInput struct {
10792	// RecoveryPointID - The recovery point Id.
10793	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
10794	// InstanceType - Possible values include: 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeApplyRecoveryPointProviderSpecificInput', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm'
10795	InstanceType InstanceTypeBasicApplyRecoveryPointProviderSpecificInput `json:"instanceType,omitempty"`
10796}
10797
10798// MarshalJSON is the custom marshaler for InMageRcmApplyRecoveryPointInput.
10799func (imrarpi InMageRcmApplyRecoveryPointInput) MarshalJSON() ([]byte, error) {
10800	imrarpi.InstanceType = InstanceTypeBasicApplyRecoveryPointProviderSpecificInputInstanceTypeInMageRcm
10801	objectMap := make(map[string]interface{})
10802	if imrarpi.RecoveryPointID != nil {
10803		objectMap["recoveryPointId"] = imrarpi.RecoveryPointID
10804	}
10805	if imrarpi.InstanceType != "" {
10806		objectMap["instanceType"] = imrarpi.InstanceType
10807	}
10808	return json.Marshal(objectMap)
10809}
10810
10811// AsA2AApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10812func (imrarpi InMageRcmApplyRecoveryPointInput) AsA2AApplyRecoveryPointInput() (*A2AApplyRecoveryPointInput, bool) {
10813	return nil, false
10814}
10815
10816// AsHyperVReplicaAzureApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10817func (imrarpi InMageRcmApplyRecoveryPointInput) AsHyperVReplicaAzureApplyRecoveryPointInput() (*HyperVReplicaAzureApplyRecoveryPointInput, bool) {
10818	return nil, false
10819}
10820
10821// AsInMageAzureV2ApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10822func (imrarpi InMageRcmApplyRecoveryPointInput) AsInMageAzureV2ApplyRecoveryPointInput() (*InMageAzureV2ApplyRecoveryPointInput, bool) {
10823	return nil, false
10824}
10825
10826// AsInMageRcmApplyRecoveryPointInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10827func (imrarpi InMageRcmApplyRecoveryPointInput) AsInMageRcmApplyRecoveryPointInput() (*InMageRcmApplyRecoveryPointInput, bool) {
10828	return &imrarpi, true
10829}
10830
10831// AsApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10832func (imrarpi InMageRcmApplyRecoveryPointInput) AsApplyRecoveryPointProviderSpecificInput() (*ApplyRecoveryPointProviderSpecificInput, bool) {
10833	return nil, false
10834}
10835
10836// AsBasicApplyRecoveryPointProviderSpecificInput is the BasicApplyRecoveryPointProviderSpecificInput implementation for InMageRcmApplyRecoveryPointInput.
10837func (imrarpi InMageRcmApplyRecoveryPointInput) AsBasicApplyRecoveryPointProviderSpecificInput() (BasicApplyRecoveryPointProviderSpecificInput, bool) {
10838	return &imrarpi, true
10839}
10840
10841// InMageRcmDiskInput inMageRcm disk input.
10842type InMageRcmDiskInput struct {
10843	// DiskID - The disk Id.
10844	DiskID *string `json:"diskId,omitempty"`
10845	// LogStorageAccountID - The log storage account ARM Id.
10846	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
10847	// DiskType - The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
10848	DiskType DiskAccountType `json:"diskType,omitempty"`
10849	// DiskEncryptionSetID - The disk encryption set ARM Id.
10850	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
10851}
10852
10853// InMageRcmDisksDefaultInput inMageRcm disk input.
10854type InMageRcmDisksDefaultInput struct {
10855	// LogStorageAccountID - The log storage account ARM Id.
10856	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
10857	// DiskType - The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
10858	DiskType DiskAccountType `json:"diskType,omitempty"`
10859	// DiskEncryptionSetID - The disk encryption set ARM Id.
10860	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
10861}
10862
10863// InMageRcmEnableProtectionInput inMageRcm specific enable protection input.
10864type InMageRcmEnableProtectionInput struct {
10865	// FabricDiscoveryMachineID - The ARM Id of discovered machine.
10866	FabricDiscoveryMachineID *string `json:"fabricDiscoveryMachineId,omitempty"`
10867	// DisksToInclude - The disks to include list.
10868	DisksToInclude *[]InMageRcmDiskInput `json:"disksToInclude,omitempty"`
10869	// DisksDefault - The default disk input.
10870	DisksDefault *InMageRcmDisksDefaultInput `json:"disksDefault,omitempty"`
10871	// TargetResourceGroupID - The target resource group ARM Id.
10872	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
10873	// TargetNetworkID - The selected target network ARM Id.
10874	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
10875	// TestNetworkID - The selected test network ARM Id.
10876	TestNetworkID *string `json:"testNetworkId,omitempty"`
10877	// TargetSubnetName - The selected target subnet name.
10878	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
10879	// TestSubnetName - The selected test subnet name.
10880	TestSubnetName *string `json:"testSubnetName,omitempty"`
10881	// TargetVMName - The target VM name.
10882	TargetVMName *string `json:"targetVmName,omitempty"`
10883	// TargetVMSize - The target VM size.
10884	TargetVMSize *string `json:"targetVmSize,omitempty"`
10885	// LicenseType - The license type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
10886	LicenseType LicenseType `json:"licenseType,omitempty"`
10887	// TargetAvailabilitySetID - The target availability set ARM Id.
10888	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
10889	// TargetAvailabilityZone - The target availability zone.
10890	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
10891	// TargetProximityPlacementGroupID - The target proximity placement group Id.
10892	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
10893	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
10894	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
10895	// RunAsAccountID - The run-as account Id.
10896	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
10897	// ProcessServerID - The process server Id.
10898	ProcessServerID *string `json:"processServerId,omitempty"`
10899	// MultiVMGroupName - The multi VM group name.
10900	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
10901	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
10902	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
10903}
10904
10905// MarshalJSON is the custom marshaler for InMageRcmEnableProtectionInput.
10906func (imrepi InMageRcmEnableProtectionInput) MarshalJSON() ([]byte, error) {
10907	imrepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm
10908	objectMap := make(map[string]interface{})
10909	if imrepi.FabricDiscoveryMachineID != nil {
10910		objectMap["fabricDiscoveryMachineId"] = imrepi.FabricDiscoveryMachineID
10911	}
10912	if imrepi.DisksToInclude != nil {
10913		objectMap["disksToInclude"] = imrepi.DisksToInclude
10914	}
10915	if imrepi.DisksDefault != nil {
10916		objectMap["disksDefault"] = imrepi.DisksDefault
10917	}
10918	if imrepi.TargetResourceGroupID != nil {
10919		objectMap["targetResourceGroupId"] = imrepi.TargetResourceGroupID
10920	}
10921	if imrepi.TargetNetworkID != nil {
10922		objectMap["targetNetworkId"] = imrepi.TargetNetworkID
10923	}
10924	if imrepi.TestNetworkID != nil {
10925		objectMap["testNetworkId"] = imrepi.TestNetworkID
10926	}
10927	if imrepi.TargetSubnetName != nil {
10928		objectMap["targetSubnetName"] = imrepi.TargetSubnetName
10929	}
10930	if imrepi.TestSubnetName != nil {
10931		objectMap["testSubnetName"] = imrepi.TestSubnetName
10932	}
10933	if imrepi.TargetVMName != nil {
10934		objectMap["targetVmName"] = imrepi.TargetVMName
10935	}
10936	if imrepi.TargetVMSize != nil {
10937		objectMap["targetVmSize"] = imrepi.TargetVMSize
10938	}
10939	if imrepi.LicenseType != "" {
10940		objectMap["licenseType"] = imrepi.LicenseType
10941	}
10942	if imrepi.TargetAvailabilitySetID != nil {
10943		objectMap["targetAvailabilitySetId"] = imrepi.TargetAvailabilitySetID
10944	}
10945	if imrepi.TargetAvailabilityZone != nil {
10946		objectMap["targetAvailabilityZone"] = imrepi.TargetAvailabilityZone
10947	}
10948	if imrepi.TargetProximityPlacementGroupID != nil {
10949		objectMap["targetProximityPlacementGroupId"] = imrepi.TargetProximityPlacementGroupID
10950	}
10951	if imrepi.TargetBootDiagnosticsStorageAccountID != nil {
10952		objectMap["targetBootDiagnosticsStorageAccountId"] = imrepi.TargetBootDiagnosticsStorageAccountID
10953	}
10954	if imrepi.RunAsAccountID != nil {
10955		objectMap["runAsAccountId"] = imrepi.RunAsAccountID
10956	}
10957	if imrepi.ProcessServerID != nil {
10958		objectMap["processServerId"] = imrepi.ProcessServerID
10959	}
10960	if imrepi.MultiVMGroupName != nil {
10961		objectMap["multiVmGroupName"] = imrepi.MultiVMGroupName
10962	}
10963	if imrepi.InstanceType != "" {
10964		objectMap["instanceType"] = imrepi.InstanceType
10965	}
10966	return json.Marshal(objectMap)
10967}
10968
10969// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10970func (imrepi InMageRcmEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
10971	return nil, false
10972}
10973
10974// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10975func (imrepi InMageRcmEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
10976	return nil, false
10977}
10978
10979// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10980func (imrepi InMageRcmEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
10981	return nil, false
10982}
10983
10984// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10985func (imrepi InMageRcmEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
10986	return nil, false
10987}
10988
10989// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10990func (imrepi InMageRcmEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
10991	return &imrepi, true
10992}
10993
10994// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
10995func (imrepi InMageRcmEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
10996	return nil, false
10997}
10998
10999// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
11000func (imrepi InMageRcmEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
11001	return nil, false
11002}
11003
11004// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for InMageRcmEnableProtectionInput.
11005func (imrepi InMageRcmEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
11006	return &imrepi, true
11007}
11008
11009// InMageRcmEventDetails event details for InMageRcm provider.
11010type InMageRcmEventDetails struct {
11011	// ProtectedItemName - READ-ONLY; The protected item name.
11012	ProtectedItemName *string `json:"protectedItemName,omitempty"`
11013	// InstanceType - Possible values include: 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeEventProviderSpecificDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeHyperVReplicaBaseEventDetails', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm'
11014	InstanceType InstanceTypeBasicEventProviderSpecificDetails `json:"instanceType,omitempty"`
11015}
11016
11017// MarshalJSON is the custom marshaler for InMageRcmEventDetails.
11018func (imred InMageRcmEventDetails) MarshalJSON() ([]byte, error) {
11019	imred.InstanceType = InstanceTypeBasicEventProviderSpecificDetailsInstanceTypeInMageRcm
11020	objectMap := make(map[string]interface{})
11021	if imred.InstanceType != "" {
11022		objectMap["instanceType"] = imred.InstanceType
11023	}
11024	return json.Marshal(objectMap)
11025}
11026
11027// AsA2AEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11028func (imred InMageRcmEventDetails) AsA2AEventDetails() (*A2AEventDetails, bool) {
11029	return nil, false
11030}
11031
11032// AsHyperVReplica2012EventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11033func (imred InMageRcmEventDetails) AsHyperVReplica2012EventDetails() (*HyperVReplica2012EventDetails, bool) {
11034	return nil, false
11035}
11036
11037// AsHyperVReplica2012R2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11038func (imred InMageRcmEventDetails) AsHyperVReplica2012R2EventDetails() (*HyperVReplica2012R2EventDetails, bool) {
11039	return nil, false
11040}
11041
11042// AsHyperVReplicaAzureEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11043func (imred InMageRcmEventDetails) AsHyperVReplicaAzureEventDetails() (*HyperVReplicaAzureEventDetails, bool) {
11044	return nil, false
11045}
11046
11047// AsHyperVReplicaBaseEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11048func (imred InMageRcmEventDetails) AsHyperVReplicaBaseEventDetails() (*HyperVReplicaBaseEventDetails, bool) {
11049	return nil, false
11050}
11051
11052// AsInMageAzureV2EventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11053func (imred InMageRcmEventDetails) AsInMageAzureV2EventDetails() (*InMageAzureV2EventDetails, bool) {
11054	return nil, false
11055}
11056
11057// AsInMageRcmEventDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11058func (imred InMageRcmEventDetails) AsInMageRcmEventDetails() (*InMageRcmEventDetails, bool) {
11059	return &imred, true
11060}
11061
11062// AsEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11063func (imred InMageRcmEventDetails) AsEventProviderSpecificDetails() (*EventProviderSpecificDetails, bool) {
11064	return nil, false
11065}
11066
11067// AsBasicEventProviderSpecificDetails is the BasicEventProviderSpecificDetails implementation for InMageRcmEventDetails.
11068func (imred InMageRcmEventDetails) AsBasicEventProviderSpecificDetails() (BasicEventProviderSpecificDetails, bool) {
11069	return &imred, true
11070}
11071
11072// InMageRcmFabricCreationInput inMageRcm fabric provider specific settings.
11073type InMageRcmFabricCreationInput struct {
11074	// VmwareSiteID - The ARM Id of the VMware site.
11075	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
11076	// PhysicalSiteID - The ARM Id of the physical site.
11077	PhysicalSiteID *string `json:"physicalSiteId,omitempty"`
11078	// SourceAgentIdentity - The identity provider input for source agent authentication.
11079	SourceAgentIdentity *IdentityProviderInput `json:"sourceAgentIdentity,omitempty"`
11080	// AuthCertificate - The certificate to be used for AAD authentication.
11081	AuthCertificate *string `json:"authCertificate,omitempty"`
11082	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
11083	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
11084}
11085
11086// MarshalJSON is the custom marshaler for InMageRcmFabricCreationInput.
11087func (imrfci InMageRcmFabricCreationInput) MarshalJSON() ([]byte, error) {
11088	imrfci.InstanceType = InstanceTypeInMageRcm
11089	objectMap := make(map[string]interface{})
11090	if imrfci.VmwareSiteID != nil {
11091		objectMap["vmwareSiteId"] = imrfci.VmwareSiteID
11092	}
11093	if imrfci.PhysicalSiteID != nil {
11094		objectMap["physicalSiteId"] = imrfci.PhysicalSiteID
11095	}
11096	if imrfci.SourceAgentIdentity != nil {
11097		objectMap["sourceAgentIdentity"] = imrfci.SourceAgentIdentity
11098	}
11099	if imrfci.AuthCertificate != nil {
11100		objectMap["authCertificate"] = imrfci.AuthCertificate
11101	}
11102	if imrfci.InstanceType != "" {
11103		objectMap["instanceType"] = imrfci.InstanceType
11104	}
11105	return json.Marshal(objectMap)
11106}
11107
11108// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11109func (imrfci InMageRcmFabricCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
11110	return nil, false
11111}
11112
11113// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11114func (imrfci InMageRcmFabricCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
11115	return &imrfci, true
11116}
11117
11118// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11119func (imrfci InMageRcmFabricCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
11120	return nil, false
11121}
11122
11123// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11124func (imrfci InMageRcmFabricCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
11125	return nil, false
11126}
11127
11128// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for InMageRcmFabricCreationInput.
11129func (imrfci InMageRcmFabricCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
11130	return &imrfci, true
11131}
11132
11133// InMageRcmFabricSpecificDetails inMageRcm fabric specific details.
11134type InMageRcmFabricSpecificDetails struct {
11135	// VmwareSiteID - READ-ONLY; The ARM Id of the VMware site.
11136	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
11137	// PhysicalSiteID - READ-ONLY; The ARM Id of the physical site.
11138	PhysicalSiteID *string `json:"physicalSiteId,omitempty"`
11139	// ServiceEndpoint - READ-ONLY; The service endpoint.
11140	ServiceEndpoint *string `json:"serviceEndpoint,omitempty"`
11141	// ServiceResourceID - READ-ONLY; The service resource Id.
11142	ServiceResourceID *string `json:"serviceResourceId,omitempty"`
11143	// ServiceContainerID - READ-ONLY; The service container Id.
11144	ServiceContainerID *string `json:"serviceContainerId,omitempty"`
11145	// DataPlaneURI - READ-ONLY; The data plane Uri.
11146	DataPlaneURI *string `json:"dataPlaneUri,omitempty"`
11147	// ControlPlaneURI - READ-ONLY; The control plane Uri.
11148	ControlPlaneURI *string `json:"controlPlaneUri,omitempty"`
11149	// ProcessServers - READ-ONLY; The list of process servers.
11150	ProcessServers *[]ProcessServerDetails `json:"processServers,omitempty"`
11151	// RcmProxies - READ-ONLY; The list of RCM proxies.
11152	RcmProxies *[]RcmProxyDetails `json:"rcmProxies,omitempty"`
11153	// PushInstallers - READ-ONLY; The list of push installers.
11154	PushInstallers *[]PushInstallerDetails `json:"pushInstallers,omitempty"`
11155	// ReplicationAgents - READ-ONLY; The list of replication agents.
11156	ReplicationAgents *[]ReplicationAgentDetails `json:"replicationAgents,omitempty"`
11157	// ReprotectAgents - READ-ONLY; The list of reprotect agents.
11158	ReprotectAgents *[]ReprotectAgentDetails `json:"reprotectAgents,omitempty"`
11159	// Dras - READ-ONLY; The list of DRAs.
11160	Dras *[]DraDetails `json:"dras,omitempty"`
11161	// AgentDetails - READ-ONLY; The list of agent details.
11162	AgentDetails *[]AgentDetails `json:"agentDetails,omitempty"`
11163	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
11164	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
11165}
11166
11167// MarshalJSON is the custom marshaler for InMageRcmFabricSpecificDetails.
11168func (imrfsd InMageRcmFabricSpecificDetails) MarshalJSON() ([]byte, error) {
11169	imrfsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm
11170	objectMap := make(map[string]interface{})
11171	if imrfsd.InstanceType != "" {
11172		objectMap["instanceType"] = imrfsd.InstanceType
11173	}
11174	return json.Marshal(objectMap)
11175}
11176
11177// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11178func (imrfsd InMageRcmFabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
11179	return nil, false
11180}
11181
11182// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11183func (imrfsd InMageRcmFabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
11184	return nil, false
11185}
11186
11187// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11188func (imrfsd InMageRcmFabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
11189	return &imrfsd, true
11190}
11191
11192// AsVmmDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11193func (imrfsd InMageRcmFabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
11194	return nil, false
11195}
11196
11197// AsVMwareDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11198func (imrfsd InMageRcmFabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
11199	return nil, false
11200}
11201
11202// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11203func (imrfsd InMageRcmFabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
11204	return nil, false
11205}
11206
11207// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11208func (imrfsd InMageRcmFabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
11209	return nil, false
11210}
11211
11212// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for InMageRcmFabricSpecificDetails.
11213func (imrfsd InMageRcmFabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
11214	return &imrfsd, true
11215}
11216
11217// InMageRcmLastAgentUpgradeErrorDetails inMageRcm last source agent upgrade error details.
11218type InMageRcmLastAgentUpgradeErrorDetails struct {
11219	// ErrorCode - READ-ONLY; The error code.
11220	ErrorCode *string `json:"errorCode,omitempty"`
11221	// ErrorMessage - READ-ONLY; The error message.
11222	ErrorMessage *string `json:"errorMessage,omitempty"`
11223	// PossibleCauses - READ-ONLY; The possible causes.
11224	PossibleCauses *string `json:"possibleCauses,omitempty"`
11225	// RecommendedAction - READ-ONLY; The recommended action.
11226	RecommendedAction *string `json:"recommendedAction,omitempty"`
11227	// ErrorMessageParameters - READ-ONLY; The error message parameters.
11228	ErrorMessageParameters map[string]*string `json:"errorMessageParameters"`
11229	// ErrorTags - READ-ONLY; The error tags.
11230	ErrorTags map[string]*string `json:"errorTags"`
11231}
11232
11233// MarshalJSON is the custom marshaler for InMageRcmLastAgentUpgradeErrorDetails.
11234func (imrlaued InMageRcmLastAgentUpgradeErrorDetails) MarshalJSON() ([]byte, error) {
11235	objectMap := make(map[string]interface{})
11236	return json.Marshal(objectMap)
11237}
11238
11239// InMageRcmMobilityAgentDetails inMageRcm mobility agent details.
11240type InMageRcmMobilityAgentDetails struct {
11241	// Version - READ-ONLY; The agent version.
11242	Version *string `json:"version,omitempty"`
11243	// LatestVersion - READ-ONLY; The latest agent version available.
11244	LatestVersion *string `json:"latestVersion,omitempty"`
11245	// DriverVersion - READ-ONLY; The driver version.
11246	DriverVersion *string `json:"driverVersion,omitempty"`
11247	// LatestUpgradableVersionWithoutReboot - READ-ONLY; The latest upgradeable version available without reboot.
11248	LatestUpgradableVersionWithoutReboot *string `json:"latestUpgradableVersionWithoutReboot,omitempty"`
11249	// AgentVersionExpiryDate - READ-ONLY; The agent version expiry date.
11250	AgentVersionExpiryDate *date.Time `json:"agentVersionExpiryDate,omitempty"`
11251	// DriverVersionExpiryDate - READ-ONLY; The driver version expiry date.
11252	DriverVersionExpiryDate *date.Time `json:"driverVersionExpiryDate,omitempty"`
11253	// LastHeartbeatUtc - READ-ONLY; The time of the last heartbeat received from the agent.
11254	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
11255	// ReasonsBlockingUpgrade - READ-ONLY; The whether update is possible or not.
11256	ReasonsBlockingUpgrade *[]AgentUpgradeBlockedReason `json:"reasonsBlockingUpgrade,omitempty"`
11257	// IsUpgradeable - READ-ONLY; A value indicating whether agent is upgradeable or not.
11258	IsUpgradeable *string `json:"isUpgradeable,omitempty"`
11259}
11260
11261// InMageRcmNicDetails inMageRcm NIC details.
11262type InMageRcmNicDetails struct {
11263	// NicID - READ-ONLY; The NIC Id.
11264	NicID *string `json:"nicId,omitempty"`
11265	// IsPrimaryNic - READ-ONLY; A value indicating whether this is the primary NIC.
11266	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
11267	// IsSelectedForFailover - READ-ONLY; A value indicating whether this NIC is selected for failover.
11268	IsSelectedForFailover *string `json:"isSelectedForFailover,omitempty"`
11269	// SourceIPAddress - READ-ONLY; The source IP address.
11270	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
11271	// SourceIPAddressType - READ-ONLY; The source IP address type. Possible values include: 'Dynamic', 'Static'
11272	SourceIPAddressType EthernetAddressType `json:"sourceIPAddressType,omitempty"`
11273	// SourceNetworkID - READ-ONLY; Source network Id.
11274	SourceNetworkID *string `json:"sourceNetworkId,omitempty"`
11275	// SourceSubnetName - READ-ONLY; Source subnet name.
11276	SourceSubnetName *string `json:"sourceSubnetName,omitempty"`
11277	// TargetIPAddress - READ-ONLY; The target IP address.
11278	TargetIPAddress *string `json:"targetIPAddress,omitempty"`
11279	// TargetIPAddressType - READ-ONLY; The target IP address type. Possible values include: 'Dynamic', 'Static'
11280	TargetIPAddressType EthernetAddressType `json:"targetIPAddressType,omitempty"`
11281	// TargetSubnetName - READ-ONLY; Target subnet name.
11282	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
11283	// TestSubnetName - READ-ONLY; Test subnet name.
11284	TestSubnetName *string `json:"testSubnetName,omitempty"`
11285	// TestIPAddress - READ-ONLY; The test IP address.
11286	TestIPAddress *string `json:"testIPAddress,omitempty"`
11287	// TestIPAddressType - READ-ONLY; The test IP address type. Possible values include: 'Dynamic', 'Static'
11288	TestIPAddressType EthernetAddressType `json:"testIPAddressType,omitempty"`
11289}
11290
11291// InMageRcmNicInput inMageRcm NIC input.
11292type InMageRcmNicInput struct {
11293	// NicID - The NIC Id.
11294	NicID *string `json:"nicId,omitempty"`
11295	// IsPrimaryNic - A value indicating whether this is the primary NIC.
11296	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
11297	// IsSelectedForFailover - A value indicating whether this NIC is selected for failover.
11298	IsSelectedForFailover *string `json:"isSelectedForFailover,omitempty"`
11299	// TargetSubnetName - Target subnet name.
11300	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
11301	// TargetStaticIPAddress - The target static IP address.
11302	TargetStaticIPAddress *string `json:"targetStaticIPAddress,omitempty"`
11303	// TestSubnetName - The test subnet name.
11304	TestSubnetName *string `json:"testSubnetName,omitempty"`
11305	// TestStaticIPAddress - The test static IP address.
11306	TestStaticIPAddress *string `json:"testStaticIPAddress,omitempty"`
11307}
11308
11309// InMageRcmPolicyCreationInput inMageRcm policy creation input.
11310type InMageRcmPolicyCreationInput struct {
11311	// RecoveryPointHistoryInMinutes - The duration in minutes until which the recovery points need to be stored.
11312	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
11313	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
11314	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
11315	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
11316	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
11317	// EnableMultiVMSync - A value indicating whether multi-VM sync has to be enabled.
11318	EnableMultiVMSync *string `json:"enableMultiVmSync,omitempty"`
11319	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
11320	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
11321}
11322
11323// MarshalJSON is the custom marshaler for InMageRcmPolicyCreationInput.
11324func (imrpci InMageRcmPolicyCreationInput) MarshalJSON() ([]byte, error) {
11325	imrpci.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm
11326	objectMap := make(map[string]interface{})
11327	if imrpci.RecoveryPointHistoryInMinutes != nil {
11328		objectMap["recoveryPointHistoryInMinutes"] = imrpci.RecoveryPointHistoryInMinutes
11329	}
11330	if imrpci.CrashConsistentFrequencyInMinutes != nil {
11331		objectMap["crashConsistentFrequencyInMinutes"] = imrpci.CrashConsistentFrequencyInMinutes
11332	}
11333	if imrpci.AppConsistentFrequencyInMinutes != nil {
11334		objectMap["appConsistentFrequencyInMinutes"] = imrpci.AppConsistentFrequencyInMinutes
11335	}
11336	if imrpci.EnableMultiVMSync != nil {
11337		objectMap["enableMultiVmSync"] = imrpci.EnableMultiVMSync
11338	}
11339	if imrpci.InstanceType != "" {
11340		objectMap["instanceType"] = imrpci.InstanceType
11341	}
11342	return json.Marshal(objectMap)
11343}
11344
11345// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11346func (imrpci InMageRcmPolicyCreationInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
11347	return nil, false
11348}
11349
11350// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11351func (imrpci InMageRcmPolicyCreationInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
11352	return nil, false
11353}
11354
11355// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11356func (imrpci InMageRcmPolicyCreationInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
11357	return nil, false
11358}
11359
11360// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11361func (imrpci InMageRcmPolicyCreationInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
11362	return nil, false
11363}
11364
11365// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11366func (imrpci InMageRcmPolicyCreationInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
11367	return nil, false
11368}
11369
11370// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11371func (imrpci InMageRcmPolicyCreationInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
11372	return nil, false
11373}
11374
11375// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11376func (imrpci InMageRcmPolicyCreationInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
11377	return &imrpci, true
11378}
11379
11380// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11381func (imrpci InMageRcmPolicyCreationInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
11382	return nil, false
11383}
11384
11385// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11386func (imrpci InMageRcmPolicyCreationInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
11387	return nil, false
11388}
11389
11390// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for InMageRcmPolicyCreationInput.
11391func (imrpci InMageRcmPolicyCreationInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
11392	return &imrpci, true
11393}
11394
11395// InMageRcmPolicyDetails inMageRcm specific policy details.
11396type InMageRcmPolicyDetails struct {
11397	// RecoveryPointHistoryInMinutes - READ-ONLY; The duration in minutes until which the recovery points need to be stored.
11398	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
11399	// AppConsistentFrequencyInMinutes - READ-ONLY; The app consistent snapshot frequency in minutes.
11400	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
11401	// CrashConsistentFrequencyInMinutes - READ-ONLY; The crash consistent snapshot frequency in minutes.
11402	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
11403	// EnableMultiVMSync - READ-ONLY; A value indicating whether multi-VM sync has to be enabled.
11404	EnableMultiVMSync *string `json:"enableMultiVmSync,omitempty"`
11405	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
11406	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
11407}
11408
11409// MarshalJSON is the custom marshaler for InMageRcmPolicyDetails.
11410func (imrpd InMageRcmPolicyDetails) MarshalJSON() ([]byte, error) {
11411	imrpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm
11412	objectMap := make(map[string]interface{})
11413	if imrpd.InstanceType != "" {
11414		objectMap["instanceType"] = imrpd.InstanceType
11415	}
11416	return json.Marshal(objectMap)
11417}
11418
11419// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11420func (imrpd InMageRcmPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
11421	return nil, false
11422}
11423
11424// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11425func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
11426	return nil, false
11427}
11428
11429// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11430func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
11431	return nil, false
11432}
11433
11434// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11435func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
11436	return nil, false
11437}
11438
11439// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11440func (imrpd InMageRcmPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
11441	return nil, false
11442}
11443
11444// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11445func (imrpd InMageRcmPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
11446	return nil, false
11447}
11448
11449// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11450func (imrpd InMageRcmPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
11451	return nil, false
11452}
11453
11454// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11455func (imrpd InMageRcmPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
11456	return nil, false
11457}
11458
11459// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11460func (imrpd InMageRcmPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
11461	return &imrpd, true
11462}
11463
11464// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11465func (imrpd InMageRcmPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
11466	return nil, false
11467}
11468
11469// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11470func (imrpd InMageRcmPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
11471	return nil, false
11472}
11473
11474// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11475func (imrpd InMageRcmPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
11476	return nil, false
11477}
11478
11479// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for InMageRcmPolicyDetails.
11480func (imrpd InMageRcmPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
11481	return &imrpd, true
11482}
11483
11484// InMageRcmProtectedDiskDetails inMageRcm protected disk details.
11485type InMageRcmProtectedDiskDetails struct {
11486	// DiskID - READ-ONLY; The disk Id.
11487	DiskID *string `json:"diskId,omitempty"`
11488	// DiskName - READ-ONLY; The disk name.
11489	DiskName *string `json:"diskName,omitempty"`
11490	// IsOSDisk - READ-ONLY; A value indicating whether the disk is the OS disk.
11491	IsOSDisk *string `json:"isOSDisk,omitempty"`
11492	// CapacityInBytes - READ-ONLY; The disk capacity in bytes.
11493	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
11494	// LogStorageAccountID - READ-ONLY; The log storage account ARM Id.
11495	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
11496	// DiskEncryptionSetID - READ-ONLY; The disk encryption set ARM Id.
11497	DiskEncryptionSetID *string `json:"diskEncryptionSetId,omitempty"`
11498	// SeedManagedDiskID - READ-ONLY; The ARM Id of the seed managed disk.
11499	SeedManagedDiskID *string `json:"seedManagedDiskId,omitempty"`
11500	// TargetManagedDiskID - READ-ONLY; The ARM Id of the target managed disk.
11501	TargetManagedDiskID *string `json:"targetManagedDiskId,omitempty"`
11502	// DiskType - READ-ONLY; The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
11503	DiskType DiskAccountType `json:"diskType,omitempty"`
11504}
11505
11506// InMageRcmRecoveryPointDetails inMageRcm provider specific recovery point details.
11507type InMageRcmRecoveryPointDetails struct {
11508	// IsMultiVMSyncPoint - READ-ONLY; A value indicating whether the recovery point is multi VM consistent.
11509	IsMultiVMSyncPoint *string `json:"isMultiVmSyncPoint,omitempty"`
11510	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
11511	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
11512}
11513
11514// MarshalJSON is the custom marshaler for InMageRcmRecoveryPointDetails.
11515func (imrrpd InMageRcmRecoveryPointDetails) MarshalJSON() ([]byte, error) {
11516	imrrpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm
11517	objectMap := make(map[string]interface{})
11518	if imrrpd.InstanceType != "" {
11519		objectMap["instanceType"] = imrrpd.InstanceType
11520	}
11521	return json.Marshal(objectMap)
11522}
11523
11524// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11525func (imrrpd InMageRcmRecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
11526	return nil, false
11527}
11528
11529// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11530func (imrrpd InMageRcmRecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
11531	return nil, false
11532}
11533
11534// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11535func (imrrpd InMageRcmRecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
11536	return &imrrpd, true
11537}
11538
11539// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11540func (imrrpd InMageRcmRecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
11541	return nil, false
11542}
11543
11544// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for InMageRcmRecoveryPointDetails.
11545func (imrrpd InMageRcmRecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
11546	return &imrrpd, true
11547}
11548
11549// InMageRcmReplicationDetails inMageRcm provider specific details.
11550type InMageRcmReplicationDetails struct {
11551	// InternalIdentifier - READ-ONLY; The virtual machine internal identifier.
11552	InternalIdentifier *string `json:"internalIdentifier,omitempty"`
11553	// FabricDiscoveryMachineID - READ-ONLY; The ARM Id of the discovered VM.
11554	FabricDiscoveryMachineID *string `json:"fabricDiscoveryMachineId,omitempty"`
11555	// MultiVMGroupName - READ-ONLY; The multi VM group name.
11556	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
11557	// DiscoveryType - READ-ONLY; The type of the discovered VM.
11558	DiscoveryType *string `json:"discoveryType,omitempty"`
11559	// ProcessServerID - READ-ONLY; The process server Id.
11560	ProcessServerID *string `json:"processServerId,omitempty"`
11561	// ProcessorCoreCount - READ-ONLY; The processor core count.
11562	ProcessorCoreCount *int32 `json:"processorCoreCount,omitempty"`
11563	// AllocatedMemoryInMB - READ-ONLY; The allocated memory in MB.
11564	AllocatedMemoryInMB *float64 `json:"allocatedMemoryInMB,omitempty"`
11565	// ProcessServerName - READ-ONLY; The process server name.
11566	ProcessServerName *string `json:"processServerName,omitempty"`
11567	// RunAsAccountID - READ-ONLY; The run-as account Id.
11568	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
11569	// OsType - READ-ONLY; The type of the OS on the VM.
11570	OsType *string `json:"osType,omitempty"`
11571	// FirmwareType - READ-ONLY; The firmware type.
11572	FirmwareType *string `json:"firmwareType,omitempty"`
11573	// TargetGeneration - READ-ONLY; The target generation.
11574	TargetGeneration *string `json:"targetGeneration,omitempty"`
11575	// LicenseType - READ-ONLY; License Type of the VM to be used.
11576	LicenseType *string `json:"licenseType,omitempty"`
11577	// TargetVMName - READ-ONLY; Target VM name.
11578	TargetVMName *string `json:"targetVmName,omitempty"`
11579	// TargetVMSize - READ-ONLY; The target VM size.
11580	TargetVMSize *string `json:"targetVmSize,omitempty"`
11581	// TargetResourceGroupID - READ-ONLY; The target resource group Id.
11582	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
11583	// TargetAvailabilitySetID - READ-ONLY; The target availability set Id.
11584	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
11585	// TargetAvailabilityZone - READ-ONLY; The target availability zone.
11586	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
11587	// TargetProximityPlacementGroupID - READ-ONLY; The target proximity placement group Id.
11588	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
11589	// TargetBootDiagnosticsStorageAccountID - READ-ONLY; The target boot diagnostics storage account ARM Id.
11590	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
11591	// TargetNetworkID - READ-ONLY; The target network Id.
11592	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
11593	// TestNetworkID - READ-ONLY; The test network Id.
11594	TestNetworkID *string `json:"testNetworkId,omitempty"`
11595	// FailoverRecoveryPointID - READ-ONLY; The recovery point Id to which the VM was failed over.
11596	FailoverRecoveryPointID *string `json:"failoverRecoveryPointId,omitempty"`
11597	// LastRecoveryPointReceived - READ-ONLY; The last recovery point received time.
11598	LastRecoveryPointReceived *date.Time `json:"lastRecoveryPointReceived,omitempty"`
11599	// LastRpoInSeconds - READ-ONLY; The last recovery point objective value.
11600	LastRpoInSeconds *int64 `json:"lastRpoInSeconds,omitempty"`
11601	// LastRpoCalculatedTime - READ-ONLY; The last recovery point objective calculated time.
11602	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
11603	// LastRecoveryPointID - READ-ONLY; The last recovery point Id.
11604	LastRecoveryPointID *string `json:"lastRecoveryPointId,omitempty"`
11605	// InitialReplicationProgressPercentage - READ-ONLY; The initial replication progress percentage. This is calculated based on total bytes processed for all disks in the source VM.
11606	InitialReplicationProgressPercentage *int32 `json:"initialReplicationProgressPercentage,omitempty"`
11607	// 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.
11608	InitialReplicationProcessedBytes *int64 `json:"initialReplicationProcessedBytes,omitempty"`
11609	// InitialReplicationTransferredBytes - READ-ONLY; The initial replication transferred bytes from source VM to azure for all selected disks on source VM.
11610	InitialReplicationTransferredBytes *int64 `json:"initialReplicationTransferredBytes,omitempty"`
11611	// ResyncProgressPercentage - READ-ONLY; The resync progress percentage. This is calculated based on total bytes processed for all disks in the source VM.
11612	ResyncProgressPercentage *int32 `json:"resyncProgressPercentage,omitempty"`
11613	// ResyncProcessedBytes - READ-ONLY; The resync processed bytes. This includes sum of total bytes transferred and matched bytes on all selected disks in source VM.
11614	ResyncProcessedBytes *int64 `json:"resyncProcessedBytes,omitempty"`
11615	// ResyncTransferredBytes - READ-ONLY; The resync transferred bytes from source VM to azure for all selected disks on source VM.
11616	ResyncTransferredBytes *int64 `json:"resyncTransferredBytes,omitempty"`
11617	// ResyncRequired - READ-ONLY; A value indicating whether resync is required.
11618	ResyncRequired *string `json:"resyncRequired,omitempty"`
11619	// ResyncState - READ-ONLY; The resync state. Possible values include: 'ResyncStateNone', 'ResyncStatePreparedForResynchronization', 'ResyncStateStartedResynchronization'
11620	ResyncState ResyncState `json:"resyncState,omitempty"`
11621	// AgentUpgradeState - READ-ONLY; The agent auto upgrade state. Possible values include: 'MobilityAgentUpgradeStateNone', 'MobilityAgentUpgradeStateStarted', 'MobilityAgentUpgradeStateCompleted', 'MobilityAgentUpgradeStateCommit'
11622	AgentUpgradeState MobilityAgentUpgradeState `json:"agentUpgradeState,omitempty"`
11623	// LastAgentUpgradeType - READ-ONLY; The last agent upgrade type.
11624	LastAgentUpgradeType *string `json:"lastAgentUpgradeType,omitempty"`
11625	// LastAgentUpgradeFailedJobID - READ-ONLY; The last agent upgrade failed or cancelled job Id.
11626	LastAgentUpgradeFailedJobID *string `json:"lastAgentUpgradeFailedJobId,omitempty"`
11627	// ProtectedDisks - READ-ONLY; The list of protected disks.
11628	ProtectedDisks *[]InMageRcmProtectedDiskDetails `json:"protectedDisks,omitempty"`
11629	// IsLastUpgradeSuccessful - READ-ONLY; A value indicating whether last agent upgrade was successful or not.
11630	IsLastUpgradeSuccessful *string `json:"isLastUpgradeSuccessful,omitempty"`
11631	// MobilityAgentDetails - READ-ONLY; The mobility agent information.
11632	MobilityAgentDetails *InMageRcmMobilityAgentDetails `json:"mobilityAgentDetails,omitempty"`
11633	// LastAgentUpgradeErrorDetails - READ-ONLY; The last agent upgrade error information.
11634	LastAgentUpgradeErrorDetails *[]InMageRcmLastAgentUpgradeErrorDetails `json:"lastAgentUpgradeErrorDetails,omitempty"`
11635	// AgentUpgradeBlockingErrorDetails - READ-ONLY; The agent upgrade blocking error information.
11636	AgentUpgradeBlockingErrorDetails *[]InMageRcmAgentUpgradeBlockingErrorDetails `json:"agentUpgradeBlockingErrorDetails,omitempty"`
11637	// VMNics - READ-ONLY; The network details.
11638	VMNics *[]InMageRcmNicDetails `json:"vmNics,omitempty"`
11639	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
11640	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
11641}
11642
11643// MarshalJSON is the custom marshaler for InMageRcmReplicationDetails.
11644func (imrrd InMageRcmReplicationDetails) MarshalJSON() ([]byte, error) {
11645	imrrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm
11646	objectMap := make(map[string]interface{})
11647	if imrrd.InstanceType != "" {
11648		objectMap["instanceType"] = imrrd.InstanceType
11649	}
11650	return json.Marshal(objectMap)
11651}
11652
11653// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11654func (imrrd InMageRcmReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
11655	return nil, false
11656}
11657
11658// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11659func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
11660	return nil, false
11661}
11662
11663// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11664func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
11665	return nil, false
11666}
11667
11668// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11669func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
11670	return nil, false
11671}
11672
11673// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11674func (imrrd InMageRcmReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
11675	return nil, false
11676}
11677
11678// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11679func (imrrd InMageRcmReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
11680	return nil, false
11681}
11682
11683// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11684func (imrrd InMageRcmReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
11685	return &imrrd, true
11686}
11687
11688// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11689func (imrrd InMageRcmReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
11690	return nil, false
11691}
11692
11693// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11694func (imrrd InMageRcmReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
11695	return nil, false
11696}
11697
11698// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageRcmReplicationDetails.
11699func (imrrd InMageRcmReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
11700	return &imrrd, true
11701}
11702
11703// InMageRcmTestFailoverInput inMageRcm provider specific input for test failover.
11704type InMageRcmTestFailoverInput struct {
11705	// NetworkID - The test network Id.
11706	NetworkID *string `json:"networkId,omitempty"`
11707	// 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.
11708	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
11709	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
11710	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
11711}
11712
11713// MarshalJSON is the custom marshaler for InMageRcmTestFailoverInput.
11714func (imrtfi InMageRcmTestFailoverInput) MarshalJSON() ([]byte, error) {
11715	imrtfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm
11716	objectMap := make(map[string]interface{})
11717	if imrtfi.NetworkID != nil {
11718		objectMap["networkId"] = imrtfi.NetworkID
11719	}
11720	if imrtfi.RecoveryPointID != nil {
11721		objectMap["recoveryPointId"] = imrtfi.RecoveryPointID
11722	}
11723	if imrtfi.InstanceType != "" {
11724		objectMap["instanceType"] = imrtfi.InstanceType
11725	}
11726	return json.Marshal(objectMap)
11727}
11728
11729// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11730func (imrtfi InMageRcmTestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
11731	return nil, false
11732}
11733
11734// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11735func (imrtfi InMageRcmTestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
11736	return nil, false
11737}
11738
11739// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11740func (imrtfi InMageRcmTestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
11741	return nil, false
11742}
11743
11744// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11745func (imrtfi InMageRcmTestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
11746	return &imrtfi, true
11747}
11748
11749// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11750func (imrtfi InMageRcmTestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
11751	return nil, false
11752}
11753
11754// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11755func (imrtfi InMageRcmTestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
11756	return nil, false
11757}
11758
11759// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageRcmTestFailoverInput.
11760func (imrtfi InMageRcmTestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
11761	return &imrtfi, true
11762}
11763
11764// InMageRcmUnplannedFailoverInput inMageRcm provider specific input for unplanned failover.
11765type InMageRcmUnplannedFailoverInput struct {
11766	// PerformShutdown - A value indicating whether VM is to be shutdown.
11767	PerformShutdown *string `json:"performShutdown,omitempty"`
11768	// 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.
11769	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
11770	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
11771	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
11772}
11773
11774// MarshalJSON is the custom marshaler for InMageRcmUnplannedFailoverInput.
11775func (imrufi InMageRcmUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
11776	imrufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm
11777	objectMap := make(map[string]interface{})
11778	if imrufi.PerformShutdown != nil {
11779		objectMap["performShutdown"] = imrufi.PerformShutdown
11780	}
11781	if imrufi.RecoveryPointID != nil {
11782		objectMap["recoveryPointId"] = imrufi.RecoveryPointID
11783	}
11784	if imrufi.InstanceType != "" {
11785		objectMap["instanceType"] = imrufi.InstanceType
11786	}
11787	return json.Marshal(objectMap)
11788}
11789
11790// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11791func (imrufi InMageRcmUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
11792	return nil, false
11793}
11794
11795// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11796func (imrufi InMageRcmUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
11797	return nil, false
11798}
11799
11800// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11801func (imrufi InMageRcmUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
11802	return nil, false
11803}
11804
11805// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11806func (imrufi InMageRcmUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
11807	return &imrufi, true
11808}
11809
11810// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11811func (imrufi InMageRcmUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
11812	return nil, false
11813}
11814
11815// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11816func (imrufi InMageRcmUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
11817	return nil, false
11818}
11819
11820// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageRcmUnplannedFailoverInput.
11821func (imrufi InMageRcmUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
11822	return &imrufi, true
11823}
11824
11825// InMageRcmUpdateReplicationProtectedItemInput inMageRcm provider specific input to update replication
11826// protected item.
11827type InMageRcmUpdateReplicationProtectedItemInput struct {
11828	// TargetVMName - The target VM name.
11829	TargetVMName *string `json:"targetVmName,omitempty"`
11830	// TargetVMSize - The target VM size.
11831	TargetVMSize *string `json:"targetVmSize,omitempty"`
11832	// TargetResourceGroupID - The target resource group ARM Id.
11833	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
11834	// TargetAvailabilitySetID - The target availability set ARM Id.
11835	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
11836	// TargetAvailabilityZone - The target availability zone.
11837	TargetAvailabilityZone *string `json:"targetAvailabilityZone,omitempty"`
11838	// TargetProximityPlacementGroupID - The target proximity placement group Id.
11839	TargetProximityPlacementGroupID *string `json:"targetProximityPlacementGroupId,omitempty"`
11840	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
11841	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
11842	// TargetNetworkID - The target network ARM Id.
11843	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
11844	// TestNetworkID - The test network ARM Id.
11845	TestNetworkID *string `json:"testNetworkId,omitempty"`
11846	// VMNics - The list of NIC details.
11847	VMNics *[]InMageRcmNicInput `json:"vmNics,omitempty"`
11848	// LicenseType - The license type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
11849	LicenseType LicenseType `json:"licenseType,omitempty"`
11850	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
11851	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
11852}
11853
11854// MarshalJSON is the custom marshaler for InMageRcmUpdateReplicationProtectedItemInput.
11855func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) MarshalJSON() ([]byte, error) {
11856	imrurpii.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm
11857	objectMap := make(map[string]interface{})
11858	if imrurpii.TargetVMName != nil {
11859		objectMap["targetVmName"] = imrurpii.TargetVMName
11860	}
11861	if imrurpii.TargetVMSize != nil {
11862		objectMap["targetVmSize"] = imrurpii.TargetVMSize
11863	}
11864	if imrurpii.TargetResourceGroupID != nil {
11865		objectMap["targetResourceGroupId"] = imrurpii.TargetResourceGroupID
11866	}
11867	if imrurpii.TargetAvailabilitySetID != nil {
11868		objectMap["targetAvailabilitySetId"] = imrurpii.TargetAvailabilitySetID
11869	}
11870	if imrurpii.TargetAvailabilityZone != nil {
11871		objectMap["targetAvailabilityZone"] = imrurpii.TargetAvailabilityZone
11872	}
11873	if imrurpii.TargetProximityPlacementGroupID != nil {
11874		objectMap["targetProximityPlacementGroupId"] = imrurpii.TargetProximityPlacementGroupID
11875	}
11876	if imrurpii.TargetBootDiagnosticsStorageAccountID != nil {
11877		objectMap["targetBootDiagnosticsStorageAccountId"] = imrurpii.TargetBootDiagnosticsStorageAccountID
11878	}
11879	if imrurpii.TargetNetworkID != nil {
11880		objectMap["targetNetworkId"] = imrurpii.TargetNetworkID
11881	}
11882	if imrurpii.TestNetworkID != nil {
11883		objectMap["testNetworkId"] = imrurpii.TestNetworkID
11884	}
11885	if imrurpii.VMNics != nil {
11886		objectMap["vmNics"] = imrurpii.VMNics
11887	}
11888	if imrurpii.LicenseType != "" {
11889		objectMap["licenseType"] = imrurpii.LicenseType
11890	}
11891	if imrurpii.InstanceType != "" {
11892		objectMap["instanceType"] = imrurpii.InstanceType
11893	}
11894	return json.Marshal(objectMap)
11895}
11896
11897// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11898func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
11899	return nil, false
11900}
11901
11902// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11903func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
11904	return nil, false
11905}
11906
11907// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11908func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
11909	return nil, false
11910}
11911
11912// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11913func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
11914	return &imrurpii, true
11915}
11916
11917// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11918func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
11919	return nil, false
11920}
11921
11922// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for InMageRcmUpdateReplicationProtectedItemInput.
11923func (imrurpii InMageRcmUpdateReplicationProtectedItemInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
11924	return &imrurpii, true
11925}
11926
11927// InMageReplicationDetails inMage provider specific settings
11928type InMageReplicationDetails struct {
11929	// 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.
11930	ActiveSiteType *string `json:"activeSiteType,omitempty"`
11931	// SourceVMCPUCount - The CPU count of the VM on the primary side.
11932	SourceVMCPUCount *int32 `json:"sourceVmCpuCount,omitempty"`
11933	// SourceVMRAMSizeInMB - The RAM size of the VM on the primary side.
11934	SourceVMRAMSizeInMB *int32 `json:"sourceVmRamSizeInMB,omitempty"`
11935	// OsDetails - The OS details.
11936	OsDetails *OSDiskDetails `json:"osDetails,omitempty"`
11937	// ProtectionStage - The protection stage.
11938	ProtectionStage *string `json:"protectionStage,omitempty"`
11939	// VMID - The virtual machine Id.
11940	VMID *string `json:"vmId,omitempty"`
11941	// VMProtectionState - The protection state for the vm.
11942	VMProtectionState *string `json:"vmProtectionState,omitempty"`
11943	// VMProtectionStateDescription - The protection state description for the vm.
11944	VMProtectionStateDescription *string `json:"vmProtectionStateDescription,omitempty"`
11945	// ResyncDetails - The resync details of the machine
11946	ResyncDetails *InitialReplicationDetails `json:"resyncDetails,omitempty"`
11947	// RetentionWindowStart - The retention window start time.
11948	RetentionWindowStart *date.Time `json:"retentionWindowStart,omitempty"`
11949	// RetentionWindowEnd - The retention window end time.
11950	RetentionWindowEnd *date.Time `json:"retentionWindowEnd,omitempty"`
11951	// CompressedDataRateInMB - The compressed data change rate in MB.
11952	CompressedDataRateInMB *float64 `json:"compressedDataRateInMB,omitempty"`
11953	// UncompressedDataRateInMB - The uncompressed data change rate in MB.
11954	UncompressedDataRateInMB *float64 `json:"uncompressedDataRateInMB,omitempty"`
11955	// RpoInSeconds - The RPO in seconds.
11956	RpoInSeconds *int64 `json:"rpoInSeconds,omitempty"`
11957	// ProtectedDisks - The list of protected disks.
11958	ProtectedDisks *[]InMageProtectedDiskDetails `json:"protectedDisks,omitempty"`
11959	// IPAddress - The source IP address.
11960	IPAddress *string `json:"ipAddress,omitempty"`
11961	// LastHeartbeat - The last heartbeat received from the source server.
11962	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
11963	// ProcessServerID - The process server Id.
11964	ProcessServerID *string `json:"processServerId,omitempty"`
11965	// MasterTargetID - The master target Id.
11966	MasterTargetID *string `json:"masterTargetId,omitempty"`
11967	// ConsistencyPoints - The collection of Consistency points.
11968	ConsistencyPoints map[string]*date.Time `json:"consistencyPoints"`
11969	// DiskResized - A value indicating whether any disk is resized for this VM.
11970	DiskResized *string `json:"diskResized,omitempty"`
11971	// RebootAfterUpdateStatus - A value indicating whether the source server requires a restart after update.
11972	RebootAfterUpdateStatus *string `json:"rebootAfterUpdateStatus,omitempty"`
11973	// MultiVMGroupID - The multi vm group Id, if any.
11974	MultiVMGroupID *string `json:"multiVmGroupId,omitempty"`
11975	// MultiVMGroupName - The multi vm group name, if any.
11976	MultiVMGroupName *string `json:"multiVmGroupName,omitempty"`
11977	// MultiVMSyncStatus - A value indicating whether the multi vm sync is enabled or disabled.
11978	MultiVMSyncStatus *string `json:"multiVmSyncStatus,omitempty"`
11979	// AgentDetails - The agent details.
11980	AgentDetails *InMageAgentDetails `json:"agentDetails,omitempty"`
11981	// VCenterInfrastructureID - The vCenter infrastructure Id.
11982	VCenterInfrastructureID *string `json:"vCenterInfrastructureId,omitempty"`
11983	// InfrastructureVMID - The infrastructure VM Id.
11984	InfrastructureVMID *string `json:"infrastructureVmId,omitempty"`
11985	// VMNics - The PE Network details.
11986	VMNics *[]VMNicDetails `json:"vmNics,omitempty"`
11987	// DiscoveryType - A value indicating the discovery type of the machine.
11988	DiscoveryType *string `json:"discoveryType,omitempty"`
11989	// AzureStorageAccountID - A value indicating the underlying Azure storage account. If the VM is not running in Azure, this value shall be set to null.
11990	AzureStorageAccountID *string `json:"azureStorageAccountId,omitempty"`
11991	// Datastores - The data stores of the on-premise machine Value can be list of strings that contain data store names
11992	Datastores *[]string `json:"datastores,omitempty"`
11993	// ValidationErrors - The validation errors of the on-premise machine Value can be list of validation errors
11994	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
11995	// LastRpoCalculatedTime - The last RPO calculated time.
11996	LastRpoCalculatedTime *date.Time `json:"lastRpoCalculatedTime,omitempty"`
11997	// LastUpdateReceivedTime - The last update time received from on-prem components.
11998	LastUpdateReceivedTime *date.Time `json:"lastUpdateReceivedTime,omitempty"`
11999	// ReplicaID - The replica id of the protected item.
12000	ReplicaID *string `json:"replicaId,omitempty"`
12001	// OsVersion - The OS Version of the protected item.
12002	OsVersion *string `json:"osVersion,omitempty"`
12003	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
12004	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
12005}
12006
12007// MarshalJSON is the custom marshaler for InMageReplicationDetails.
12008func (imrd InMageReplicationDetails) MarshalJSON() ([]byte, error) {
12009	imrd.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage
12010	objectMap := make(map[string]interface{})
12011	if imrd.ActiveSiteType != nil {
12012		objectMap["activeSiteType"] = imrd.ActiveSiteType
12013	}
12014	if imrd.SourceVMCPUCount != nil {
12015		objectMap["sourceVmCpuCount"] = imrd.SourceVMCPUCount
12016	}
12017	if imrd.SourceVMRAMSizeInMB != nil {
12018		objectMap["sourceVmRamSizeInMB"] = imrd.SourceVMRAMSizeInMB
12019	}
12020	if imrd.OsDetails != nil {
12021		objectMap["osDetails"] = imrd.OsDetails
12022	}
12023	if imrd.ProtectionStage != nil {
12024		objectMap["protectionStage"] = imrd.ProtectionStage
12025	}
12026	if imrd.VMID != nil {
12027		objectMap["vmId"] = imrd.VMID
12028	}
12029	if imrd.VMProtectionState != nil {
12030		objectMap["vmProtectionState"] = imrd.VMProtectionState
12031	}
12032	if imrd.VMProtectionStateDescription != nil {
12033		objectMap["vmProtectionStateDescription"] = imrd.VMProtectionStateDescription
12034	}
12035	if imrd.ResyncDetails != nil {
12036		objectMap["resyncDetails"] = imrd.ResyncDetails
12037	}
12038	if imrd.RetentionWindowStart != nil {
12039		objectMap["retentionWindowStart"] = imrd.RetentionWindowStart
12040	}
12041	if imrd.RetentionWindowEnd != nil {
12042		objectMap["retentionWindowEnd"] = imrd.RetentionWindowEnd
12043	}
12044	if imrd.CompressedDataRateInMB != nil {
12045		objectMap["compressedDataRateInMB"] = imrd.CompressedDataRateInMB
12046	}
12047	if imrd.UncompressedDataRateInMB != nil {
12048		objectMap["uncompressedDataRateInMB"] = imrd.UncompressedDataRateInMB
12049	}
12050	if imrd.RpoInSeconds != nil {
12051		objectMap["rpoInSeconds"] = imrd.RpoInSeconds
12052	}
12053	if imrd.ProtectedDisks != nil {
12054		objectMap["protectedDisks"] = imrd.ProtectedDisks
12055	}
12056	if imrd.IPAddress != nil {
12057		objectMap["ipAddress"] = imrd.IPAddress
12058	}
12059	if imrd.LastHeartbeat != nil {
12060		objectMap["lastHeartbeat"] = imrd.LastHeartbeat
12061	}
12062	if imrd.ProcessServerID != nil {
12063		objectMap["processServerId"] = imrd.ProcessServerID
12064	}
12065	if imrd.MasterTargetID != nil {
12066		objectMap["masterTargetId"] = imrd.MasterTargetID
12067	}
12068	if imrd.ConsistencyPoints != nil {
12069		objectMap["consistencyPoints"] = imrd.ConsistencyPoints
12070	}
12071	if imrd.DiskResized != nil {
12072		objectMap["diskResized"] = imrd.DiskResized
12073	}
12074	if imrd.RebootAfterUpdateStatus != nil {
12075		objectMap["rebootAfterUpdateStatus"] = imrd.RebootAfterUpdateStatus
12076	}
12077	if imrd.MultiVMGroupID != nil {
12078		objectMap["multiVmGroupId"] = imrd.MultiVMGroupID
12079	}
12080	if imrd.MultiVMGroupName != nil {
12081		objectMap["multiVmGroupName"] = imrd.MultiVMGroupName
12082	}
12083	if imrd.MultiVMSyncStatus != nil {
12084		objectMap["multiVmSyncStatus"] = imrd.MultiVMSyncStatus
12085	}
12086	if imrd.AgentDetails != nil {
12087		objectMap["agentDetails"] = imrd.AgentDetails
12088	}
12089	if imrd.VCenterInfrastructureID != nil {
12090		objectMap["vCenterInfrastructureId"] = imrd.VCenterInfrastructureID
12091	}
12092	if imrd.InfrastructureVMID != nil {
12093		objectMap["infrastructureVmId"] = imrd.InfrastructureVMID
12094	}
12095	if imrd.VMNics != nil {
12096		objectMap["vmNics"] = imrd.VMNics
12097	}
12098	if imrd.DiscoveryType != nil {
12099		objectMap["discoveryType"] = imrd.DiscoveryType
12100	}
12101	if imrd.AzureStorageAccountID != nil {
12102		objectMap["azureStorageAccountId"] = imrd.AzureStorageAccountID
12103	}
12104	if imrd.Datastores != nil {
12105		objectMap["datastores"] = imrd.Datastores
12106	}
12107	if imrd.ValidationErrors != nil {
12108		objectMap["validationErrors"] = imrd.ValidationErrors
12109	}
12110	if imrd.LastRpoCalculatedTime != nil {
12111		objectMap["lastRpoCalculatedTime"] = imrd.LastRpoCalculatedTime
12112	}
12113	if imrd.LastUpdateReceivedTime != nil {
12114		objectMap["lastUpdateReceivedTime"] = imrd.LastUpdateReceivedTime
12115	}
12116	if imrd.ReplicaID != nil {
12117		objectMap["replicaId"] = imrd.ReplicaID
12118	}
12119	if imrd.OsVersion != nil {
12120		objectMap["osVersion"] = imrd.OsVersion
12121	}
12122	if imrd.InstanceType != "" {
12123		objectMap["instanceType"] = imrd.InstanceType
12124	}
12125	return json.Marshal(objectMap)
12126}
12127
12128// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12129func (imrd InMageReplicationDetails) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
12130	return nil, false
12131}
12132
12133// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12134func (imrd InMageReplicationDetails) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
12135	return nil, false
12136}
12137
12138// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12139func (imrd InMageReplicationDetails) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
12140	return nil, false
12141}
12142
12143// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12144func (imrd InMageReplicationDetails) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
12145	return nil, false
12146}
12147
12148// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12149func (imrd InMageReplicationDetails) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
12150	return nil, false
12151}
12152
12153// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12154func (imrd InMageReplicationDetails) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
12155	return nil, false
12156}
12157
12158// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12159func (imrd InMageReplicationDetails) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
12160	return nil, false
12161}
12162
12163// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12164func (imrd InMageReplicationDetails) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
12165	return &imrd, true
12166}
12167
12168// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12169func (imrd InMageReplicationDetails) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
12170	return nil, false
12171}
12172
12173// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for InMageReplicationDetails.
12174func (imrd InMageReplicationDetails) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
12175	return &imrd, true
12176}
12177
12178// InMageReprotectInput inMageAzureV2 specific provider input.
12179type InMageReprotectInput struct {
12180	// MasterTargetID - The Master Target Id.
12181	MasterTargetID *string `json:"masterTargetId,omitempty"`
12182	// ProcessServerID - The Process Server Id.
12183	ProcessServerID *string `json:"processServerId,omitempty"`
12184	// RetentionDrive - The retention drive to use on the MT.
12185	RetentionDrive *string `json:"retentionDrive,omitempty"`
12186	// RunAsAccountID - The CS account Id.
12187	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
12188	// DatastoreName - The target data store name.
12189	DatastoreName *string `json:"datastoreName,omitempty"`
12190	// DiskExclusionInput - The enable disk exclusion input.
12191	DiskExclusionInput *InMageDiskExclusionInput `json:"diskExclusionInput,omitempty"`
12192	// ProfileID - The Policy Id.
12193	ProfileID *string `json:"profileId,omitempty"`
12194	// DisksToInclude - The disks to include list.
12195	DisksToInclude *[]string `json:"disksToInclude,omitempty"`
12196	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
12197	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
12198}
12199
12200// MarshalJSON is the custom marshaler for InMageReprotectInput.
12201func (imri InMageReprotectInput) MarshalJSON() ([]byte, error) {
12202	imri.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage
12203	objectMap := make(map[string]interface{})
12204	if imri.MasterTargetID != nil {
12205		objectMap["masterTargetId"] = imri.MasterTargetID
12206	}
12207	if imri.ProcessServerID != nil {
12208		objectMap["processServerId"] = imri.ProcessServerID
12209	}
12210	if imri.RetentionDrive != nil {
12211		objectMap["retentionDrive"] = imri.RetentionDrive
12212	}
12213	if imri.RunAsAccountID != nil {
12214		objectMap["runAsAccountId"] = imri.RunAsAccountID
12215	}
12216	if imri.DatastoreName != nil {
12217		objectMap["datastoreName"] = imri.DatastoreName
12218	}
12219	if imri.DiskExclusionInput != nil {
12220		objectMap["diskExclusionInput"] = imri.DiskExclusionInput
12221	}
12222	if imri.ProfileID != nil {
12223		objectMap["profileId"] = imri.ProfileID
12224	}
12225	if imri.DisksToInclude != nil {
12226		objectMap["disksToInclude"] = imri.DisksToInclude
12227	}
12228	if imri.InstanceType != "" {
12229		objectMap["instanceType"] = imri.InstanceType
12230	}
12231	return json.Marshal(objectMap)
12232}
12233
12234// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12235func (imri InMageReprotectInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
12236	return nil, false
12237}
12238
12239// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12240func (imri InMageReprotectInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
12241	return nil, false
12242}
12243
12244// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12245func (imri InMageReprotectInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
12246	return nil, false
12247}
12248
12249// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12250func (imri InMageReprotectInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
12251	return &imri, true
12252}
12253
12254// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12255func (imri InMageReprotectInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
12256	return nil, false
12257}
12258
12259// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for InMageReprotectInput.
12260func (imri InMageReprotectInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
12261	return &imri, true
12262}
12263
12264// InMageTestFailoverInput provider specific input for InMage test failover.
12265type InMageTestFailoverInput struct {
12266	// 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'
12267	RecoveryPointType RecoveryPointType `json:"recoveryPointType,omitempty"`
12268	// 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.
12269	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
12270	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
12271	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
12272}
12273
12274// MarshalJSON is the custom marshaler for InMageTestFailoverInput.
12275func (imtfi InMageTestFailoverInput) MarshalJSON() ([]byte, error) {
12276	imtfi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage
12277	objectMap := make(map[string]interface{})
12278	if imtfi.RecoveryPointType != "" {
12279		objectMap["recoveryPointType"] = imtfi.RecoveryPointType
12280	}
12281	if imtfi.RecoveryPointID != nil {
12282		objectMap["recoveryPointId"] = imtfi.RecoveryPointID
12283	}
12284	if imtfi.InstanceType != "" {
12285		objectMap["instanceType"] = imtfi.InstanceType
12286	}
12287	return json.Marshal(objectMap)
12288}
12289
12290// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12291func (imtfi InMageTestFailoverInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
12292	return nil, false
12293}
12294
12295// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12296func (imtfi InMageTestFailoverInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
12297	return nil, false
12298}
12299
12300// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12301func (imtfi InMageTestFailoverInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
12302	return nil, false
12303}
12304
12305// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12306func (imtfi InMageTestFailoverInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
12307	return nil, false
12308}
12309
12310// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12311func (imtfi InMageTestFailoverInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
12312	return &imtfi, true
12313}
12314
12315// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12316func (imtfi InMageTestFailoverInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
12317	return nil, false
12318}
12319
12320// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for InMageTestFailoverInput.
12321func (imtfi InMageTestFailoverInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
12322	return &imtfi, true
12323}
12324
12325// InMageUnplannedFailoverInput provider specific input for InMage unplanned failover.
12326type InMageUnplannedFailoverInput struct {
12327	// 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'
12328	RecoveryPointType RecoveryPointType `json:"recoveryPointType,omitempty"`
12329	// 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.
12330	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
12331	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
12332	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
12333}
12334
12335// MarshalJSON is the custom marshaler for InMageUnplannedFailoverInput.
12336func (imufi InMageUnplannedFailoverInput) MarshalJSON() ([]byte, error) {
12337	imufi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage
12338	objectMap := make(map[string]interface{})
12339	if imufi.RecoveryPointType != "" {
12340		objectMap["recoveryPointType"] = imufi.RecoveryPointType
12341	}
12342	if imufi.RecoveryPointID != nil {
12343		objectMap["recoveryPointId"] = imufi.RecoveryPointID
12344	}
12345	if imufi.InstanceType != "" {
12346		objectMap["instanceType"] = imufi.InstanceType
12347	}
12348	return json.Marshal(objectMap)
12349}
12350
12351// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12352func (imufi InMageUnplannedFailoverInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
12353	return nil, false
12354}
12355
12356// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12357func (imufi InMageUnplannedFailoverInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
12358	return nil, false
12359}
12360
12361// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12362func (imufi InMageUnplannedFailoverInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
12363	return nil, false
12364}
12365
12366// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12367func (imufi InMageUnplannedFailoverInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
12368	return nil, false
12369}
12370
12371// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12372func (imufi InMageUnplannedFailoverInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
12373	return &imufi, true
12374}
12375
12376// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12377func (imufi InMageUnplannedFailoverInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
12378	return nil, false
12379}
12380
12381// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for InMageUnplannedFailoverInput.
12382func (imufi InMageUnplannedFailoverInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
12383	return &imufi, true
12384}
12385
12386// InMageVolumeExclusionOptions guest disk signature based disk exclusion option when doing enable
12387// protection of virtual machine in InMage provider.
12388type InMageVolumeExclusionOptions struct {
12389	// VolumeLabel - The volume label. The disk having any volume with this label will be excluded from replication.
12390	VolumeLabel *string `json:"volumeLabel,omitempty"`
12391	// 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.
12392	OnlyExcludeIfSingleVolume *string `json:"onlyExcludeIfSingleVolume,omitempty"`
12393}
12394
12395// InnerHealthError implements InnerHealthError class. HealthError object has a list of InnerHealthErrors
12396// as child errors. InnerHealthError is used because this will prevent an infinite loop of structures when
12397// Hydra tries to auto-generate the contract. We are exposing the related health errors as inner health
12398// errors and all API consumers can utilize this in the same fashion as Exception -&gt; InnerException.
12399type InnerHealthError struct {
12400	// ErrorSource - Source of error.
12401	ErrorSource *string `json:"errorSource,omitempty"`
12402	// ErrorType - Type of error.
12403	ErrorType *string `json:"errorType,omitempty"`
12404	// ErrorLevel - Level of error.
12405	ErrorLevel *string `json:"errorLevel,omitempty"`
12406	// ErrorCategory - Category of error.
12407	ErrorCategory *string `json:"errorCategory,omitempty"`
12408	// ErrorCode - Error code.
12409	ErrorCode *string `json:"errorCode,omitempty"`
12410	// SummaryMessage - Summary message of the entity.
12411	SummaryMessage *string `json:"summaryMessage,omitempty"`
12412	// ErrorMessage - Error message.
12413	ErrorMessage *string `json:"errorMessage,omitempty"`
12414	// PossibleCauses - Possible causes of error.
12415	PossibleCauses *string `json:"possibleCauses,omitempty"`
12416	// RecommendedAction - Recommended action to resolve error.
12417	RecommendedAction *string `json:"recommendedAction,omitempty"`
12418	// CreationTimeUtc - Error creation time (UTC)
12419	CreationTimeUtc *date.Time `json:"creationTimeUtc,omitempty"`
12420	// RecoveryProviderErrorMessage - DRA error message.
12421	RecoveryProviderErrorMessage *string `json:"recoveryProviderErrorMessage,omitempty"`
12422	// EntityID - ID of the entity.
12423	EntityID *string `json:"entityId,omitempty"`
12424}
12425
12426// InputEndpoint azure VM input endpoint details.
12427type InputEndpoint struct {
12428	// EndpointName - The input endpoint name.
12429	EndpointName *string `json:"endpointName,omitempty"`
12430	// PrivatePort - The input endpoint private port.
12431	PrivatePort *int32 `json:"privatePort,omitempty"`
12432	// PublicPort - The input endpoint public port.
12433	PublicPort *int32 `json:"publicPort,omitempty"`
12434	// Protocol - The input endpoint protocol.
12435	Protocol *string `json:"protocol,omitempty"`
12436}
12437
12438// IPConfig IP configuration details.
12439type IPConfig struct {
12440	// StaticIPAddress - The static IP address of the IP configuration.
12441	StaticIPAddress *string `json:"staticIPAddress,omitempty"`
12442	// PublicIPAddressID - The Id of the public IP address associated with the IP configuration.
12443	PublicIPAddressID *string `json:"publicIpAddressId,omitempty"`
12444	// LBBackendAddressPoolIds - The backend address pools associated with the IP configuration.
12445	LBBackendAddressPoolIds *[]string `json:"lBBackendAddressPoolIds,omitempty"`
12446}
12447
12448// Job job details.
12449type Job struct {
12450	autorest.Response `json:"-"`
12451	// Properties - The custom data.
12452	Properties *JobProperties `json:"properties,omitempty"`
12453	// ID - READ-ONLY; Resource Id
12454	ID *string `json:"id,omitempty"`
12455	// Name - READ-ONLY; Resource Name
12456	Name *string `json:"name,omitempty"`
12457	// Type - READ-ONLY; Resource Type
12458	Type *string `json:"type,omitempty"`
12459	// Location - Resource Location
12460	Location *string `json:"location,omitempty"`
12461}
12462
12463// MarshalJSON is the custom marshaler for Job.
12464func (j Job) MarshalJSON() ([]byte, error) {
12465	objectMap := make(map[string]interface{})
12466	if j.Properties != nil {
12467		objectMap["properties"] = j.Properties
12468	}
12469	if j.Location != nil {
12470		objectMap["location"] = j.Location
12471	}
12472	return json.Marshal(objectMap)
12473}
12474
12475// JobCollection collection of jobs.
12476type JobCollection struct {
12477	autorest.Response `json:"-"`
12478	// Value - The list of jobs.
12479	Value *[]Job `json:"value,omitempty"`
12480	// NextLink - The value of next link.
12481	NextLink *string `json:"nextLink,omitempty"`
12482}
12483
12484// JobCollectionIterator provides access to a complete listing of Job values.
12485type JobCollectionIterator struct {
12486	i    int
12487	page JobCollectionPage
12488}
12489
12490// NextWithContext advances to the next value.  If there was an error making
12491// the request the iterator does not advance and the error is returned.
12492func (iter *JobCollectionIterator) NextWithContext(ctx context.Context) (err error) {
12493	if tracing.IsEnabled() {
12494		ctx = tracing.StartSpan(ctx, fqdn+"/JobCollectionIterator.NextWithContext")
12495		defer func() {
12496			sc := -1
12497			if iter.Response().Response.Response != nil {
12498				sc = iter.Response().Response.Response.StatusCode
12499			}
12500			tracing.EndSpan(ctx, sc, err)
12501		}()
12502	}
12503	iter.i++
12504	if iter.i < len(iter.page.Values()) {
12505		return nil
12506	}
12507	err = iter.page.NextWithContext(ctx)
12508	if err != nil {
12509		iter.i--
12510		return err
12511	}
12512	iter.i = 0
12513	return nil
12514}
12515
12516// Next advances to the next value.  If there was an error making
12517// the request the iterator does not advance and the error is returned.
12518// Deprecated: Use NextWithContext() instead.
12519func (iter *JobCollectionIterator) Next() error {
12520	return iter.NextWithContext(context.Background())
12521}
12522
12523// NotDone returns true if the enumeration should be started or is not yet complete.
12524func (iter JobCollectionIterator) NotDone() bool {
12525	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12526}
12527
12528// Response returns the raw server response from the last page request.
12529func (iter JobCollectionIterator) Response() JobCollection {
12530	return iter.page.Response()
12531}
12532
12533// Value returns the current value or a zero-initialized value if the
12534// iterator has advanced beyond the end of the collection.
12535func (iter JobCollectionIterator) Value() Job {
12536	if !iter.page.NotDone() {
12537		return Job{}
12538	}
12539	return iter.page.Values()[iter.i]
12540}
12541
12542// Creates a new instance of the JobCollectionIterator type.
12543func NewJobCollectionIterator(page JobCollectionPage) JobCollectionIterator {
12544	return JobCollectionIterator{page: page}
12545}
12546
12547// IsEmpty returns true if the ListResult contains no values.
12548func (jc JobCollection) IsEmpty() bool {
12549	return jc.Value == nil || len(*jc.Value) == 0
12550}
12551
12552// hasNextLink returns true if the NextLink is not empty.
12553func (jc JobCollection) hasNextLink() bool {
12554	return jc.NextLink != nil && len(*jc.NextLink) != 0
12555}
12556
12557// jobCollectionPreparer prepares a request to retrieve the next set of results.
12558// It returns nil if no more results exist.
12559func (jc JobCollection) jobCollectionPreparer(ctx context.Context) (*http.Request, error) {
12560	if !jc.hasNextLink() {
12561		return nil, nil
12562	}
12563	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12564		autorest.AsJSON(),
12565		autorest.AsGet(),
12566		autorest.WithBaseURL(to.String(jc.NextLink)))
12567}
12568
12569// JobCollectionPage contains a page of Job values.
12570type JobCollectionPage struct {
12571	fn func(context.Context, JobCollection) (JobCollection, error)
12572	jc JobCollection
12573}
12574
12575// NextWithContext advances to the next page of values.  If there was an error making
12576// the request the page does not advance and the error is returned.
12577func (page *JobCollectionPage) NextWithContext(ctx context.Context) (err error) {
12578	if tracing.IsEnabled() {
12579		ctx = tracing.StartSpan(ctx, fqdn+"/JobCollectionPage.NextWithContext")
12580		defer func() {
12581			sc := -1
12582			if page.Response().Response.Response != nil {
12583				sc = page.Response().Response.Response.StatusCode
12584			}
12585			tracing.EndSpan(ctx, sc, err)
12586		}()
12587	}
12588	for {
12589		next, err := page.fn(ctx, page.jc)
12590		if err != nil {
12591			return err
12592		}
12593		page.jc = next
12594		if !next.hasNextLink() || !next.IsEmpty() {
12595			break
12596		}
12597	}
12598	return nil
12599}
12600
12601// Next advances to the next page of values.  If there was an error making
12602// the request the page does not advance and the error is returned.
12603// Deprecated: Use NextWithContext() instead.
12604func (page *JobCollectionPage) Next() error {
12605	return page.NextWithContext(context.Background())
12606}
12607
12608// NotDone returns true if the page enumeration should be started or is not yet complete.
12609func (page JobCollectionPage) NotDone() bool {
12610	return !page.jc.IsEmpty()
12611}
12612
12613// Response returns the raw server response from the last page request.
12614func (page JobCollectionPage) Response() JobCollection {
12615	return page.jc
12616}
12617
12618// Values returns the slice of values for the current page or nil if there are no values.
12619func (page JobCollectionPage) Values() []Job {
12620	if page.jc.IsEmpty() {
12621		return nil
12622	}
12623	return *page.jc.Value
12624}
12625
12626// Creates a new instance of the JobCollectionPage type.
12627func NewJobCollectionPage(cur JobCollection, getNextPage func(context.Context, JobCollection) (JobCollection, error)) JobCollectionPage {
12628	return JobCollectionPage{
12629		fn: getNextPage,
12630		jc: cur,
12631	}
12632}
12633
12634// BasicJobDetails job details based on specific job type.
12635type BasicJobDetails interface {
12636	AsAsrJobDetails() (*AsrJobDetails, bool)
12637	AsExportJobDetails() (*ExportJobDetails, bool)
12638	AsFailoverJobDetails() (*FailoverJobDetails, bool)
12639	AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool)
12640	AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool)
12641	AsJobDetails() (*JobDetails, bool)
12642}
12643
12644// JobDetails job details based on specific job type.
12645type JobDetails struct {
12646	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
12647	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
12648	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
12649	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
12650}
12651
12652func unmarshalBasicJobDetails(body []byte) (BasicJobDetails, error) {
12653	var m map[string]interface{}
12654	err := json.Unmarshal(body, &m)
12655	if err != nil {
12656		return nil, err
12657	}
12658
12659	switch m["instanceType"] {
12660	case string(InstanceTypeAsrJobDetails):
12661		var ajd AsrJobDetails
12662		err := json.Unmarshal(body, &ajd)
12663		return ajd, err
12664	case string(InstanceTypeExportJobDetails):
12665		var ejd ExportJobDetails
12666		err := json.Unmarshal(body, &ejd)
12667		return ejd, err
12668	case string(InstanceTypeFailoverJobDetails):
12669		var fjd FailoverJobDetails
12670		err := json.Unmarshal(body, &fjd)
12671		return fjd, err
12672	case string(InstanceTypeSwitchProtectionJobDetails):
12673		var spjd SwitchProtectionJobDetails
12674		err := json.Unmarshal(body, &spjd)
12675		return spjd, err
12676	case string(InstanceTypeTestFailoverJobDetails):
12677		var tfjd TestFailoverJobDetails
12678		err := json.Unmarshal(body, &tfjd)
12679		return tfjd, err
12680	default:
12681		var jd JobDetails
12682		err := json.Unmarshal(body, &jd)
12683		return jd, err
12684	}
12685}
12686func unmarshalBasicJobDetailsArray(body []byte) ([]BasicJobDetails, error) {
12687	var rawMessages []*json.RawMessage
12688	err := json.Unmarshal(body, &rawMessages)
12689	if err != nil {
12690		return nil, err
12691	}
12692
12693	jdArray := make([]BasicJobDetails, len(rawMessages))
12694
12695	for index, rawMessage := range rawMessages {
12696		jd, err := unmarshalBasicJobDetails(*rawMessage)
12697		if err != nil {
12698			return nil, err
12699		}
12700		jdArray[index] = jd
12701	}
12702	return jdArray, nil
12703}
12704
12705// MarshalJSON is the custom marshaler for JobDetails.
12706func (jd JobDetails) MarshalJSON() ([]byte, error) {
12707	jd.InstanceType = InstanceTypeJobDetails
12708	objectMap := make(map[string]interface{})
12709	if jd.AffectedObjectDetails != nil {
12710		objectMap["affectedObjectDetails"] = jd.AffectedObjectDetails
12711	}
12712	if jd.InstanceType != "" {
12713		objectMap["instanceType"] = jd.InstanceType
12714	}
12715	return json.Marshal(objectMap)
12716}
12717
12718// AsAsrJobDetails is the BasicJobDetails implementation for JobDetails.
12719func (jd JobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
12720	return nil, false
12721}
12722
12723// AsExportJobDetails is the BasicJobDetails implementation for JobDetails.
12724func (jd JobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
12725	return nil, false
12726}
12727
12728// AsFailoverJobDetails is the BasicJobDetails implementation for JobDetails.
12729func (jd JobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
12730	return nil, false
12731}
12732
12733// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for JobDetails.
12734func (jd JobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
12735	return nil, false
12736}
12737
12738// AsTestFailoverJobDetails is the BasicJobDetails implementation for JobDetails.
12739func (jd JobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
12740	return nil, false
12741}
12742
12743// AsJobDetails is the BasicJobDetails implementation for JobDetails.
12744func (jd JobDetails) AsJobDetails() (*JobDetails, bool) {
12745	return &jd, true
12746}
12747
12748// AsBasicJobDetails is the BasicJobDetails implementation for JobDetails.
12749func (jd JobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
12750	return &jd, true
12751}
12752
12753// JobEntity this class contains the minimal job details required to navigate to the desired drill down.
12754type JobEntity struct {
12755	// JobID - The job id.
12756	JobID *string `json:"jobId,omitempty"`
12757	// JobFriendlyName - The job display name.
12758	JobFriendlyName *string `json:"jobFriendlyName,omitempty"`
12759	// TargetObjectID - The object id.
12760	TargetObjectID *string `json:"targetObjectId,omitempty"`
12761	// TargetObjectName - The object name.
12762	TargetObjectName *string `json:"targetObjectName,omitempty"`
12763	// TargetInstanceType - The workflow affected object type.
12764	TargetInstanceType *string `json:"targetInstanceType,omitempty"`
12765	// JobScenarioName - The job name. Enum type ScenarioName.
12766	JobScenarioName *string `json:"jobScenarioName,omitempty"`
12767}
12768
12769// JobErrorDetails this class contains the error details per object.
12770type JobErrorDetails struct {
12771	// ServiceErrorDetails - The Service error details.
12772	ServiceErrorDetails *ServiceError `json:"serviceErrorDetails,omitempty"`
12773	// ProviderErrorDetails - The Provider error details.
12774	ProviderErrorDetails *ProviderError `json:"providerErrorDetails,omitempty"`
12775	// ErrorLevel - Error level of error.
12776	ErrorLevel *string `json:"errorLevel,omitempty"`
12777	// CreationTime - The creation time of job error.
12778	CreationTime *date.Time `json:"creationTime,omitempty"`
12779	// TaskID - The Id of the task.
12780	TaskID *string `json:"taskId,omitempty"`
12781}
12782
12783// JobProperties job custom data details.
12784type JobProperties struct {
12785	// ActivityID - The activity id.
12786	ActivityID *string `json:"activityId,omitempty"`
12787	// ScenarioName - The ScenarioName.
12788	ScenarioName *string `json:"scenarioName,omitempty"`
12789	// FriendlyName - The DisplayName.
12790	FriendlyName *string `json:"friendlyName,omitempty"`
12791	// State - The status of the Job. It is one of these values - NotStarted, InProgress, Succeeded, Failed, Cancelled, Suspended or Other.
12792	State *string `json:"state,omitempty"`
12793	// StateDescription - The description of the state of the Job. For e.g. - For Succeeded state, description can be Completed, PartiallySucceeded, CompletedWithInformation or Skipped.
12794	StateDescription *string `json:"stateDescription,omitempty"`
12795	// Tasks - The tasks.
12796	Tasks *[]ASRTask `json:"tasks,omitempty"`
12797	// Errors - The errors.
12798	Errors *[]JobErrorDetails `json:"errors,omitempty"`
12799	// StartTime - The start time.
12800	StartTime *date.Time `json:"startTime,omitempty"`
12801	// EndTime - The end time.
12802	EndTime *date.Time `json:"endTime,omitempty"`
12803	// AllowedActions - The Allowed action the job.
12804	AllowedActions *[]string `json:"allowedActions,omitempty"`
12805	// TargetObjectID - The affected Object Id.
12806	TargetObjectID *string `json:"targetObjectId,omitempty"`
12807	// TargetObjectName - The name of the affected object.
12808	TargetObjectName *string `json:"targetObjectName,omitempty"`
12809	// TargetInstanceType - The type of the affected object which is of {Microsoft.Azure.SiteRecovery.V2015_11_10.AffectedObjectType} class.
12810	TargetInstanceType *string `json:"targetInstanceType,omitempty"`
12811	// CustomDetails - The custom job details like test failover job details.
12812	CustomDetails BasicJobDetails `json:"customDetails,omitempty"`
12813}
12814
12815// UnmarshalJSON is the custom unmarshaler for JobProperties struct.
12816func (jp *JobProperties) UnmarshalJSON(body []byte) error {
12817	var m map[string]*json.RawMessage
12818	err := json.Unmarshal(body, &m)
12819	if err != nil {
12820		return err
12821	}
12822	for k, v := range m {
12823		switch k {
12824		case "activityId":
12825			if v != nil {
12826				var activityID string
12827				err = json.Unmarshal(*v, &activityID)
12828				if err != nil {
12829					return err
12830				}
12831				jp.ActivityID = &activityID
12832			}
12833		case "scenarioName":
12834			if v != nil {
12835				var scenarioName string
12836				err = json.Unmarshal(*v, &scenarioName)
12837				if err != nil {
12838					return err
12839				}
12840				jp.ScenarioName = &scenarioName
12841			}
12842		case "friendlyName":
12843			if v != nil {
12844				var friendlyName string
12845				err = json.Unmarshal(*v, &friendlyName)
12846				if err != nil {
12847					return err
12848				}
12849				jp.FriendlyName = &friendlyName
12850			}
12851		case "state":
12852			if v != nil {
12853				var state string
12854				err = json.Unmarshal(*v, &state)
12855				if err != nil {
12856					return err
12857				}
12858				jp.State = &state
12859			}
12860		case "stateDescription":
12861			if v != nil {
12862				var stateDescription string
12863				err = json.Unmarshal(*v, &stateDescription)
12864				if err != nil {
12865					return err
12866				}
12867				jp.StateDescription = &stateDescription
12868			}
12869		case "tasks":
12870			if v != nil {
12871				var tasks []ASRTask
12872				err = json.Unmarshal(*v, &tasks)
12873				if err != nil {
12874					return err
12875				}
12876				jp.Tasks = &tasks
12877			}
12878		case "errors":
12879			if v != nil {
12880				var errorsVar []JobErrorDetails
12881				err = json.Unmarshal(*v, &errorsVar)
12882				if err != nil {
12883					return err
12884				}
12885				jp.Errors = &errorsVar
12886			}
12887		case "startTime":
12888			if v != nil {
12889				var startTime date.Time
12890				err = json.Unmarshal(*v, &startTime)
12891				if err != nil {
12892					return err
12893				}
12894				jp.StartTime = &startTime
12895			}
12896		case "endTime":
12897			if v != nil {
12898				var endTime date.Time
12899				err = json.Unmarshal(*v, &endTime)
12900				if err != nil {
12901					return err
12902				}
12903				jp.EndTime = &endTime
12904			}
12905		case "allowedActions":
12906			if v != nil {
12907				var allowedActions []string
12908				err = json.Unmarshal(*v, &allowedActions)
12909				if err != nil {
12910					return err
12911				}
12912				jp.AllowedActions = &allowedActions
12913			}
12914		case "targetObjectId":
12915			if v != nil {
12916				var targetObjectID string
12917				err = json.Unmarshal(*v, &targetObjectID)
12918				if err != nil {
12919					return err
12920				}
12921				jp.TargetObjectID = &targetObjectID
12922			}
12923		case "targetObjectName":
12924			if v != nil {
12925				var targetObjectName string
12926				err = json.Unmarshal(*v, &targetObjectName)
12927				if err != nil {
12928					return err
12929				}
12930				jp.TargetObjectName = &targetObjectName
12931			}
12932		case "targetInstanceType":
12933			if v != nil {
12934				var targetInstanceType string
12935				err = json.Unmarshal(*v, &targetInstanceType)
12936				if err != nil {
12937					return err
12938				}
12939				jp.TargetInstanceType = &targetInstanceType
12940			}
12941		case "customDetails":
12942			if v != nil {
12943				customDetails, err := unmarshalBasicJobDetails(*v)
12944				if err != nil {
12945					return err
12946				}
12947				jp.CustomDetails = customDetails
12948			}
12949		}
12950	}
12951
12952	return nil
12953}
12954
12955// JobQueryParameter query parameter to enumerate jobs.
12956type JobQueryParameter struct {
12957	// StartTime - Date time to get jobs from.
12958	StartTime *string `json:"startTime,omitempty"`
12959	// EndTime - Date time to get jobs up to.
12960	EndTime *string `json:"endTime,omitempty"`
12961	// FabricID - The Id of the fabric to search jobs under.
12962	FabricID *string `json:"fabricId,omitempty"`
12963	// AffectedObjectTypes - The type of objects.
12964	AffectedObjectTypes *string `json:"affectedObjectTypes,omitempty"`
12965	// JobStatus - The states of the job to be filtered can be in.
12966	JobStatus *string `json:"jobStatus,omitempty"`
12967}
12968
12969// JobStatusEventDetails model class for event details of a job status event.
12970type JobStatusEventDetails struct {
12971	// JobID - Job arm id for the event.
12972	JobID *string `json:"jobId,omitempty"`
12973	// JobFriendlyName - JobName for the Event.
12974	JobFriendlyName *string `json:"jobFriendlyName,omitempty"`
12975	// JobStatus - JobStatus for the Event.
12976	JobStatus *string `json:"jobStatus,omitempty"`
12977	// AffectedObjectType - AffectedObjectType for the event.
12978	AffectedObjectType *string `json:"affectedObjectType,omitempty"`
12979	// InstanceType - Possible values include: 'InstanceTypeEventSpecificDetails', 'InstanceTypeJobStatus'
12980	InstanceType InstanceTypeBasicEventSpecificDetails `json:"instanceType,omitempty"`
12981}
12982
12983// MarshalJSON is the custom marshaler for JobStatusEventDetails.
12984func (jsed JobStatusEventDetails) MarshalJSON() ([]byte, error) {
12985	jsed.InstanceType = InstanceTypeJobStatus
12986	objectMap := make(map[string]interface{})
12987	if jsed.JobID != nil {
12988		objectMap["jobId"] = jsed.JobID
12989	}
12990	if jsed.JobFriendlyName != nil {
12991		objectMap["jobFriendlyName"] = jsed.JobFriendlyName
12992	}
12993	if jsed.JobStatus != nil {
12994		objectMap["jobStatus"] = jsed.JobStatus
12995	}
12996	if jsed.AffectedObjectType != nil {
12997		objectMap["affectedObjectType"] = jsed.AffectedObjectType
12998	}
12999	if jsed.InstanceType != "" {
13000		objectMap["instanceType"] = jsed.InstanceType
13001	}
13002	return json.Marshal(objectMap)
13003}
13004
13005// AsJobStatusEventDetails is the BasicEventSpecificDetails implementation for JobStatusEventDetails.
13006func (jsed JobStatusEventDetails) AsJobStatusEventDetails() (*JobStatusEventDetails, bool) {
13007	return &jsed, true
13008}
13009
13010// AsEventSpecificDetails is the BasicEventSpecificDetails implementation for JobStatusEventDetails.
13011func (jsed JobStatusEventDetails) AsEventSpecificDetails() (*EventSpecificDetails, bool) {
13012	return nil, false
13013}
13014
13015// AsBasicEventSpecificDetails is the BasicEventSpecificDetails implementation for JobStatusEventDetails.
13016func (jsed JobStatusEventDetails) AsBasicEventSpecificDetails() (BasicEventSpecificDetails, bool) {
13017	return &jsed, true
13018}
13019
13020// JobTaskDetails this class represents a task which is actually a workflow so that one can navigate to its
13021// individual drill down.
13022type JobTaskDetails struct {
13023	// JobTask - The job entity.
13024	JobTask *JobEntity `json:"jobTask,omitempty"`
13025	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
13026	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
13027}
13028
13029// MarshalJSON is the custom marshaler for JobTaskDetails.
13030func (jtd JobTaskDetails) MarshalJSON() ([]byte, error) {
13031	jtd.InstanceType = InstanceTypeJobTaskDetails
13032	objectMap := make(map[string]interface{})
13033	if jtd.JobTask != nil {
13034		objectMap["jobTask"] = jtd.JobTask
13035	}
13036	if jtd.InstanceType != "" {
13037		objectMap["instanceType"] = jtd.InstanceType
13038	}
13039	return json.Marshal(objectMap)
13040}
13041
13042// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13043func (jtd JobTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
13044	return nil, false
13045}
13046
13047// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13048func (jtd JobTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
13049	return nil, false
13050}
13051
13052// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13053func (jtd JobTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
13054	return nil, false
13055}
13056
13057// AsJobTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13058func (jtd JobTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
13059	return &jtd, true
13060}
13061
13062// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13063func (jtd JobTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
13064	return nil, false
13065}
13066
13067// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13068func (jtd JobTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
13069	return nil, false
13070}
13071
13072// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13073func (jtd JobTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
13074	return nil, false
13075}
13076
13077// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13078func (jtd JobTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
13079	return nil, false
13080}
13081
13082// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13083func (jtd JobTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
13084	return nil, false
13085}
13086
13087// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for JobTaskDetails.
13088func (jtd JobTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
13089	return &jtd, true
13090}
13091
13092// KeyEncryptionKeyInfo key Encryption Key (KEK) information.
13093type KeyEncryptionKeyInfo struct {
13094	// KeyIdentifier - The key URL / identifier.
13095	KeyIdentifier *string `json:"keyIdentifier,omitempty"`
13096	// KeyVaultResourceArmID - The KeyVault resource ARM Id for key.
13097	KeyVaultResourceArmID *string `json:"keyVaultResourceArmId,omitempty"`
13098}
13099
13100// LogicalNetwork logical network data model.
13101type LogicalNetwork struct {
13102	autorest.Response `json:"-"`
13103	// Properties - The Logical Network Properties.
13104	Properties *LogicalNetworkProperties `json:"properties,omitempty"`
13105	// ID - READ-ONLY; Resource Id
13106	ID *string `json:"id,omitempty"`
13107	// Name - READ-ONLY; Resource Name
13108	Name *string `json:"name,omitempty"`
13109	// Type - READ-ONLY; Resource Type
13110	Type *string `json:"type,omitempty"`
13111	// Location - Resource Location
13112	Location *string `json:"location,omitempty"`
13113}
13114
13115// MarshalJSON is the custom marshaler for LogicalNetwork.
13116func (ln LogicalNetwork) MarshalJSON() ([]byte, error) {
13117	objectMap := make(map[string]interface{})
13118	if ln.Properties != nil {
13119		objectMap["properties"] = ln.Properties
13120	}
13121	if ln.Location != nil {
13122		objectMap["location"] = ln.Location
13123	}
13124	return json.Marshal(objectMap)
13125}
13126
13127// LogicalNetworkCollection list of logical networks.
13128type LogicalNetworkCollection struct {
13129	autorest.Response `json:"-"`
13130	// Value - The Logical Networks list details.
13131	Value *[]LogicalNetwork `json:"value,omitempty"`
13132	// NextLink - The value of next link.
13133	NextLink *string `json:"nextLink,omitempty"`
13134}
13135
13136// LogicalNetworkCollectionIterator provides access to a complete listing of LogicalNetwork values.
13137type LogicalNetworkCollectionIterator struct {
13138	i    int
13139	page LogicalNetworkCollectionPage
13140}
13141
13142// NextWithContext advances to the next value.  If there was an error making
13143// the request the iterator does not advance and the error is returned.
13144func (iter *LogicalNetworkCollectionIterator) NextWithContext(ctx context.Context) (err error) {
13145	if tracing.IsEnabled() {
13146		ctx = tracing.StartSpan(ctx, fqdn+"/LogicalNetworkCollectionIterator.NextWithContext")
13147		defer func() {
13148			sc := -1
13149			if iter.Response().Response.Response != nil {
13150				sc = iter.Response().Response.Response.StatusCode
13151			}
13152			tracing.EndSpan(ctx, sc, err)
13153		}()
13154	}
13155	iter.i++
13156	if iter.i < len(iter.page.Values()) {
13157		return nil
13158	}
13159	err = iter.page.NextWithContext(ctx)
13160	if err != nil {
13161		iter.i--
13162		return err
13163	}
13164	iter.i = 0
13165	return nil
13166}
13167
13168// Next advances to the next value.  If there was an error making
13169// the request the iterator does not advance and the error is returned.
13170// Deprecated: Use NextWithContext() instead.
13171func (iter *LogicalNetworkCollectionIterator) Next() error {
13172	return iter.NextWithContext(context.Background())
13173}
13174
13175// NotDone returns true if the enumeration should be started or is not yet complete.
13176func (iter LogicalNetworkCollectionIterator) NotDone() bool {
13177	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13178}
13179
13180// Response returns the raw server response from the last page request.
13181func (iter LogicalNetworkCollectionIterator) Response() LogicalNetworkCollection {
13182	return iter.page.Response()
13183}
13184
13185// Value returns the current value or a zero-initialized value if the
13186// iterator has advanced beyond the end of the collection.
13187func (iter LogicalNetworkCollectionIterator) Value() LogicalNetwork {
13188	if !iter.page.NotDone() {
13189		return LogicalNetwork{}
13190	}
13191	return iter.page.Values()[iter.i]
13192}
13193
13194// Creates a new instance of the LogicalNetworkCollectionIterator type.
13195func NewLogicalNetworkCollectionIterator(page LogicalNetworkCollectionPage) LogicalNetworkCollectionIterator {
13196	return LogicalNetworkCollectionIterator{page: page}
13197}
13198
13199// IsEmpty returns true if the ListResult contains no values.
13200func (lnc LogicalNetworkCollection) IsEmpty() bool {
13201	return lnc.Value == nil || len(*lnc.Value) == 0
13202}
13203
13204// hasNextLink returns true if the NextLink is not empty.
13205func (lnc LogicalNetworkCollection) hasNextLink() bool {
13206	return lnc.NextLink != nil && len(*lnc.NextLink) != 0
13207}
13208
13209// logicalNetworkCollectionPreparer prepares a request to retrieve the next set of results.
13210// It returns nil if no more results exist.
13211func (lnc LogicalNetworkCollection) logicalNetworkCollectionPreparer(ctx context.Context) (*http.Request, error) {
13212	if !lnc.hasNextLink() {
13213		return nil, nil
13214	}
13215	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13216		autorest.AsJSON(),
13217		autorest.AsGet(),
13218		autorest.WithBaseURL(to.String(lnc.NextLink)))
13219}
13220
13221// LogicalNetworkCollectionPage contains a page of LogicalNetwork values.
13222type LogicalNetworkCollectionPage struct {
13223	fn  func(context.Context, LogicalNetworkCollection) (LogicalNetworkCollection, error)
13224	lnc LogicalNetworkCollection
13225}
13226
13227// NextWithContext advances to the next page of values.  If there was an error making
13228// the request the page does not advance and the error is returned.
13229func (page *LogicalNetworkCollectionPage) NextWithContext(ctx context.Context) (err error) {
13230	if tracing.IsEnabled() {
13231		ctx = tracing.StartSpan(ctx, fqdn+"/LogicalNetworkCollectionPage.NextWithContext")
13232		defer func() {
13233			sc := -1
13234			if page.Response().Response.Response != nil {
13235				sc = page.Response().Response.Response.StatusCode
13236			}
13237			tracing.EndSpan(ctx, sc, err)
13238		}()
13239	}
13240	for {
13241		next, err := page.fn(ctx, page.lnc)
13242		if err != nil {
13243			return err
13244		}
13245		page.lnc = next
13246		if !next.hasNextLink() || !next.IsEmpty() {
13247			break
13248		}
13249	}
13250	return nil
13251}
13252
13253// Next advances to the next page of values.  If there was an error making
13254// the request the page does not advance and the error is returned.
13255// Deprecated: Use NextWithContext() instead.
13256func (page *LogicalNetworkCollectionPage) Next() error {
13257	return page.NextWithContext(context.Background())
13258}
13259
13260// NotDone returns true if the page enumeration should be started or is not yet complete.
13261func (page LogicalNetworkCollectionPage) NotDone() bool {
13262	return !page.lnc.IsEmpty()
13263}
13264
13265// Response returns the raw server response from the last page request.
13266func (page LogicalNetworkCollectionPage) Response() LogicalNetworkCollection {
13267	return page.lnc
13268}
13269
13270// Values returns the slice of values for the current page or nil if there are no values.
13271func (page LogicalNetworkCollectionPage) Values() []LogicalNetwork {
13272	if page.lnc.IsEmpty() {
13273		return nil
13274	}
13275	return *page.lnc.Value
13276}
13277
13278// Creates a new instance of the LogicalNetworkCollectionPage type.
13279func NewLogicalNetworkCollectionPage(cur LogicalNetworkCollection, getNextPage func(context.Context, LogicalNetworkCollection) (LogicalNetworkCollection, error)) LogicalNetworkCollectionPage {
13280	return LogicalNetworkCollectionPage{
13281		fn:  getNextPage,
13282		lnc: cur,
13283	}
13284}
13285
13286// LogicalNetworkProperties logical Network Properties.
13287type LogicalNetworkProperties struct {
13288	// FriendlyName - The Friendly Name.
13289	FriendlyName *string `json:"friendlyName,omitempty"`
13290	// NetworkVirtualizationStatus - A value indicating whether Network Virtualization is enabled for the logical network.
13291	NetworkVirtualizationStatus *string `json:"networkVirtualizationStatus,omitempty"`
13292	// LogicalNetworkUsage - A value indicating whether logical network is used as private test network by test failover.
13293	LogicalNetworkUsage *string `json:"logicalNetworkUsage,omitempty"`
13294	// LogicalNetworkDefinitionsStatus - A value indicating whether logical network definitions are isolated.
13295	LogicalNetworkDefinitionsStatus *string `json:"logicalNetworkDefinitionsStatus,omitempty"`
13296}
13297
13298// ManualActionTaskDetails this class represents the manual action task details.
13299type ManualActionTaskDetails struct {
13300	// Name - The name.
13301	Name *string `json:"name,omitempty"`
13302	// Instructions - The instructions.
13303	Instructions *string `json:"instructions,omitempty"`
13304	// Observation - The observation.
13305	Observation *string `json:"observation,omitempty"`
13306	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
13307	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
13308}
13309
13310// MarshalJSON is the custom marshaler for ManualActionTaskDetails.
13311func (matd ManualActionTaskDetails) MarshalJSON() ([]byte, error) {
13312	matd.InstanceType = InstanceTypeManualActionTaskDetails
13313	objectMap := make(map[string]interface{})
13314	if matd.Name != nil {
13315		objectMap["name"] = matd.Name
13316	}
13317	if matd.Instructions != nil {
13318		objectMap["instructions"] = matd.Instructions
13319	}
13320	if matd.Observation != nil {
13321		objectMap["observation"] = matd.Observation
13322	}
13323	if matd.InstanceType != "" {
13324		objectMap["instanceType"] = matd.InstanceType
13325	}
13326	return json.Marshal(objectMap)
13327}
13328
13329// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13330func (matd ManualActionTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
13331	return nil, false
13332}
13333
13334// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13335func (matd ManualActionTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
13336	return nil, false
13337}
13338
13339// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13340func (matd ManualActionTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
13341	return nil, false
13342}
13343
13344// AsJobTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13345func (matd ManualActionTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
13346	return nil, false
13347}
13348
13349// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13350func (matd ManualActionTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
13351	return &matd, true
13352}
13353
13354// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13355func (matd ManualActionTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
13356	return nil, false
13357}
13358
13359// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13360func (matd ManualActionTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
13361	return nil, false
13362}
13363
13364// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13365func (matd ManualActionTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
13366	return nil, false
13367}
13368
13369// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13370func (matd ManualActionTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
13371	return nil, false
13372}
13373
13374// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for ManualActionTaskDetails.
13375func (matd ManualActionTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
13376	return &matd, true
13377}
13378
13379// MasterTargetServer details of a Master Target Server.
13380type MasterTargetServer struct {
13381	// ID - The server Id.
13382	ID *string `json:"id,omitempty"`
13383	// IPAddress - The IP address of the server.
13384	IPAddress *string `json:"ipAddress,omitempty"`
13385	// Name - The server name.
13386	Name *string `json:"name,omitempty"`
13387	// OsType - The OS type of the server.
13388	OsType *string `json:"osType,omitempty"`
13389	// AgentVersion - The version of the scout component on the server.
13390	AgentVersion *string `json:"agentVersion,omitempty"`
13391	// LastHeartbeat - The last heartbeat received from the server.
13392	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
13393	// VersionStatus - Version status
13394	VersionStatus *string `json:"versionStatus,omitempty"`
13395	// RetentionVolumes - The retention volumes of Master target Server.
13396	RetentionVolumes *[]RetentionVolume `json:"retentionVolumes,omitempty"`
13397	// DataStores - The list of data stores in the fabric.
13398	DataStores *[]DataStore `json:"dataStores,omitempty"`
13399	// ValidationErrors - Validation errors.
13400	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
13401	// HealthErrors - Health errors.
13402	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
13403	// DiskCount - Disk count of the master target.
13404	DiskCount *int32 `json:"diskCount,omitempty"`
13405	// OsVersion - OS Version of the master target.
13406	OsVersion *string `json:"osVersion,omitempty"`
13407	// AgentExpiryDate - Agent expiry date.
13408	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
13409	// MarsAgentVersion - MARS agent version.
13410	MarsAgentVersion *string `json:"marsAgentVersion,omitempty"`
13411	// MarsAgentExpiryDate - MARS agent expiry date.
13412	MarsAgentExpiryDate *date.Time `json:"marsAgentExpiryDate,omitempty"`
13413	// AgentVersionDetails - Agent version details.
13414	AgentVersionDetails *VersionDetails `json:"agentVersionDetails,omitempty"`
13415	// MarsAgentVersionDetails - Mars agent version details.
13416	MarsAgentVersionDetails *VersionDetails `json:"marsAgentVersionDetails,omitempty"`
13417}
13418
13419// MigrateInput input for migrate.
13420type MigrateInput struct {
13421	// Properties - Migrate input properties.
13422	Properties *MigrateInputProperties `json:"properties,omitempty"`
13423}
13424
13425// MigrateInputProperties migrate input properties.
13426type MigrateInputProperties struct {
13427	// ProviderSpecificDetails - The provider specific details.
13428	ProviderSpecificDetails BasicMigrateProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
13429}
13430
13431// UnmarshalJSON is the custom unmarshaler for MigrateInputProperties struct.
13432func (mip *MigrateInputProperties) UnmarshalJSON(body []byte) error {
13433	var m map[string]*json.RawMessage
13434	err := json.Unmarshal(body, &m)
13435	if err != nil {
13436		return err
13437	}
13438	for k, v := range m {
13439		switch k {
13440		case "providerSpecificDetails":
13441			if v != nil {
13442				providerSpecificDetails, err := unmarshalBasicMigrateProviderSpecificInput(*v)
13443				if err != nil {
13444					return err
13445				}
13446				mip.ProviderSpecificDetails = providerSpecificDetails
13447			}
13448		}
13449	}
13450
13451	return nil
13452}
13453
13454// BasicMigrateProviderSpecificInput migrate provider specific input.
13455type BasicMigrateProviderSpecificInput interface {
13456	AsVMwareCbtMigrateInput() (*VMwareCbtMigrateInput, bool)
13457	AsMigrateProviderSpecificInput() (*MigrateProviderSpecificInput, bool)
13458}
13459
13460// MigrateProviderSpecificInput migrate provider specific input.
13461type MigrateProviderSpecificInput struct {
13462	// InstanceType - Possible values include: 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeMigrateProviderSpecificInput', 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt'
13463	InstanceType InstanceTypeBasicMigrateProviderSpecificInput `json:"instanceType,omitempty"`
13464}
13465
13466func unmarshalBasicMigrateProviderSpecificInput(body []byte) (BasicMigrateProviderSpecificInput, error) {
13467	var m map[string]interface{}
13468	err := json.Unmarshal(body, &m)
13469	if err != nil {
13470		return nil, err
13471	}
13472
13473	switch m["instanceType"] {
13474	case string(InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt):
13475		var vmcmi VMwareCbtMigrateInput
13476		err := json.Unmarshal(body, &vmcmi)
13477		return vmcmi, err
13478	default:
13479		var mpsi MigrateProviderSpecificInput
13480		err := json.Unmarshal(body, &mpsi)
13481		return mpsi, err
13482	}
13483}
13484func unmarshalBasicMigrateProviderSpecificInputArray(body []byte) ([]BasicMigrateProviderSpecificInput, error) {
13485	var rawMessages []*json.RawMessage
13486	err := json.Unmarshal(body, &rawMessages)
13487	if err != nil {
13488		return nil, err
13489	}
13490
13491	mpsiArray := make([]BasicMigrateProviderSpecificInput, len(rawMessages))
13492
13493	for index, rawMessage := range rawMessages {
13494		mpsi, err := unmarshalBasicMigrateProviderSpecificInput(*rawMessage)
13495		if err != nil {
13496			return nil, err
13497		}
13498		mpsiArray[index] = mpsi
13499	}
13500	return mpsiArray, nil
13501}
13502
13503// MarshalJSON is the custom marshaler for MigrateProviderSpecificInput.
13504func (mpsi MigrateProviderSpecificInput) MarshalJSON() ([]byte, error) {
13505	mpsi.InstanceType = InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeMigrateProviderSpecificInput
13506	objectMap := make(map[string]interface{})
13507	if mpsi.InstanceType != "" {
13508		objectMap["instanceType"] = mpsi.InstanceType
13509	}
13510	return json.Marshal(objectMap)
13511}
13512
13513// AsVMwareCbtMigrateInput is the BasicMigrateProviderSpecificInput implementation for MigrateProviderSpecificInput.
13514func (mpsi MigrateProviderSpecificInput) AsVMwareCbtMigrateInput() (*VMwareCbtMigrateInput, bool) {
13515	return nil, false
13516}
13517
13518// AsMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for MigrateProviderSpecificInput.
13519func (mpsi MigrateProviderSpecificInput) AsMigrateProviderSpecificInput() (*MigrateProviderSpecificInput, bool) {
13520	return &mpsi, true
13521}
13522
13523// AsBasicMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for MigrateProviderSpecificInput.
13524func (mpsi MigrateProviderSpecificInput) AsBasicMigrateProviderSpecificInput() (BasicMigrateProviderSpecificInput, bool) {
13525	return &mpsi, true
13526}
13527
13528// MigrationItem migration item.
13529type MigrationItem struct {
13530	autorest.Response `json:"-"`
13531	// Properties - The migration item properties.
13532	Properties *MigrationItemProperties `json:"properties,omitempty"`
13533	// ID - READ-ONLY; Resource Id
13534	ID *string `json:"id,omitempty"`
13535	// Name - READ-ONLY; Resource Name
13536	Name *string `json:"name,omitempty"`
13537	// Type - READ-ONLY; Resource Type
13538	Type *string `json:"type,omitempty"`
13539	// Location - Resource Location
13540	Location *string `json:"location,omitempty"`
13541}
13542
13543// MarshalJSON is the custom marshaler for MigrationItem.
13544func (mi MigrationItem) MarshalJSON() ([]byte, error) {
13545	objectMap := make(map[string]interface{})
13546	if mi.Properties != nil {
13547		objectMap["properties"] = mi.Properties
13548	}
13549	if mi.Location != nil {
13550		objectMap["location"] = mi.Location
13551	}
13552	return json.Marshal(objectMap)
13553}
13554
13555// MigrationItemCollection migration item collection.
13556type MigrationItemCollection struct {
13557	autorest.Response `json:"-"`
13558	// Value - The list of migration items.
13559	Value *[]MigrationItem `json:"value,omitempty"`
13560	// NextLink - The value of next link.
13561	NextLink *string `json:"nextLink,omitempty"`
13562}
13563
13564// MigrationItemCollectionIterator provides access to a complete listing of MigrationItem values.
13565type MigrationItemCollectionIterator struct {
13566	i    int
13567	page MigrationItemCollectionPage
13568}
13569
13570// NextWithContext advances to the next value.  If there was an error making
13571// the request the iterator does not advance and the error is returned.
13572func (iter *MigrationItemCollectionIterator) NextWithContext(ctx context.Context) (err error) {
13573	if tracing.IsEnabled() {
13574		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationItemCollectionIterator.NextWithContext")
13575		defer func() {
13576			sc := -1
13577			if iter.Response().Response.Response != nil {
13578				sc = iter.Response().Response.Response.StatusCode
13579			}
13580			tracing.EndSpan(ctx, sc, err)
13581		}()
13582	}
13583	iter.i++
13584	if iter.i < len(iter.page.Values()) {
13585		return nil
13586	}
13587	err = iter.page.NextWithContext(ctx)
13588	if err != nil {
13589		iter.i--
13590		return err
13591	}
13592	iter.i = 0
13593	return nil
13594}
13595
13596// Next advances to the next value.  If there was an error making
13597// the request the iterator does not advance and the error is returned.
13598// Deprecated: Use NextWithContext() instead.
13599func (iter *MigrationItemCollectionIterator) Next() error {
13600	return iter.NextWithContext(context.Background())
13601}
13602
13603// NotDone returns true if the enumeration should be started or is not yet complete.
13604func (iter MigrationItemCollectionIterator) NotDone() bool {
13605	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13606}
13607
13608// Response returns the raw server response from the last page request.
13609func (iter MigrationItemCollectionIterator) Response() MigrationItemCollection {
13610	return iter.page.Response()
13611}
13612
13613// Value returns the current value or a zero-initialized value if the
13614// iterator has advanced beyond the end of the collection.
13615func (iter MigrationItemCollectionIterator) Value() MigrationItem {
13616	if !iter.page.NotDone() {
13617		return MigrationItem{}
13618	}
13619	return iter.page.Values()[iter.i]
13620}
13621
13622// Creates a new instance of the MigrationItemCollectionIterator type.
13623func NewMigrationItemCollectionIterator(page MigrationItemCollectionPage) MigrationItemCollectionIterator {
13624	return MigrationItemCollectionIterator{page: page}
13625}
13626
13627// IsEmpty returns true if the ListResult contains no values.
13628func (mic MigrationItemCollection) IsEmpty() bool {
13629	return mic.Value == nil || len(*mic.Value) == 0
13630}
13631
13632// hasNextLink returns true if the NextLink is not empty.
13633func (mic MigrationItemCollection) hasNextLink() bool {
13634	return mic.NextLink != nil && len(*mic.NextLink) != 0
13635}
13636
13637// migrationItemCollectionPreparer prepares a request to retrieve the next set of results.
13638// It returns nil if no more results exist.
13639func (mic MigrationItemCollection) migrationItemCollectionPreparer(ctx context.Context) (*http.Request, error) {
13640	if !mic.hasNextLink() {
13641		return nil, nil
13642	}
13643	return autorest.Prepare((&http.Request{}).WithContext(ctx),
13644		autorest.AsJSON(),
13645		autorest.AsGet(),
13646		autorest.WithBaseURL(to.String(mic.NextLink)))
13647}
13648
13649// MigrationItemCollectionPage contains a page of MigrationItem values.
13650type MigrationItemCollectionPage struct {
13651	fn  func(context.Context, MigrationItemCollection) (MigrationItemCollection, error)
13652	mic MigrationItemCollection
13653}
13654
13655// NextWithContext advances to the next page of values.  If there was an error making
13656// the request the page does not advance and the error is returned.
13657func (page *MigrationItemCollectionPage) NextWithContext(ctx context.Context) (err error) {
13658	if tracing.IsEnabled() {
13659		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationItemCollectionPage.NextWithContext")
13660		defer func() {
13661			sc := -1
13662			if page.Response().Response.Response != nil {
13663				sc = page.Response().Response.Response.StatusCode
13664			}
13665			tracing.EndSpan(ctx, sc, err)
13666		}()
13667	}
13668	for {
13669		next, err := page.fn(ctx, page.mic)
13670		if err != nil {
13671			return err
13672		}
13673		page.mic = next
13674		if !next.hasNextLink() || !next.IsEmpty() {
13675			break
13676		}
13677	}
13678	return nil
13679}
13680
13681// Next advances to the next page of values.  If there was an error making
13682// the request the page does not advance and the error is returned.
13683// Deprecated: Use NextWithContext() instead.
13684func (page *MigrationItemCollectionPage) Next() error {
13685	return page.NextWithContext(context.Background())
13686}
13687
13688// NotDone returns true if the page enumeration should be started or is not yet complete.
13689func (page MigrationItemCollectionPage) NotDone() bool {
13690	return !page.mic.IsEmpty()
13691}
13692
13693// Response returns the raw server response from the last page request.
13694func (page MigrationItemCollectionPage) Response() MigrationItemCollection {
13695	return page.mic
13696}
13697
13698// Values returns the slice of values for the current page or nil if there are no values.
13699func (page MigrationItemCollectionPage) Values() []MigrationItem {
13700	if page.mic.IsEmpty() {
13701		return nil
13702	}
13703	return *page.mic.Value
13704}
13705
13706// Creates a new instance of the MigrationItemCollectionPage type.
13707func NewMigrationItemCollectionPage(cur MigrationItemCollection, getNextPage func(context.Context, MigrationItemCollection) (MigrationItemCollection, error)) MigrationItemCollectionPage {
13708	return MigrationItemCollectionPage{
13709		fn:  getNextPage,
13710		mic: cur,
13711	}
13712}
13713
13714// MigrationItemProperties migration item properties.
13715type MigrationItemProperties struct {
13716	// MachineName - READ-ONLY; The on-premise virtual machine name.
13717	MachineName *string `json:"machineName,omitempty"`
13718	// PolicyID - READ-ONLY; The ARM Id of policy governing this item.
13719	PolicyID *string `json:"policyId,omitempty"`
13720	// PolicyFriendlyName - READ-ONLY; The name of policy governing this item.
13721	PolicyFriendlyName *string `json:"policyFriendlyName,omitempty"`
13722	// RecoveryServicesProviderID - READ-ONLY; The recovery services provider ARM Id.
13723	RecoveryServicesProviderID *string `json:"recoveryServicesProviderId,omitempty"`
13724	// MigrationState - READ-ONLY; The migration status. Possible values include: 'MigrationStateNone', 'MigrationStateEnableMigrationInProgress', 'MigrationStateEnableMigrationFailed', 'MigrationStateDisableMigrationInProgress', 'MigrationStateDisableMigrationFailed', 'MigrationStateInitialSeedingInProgress', 'MigrationStateInitialSeedingFailed', 'MigrationStateReplicating', 'MigrationStateMigrationInProgress', 'MigrationStateMigrationSucceeded', 'MigrationStateMigrationFailed'
13725	MigrationState MigrationState `json:"migrationState,omitempty"`
13726	// MigrationStateDescription - READ-ONLY; The migration state description.
13727	MigrationStateDescription *string `json:"migrationStateDescription,omitempty"`
13728	// TestMigrateState - READ-ONLY; The test migrate state. Possible values include: 'TestMigrationStateNone', 'TestMigrationStateTestMigrationInProgress', 'TestMigrationStateTestMigrationSucceeded', 'TestMigrationStateTestMigrationFailed', 'TestMigrationStateTestMigrationCleanupInProgress'
13729	TestMigrateState TestMigrationState `json:"testMigrateState,omitempty"`
13730	// TestMigrateStateDescription - READ-ONLY; The test migrate state description.
13731	TestMigrateStateDescription *string `json:"testMigrateStateDescription,omitempty"`
13732	// Health - READ-ONLY; The consolidated health.
13733	Health *string `json:"health,omitempty"`
13734	// HealthErrors - READ-ONLY; The list of health errors.
13735	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
13736	// AllowedOperations - READ-ONLY; The allowed operations on the migration item, based on the current migration state of the item.
13737	AllowedOperations *[]MigrationItemOperation `json:"allowedOperations,omitempty"`
13738	// CurrentJob - READ-ONLY; The current job details.
13739	CurrentJob *CurrentJobDetails `json:"currentJob,omitempty"`
13740	// ProviderSpecificDetails - The migration provider custom settings.
13741	ProviderSpecificDetails BasicMigrationProviderSpecificSettings `json:"providerSpecificDetails,omitempty"`
13742}
13743
13744// MarshalJSON is the custom marshaler for MigrationItemProperties.
13745func (mip MigrationItemProperties) MarshalJSON() ([]byte, error) {
13746	objectMap := make(map[string]interface{})
13747	objectMap["providerSpecificDetails"] = mip.ProviderSpecificDetails
13748	return json.Marshal(objectMap)
13749}
13750
13751// UnmarshalJSON is the custom unmarshaler for MigrationItemProperties struct.
13752func (mip *MigrationItemProperties) UnmarshalJSON(body []byte) error {
13753	var m map[string]*json.RawMessage
13754	err := json.Unmarshal(body, &m)
13755	if err != nil {
13756		return err
13757	}
13758	for k, v := range m {
13759		switch k {
13760		case "machineName":
13761			if v != nil {
13762				var machineName string
13763				err = json.Unmarshal(*v, &machineName)
13764				if err != nil {
13765					return err
13766				}
13767				mip.MachineName = &machineName
13768			}
13769		case "policyId":
13770			if v != nil {
13771				var policyID string
13772				err = json.Unmarshal(*v, &policyID)
13773				if err != nil {
13774					return err
13775				}
13776				mip.PolicyID = &policyID
13777			}
13778		case "policyFriendlyName":
13779			if v != nil {
13780				var policyFriendlyName string
13781				err = json.Unmarshal(*v, &policyFriendlyName)
13782				if err != nil {
13783					return err
13784				}
13785				mip.PolicyFriendlyName = &policyFriendlyName
13786			}
13787		case "recoveryServicesProviderId":
13788			if v != nil {
13789				var recoveryServicesProviderID string
13790				err = json.Unmarshal(*v, &recoveryServicesProviderID)
13791				if err != nil {
13792					return err
13793				}
13794				mip.RecoveryServicesProviderID = &recoveryServicesProviderID
13795			}
13796		case "migrationState":
13797			if v != nil {
13798				var migrationState MigrationState
13799				err = json.Unmarshal(*v, &migrationState)
13800				if err != nil {
13801					return err
13802				}
13803				mip.MigrationState = migrationState
13804			}
13805		case "migrationStateDescription":
13806			if v != nil {
13807				var migrationStateDescription string
13808				err = json.Unmarshal(*v, &migrationStateDescription)
13809				if err != nil {
13810					return err
13811				}
13812				mip.MigrationStateDescription = &migrationStateDescription
13813			}
13814		case "testMigrateState":
13815			if v != nil {
13816				var testMigrateState TestMigrationState
13817				err = json.Unmarshal(*v, &testMigrateState)
13818				if err != nil {
13819					return err
13820				}
13821				mip.TestMigrateState = testMigrateState
13822			}
13823		case "testMigrateStateDescription":
13824			if v != nil {
13825				var testMigrateStateDescription string
13826				err = json.Unmarshal(*v, &testMigrateStateDescription)
13827				if err != nil {
13828					return err
13829				}
13830				mip.TestMigrateStateDescription = &testMigrateStateDescription
13831			}
13832		case "health":
13833			if v != nil {
13834				var health string
13835				err = json.Unmarshal(*v, &health)
13836				if err != nil {
13837					return err
13838				}
13839				mip.Health = &health
13840			}
13841		case "healthErrors":
13842			if v != nil {
13843				var healthErrors []HealthError
13844				err = json.Unmarshal(*v, &healthErrors)
13845				if err != nil {
13846					return err
13847				}
13848				mip.HealthErrors = &healthErrors
13849			}
13850		case "allowedOperations":
13851			if v != nil {
13852				var allowedOperations []MigrationItemOperation
13853				err = json.Unmarshal(*v, &allowedOperations)
13854				if err != nil {
13855					return err
13856				}
13857				mip.AllowedOperations = &allowedOperations
13858			}
13859		case "currentJob":
13860			if v != nil {
13861				var currentJob CurrentJobDetails
13862				err = json.Unmarshal(*v, &currentJob)
13863				if err != nil {
13864					return err
13865				}
13866				mip.CurrentJob = &currentJob
13867			}
13868		case "providerSpecificDetails":
13869			if v != nil {
13870				providerSpecificDetails, err := unmarshalBasicMigrationProviderSpecificSettings(*v)
13871				if err != nil {
13872					return err
13873				}
13874				mip.ProviderSpecificDetails = providerSpecificDetails
13875			}
13876		}
13877	}
13878
13879	return nil
13880}
13881
13882// MigrationItemsQueryParameter query parameter to enumerate migration items.
13883type MigrationItemsQueryParameter struct {
13884	// SourceFabricName - The source fabric name filter.
13885	SourceFabricName *string `json:"sourceFabricName,omitempty"`
13886	// InstanceType - The replication provider type.
13887	InstanceType *string `json:"instanceType,omitempty"`
13888}
13889
13890// BasicMigrationProviderSpecificSettings migration provider specific settings.
13891type BasicMigrationProviderSpecificSettings interface {
13892	AsVMwareCbtMigrationDetails() (*VMwareCbtMigrationDetails, bool)
13893	AsMigrationProviderSpecificSettings() (*MigrationProviderSpecificSettings, bool)
13894}
13895
13896// MigrationProviderSpecificSettings migration provider specific settings.
13897type MigrationProviderSpecificSettings struct {
13898	// InstanceType - Possible values include: 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeMigrationProviderSpecificSettings', 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt'
13899	InstanceType InstanceTypeBasicMigrationProviderSpecificSettings `json:"instanceType,omitempty"`
13900}
13901
13902func unmarshalBasicMigrationProviderSpecificSettings(body []byte) (BasicMigrationProviderSpecificSettings, error) {
13903	var m map[string]interface{}
13904	err := json.Unmarshal(body, &m)
13905	if err != nil {
13906		return nil, err
13907	}
13908
13909	switch m["instanceType"] {
13910	case string(InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt):
13911		var vmcmd VMwareCbtMigrationDetails
13912		err := json.Unmarshal(body, &vmcmd)
13913		return vmcmd, err
13914	default:
13915		var mpss MigrationProviderSpecificSettings
13916		err := json.Unmarshal(body, &mpss)
13917		return mpss, err
13918	}
13919}
13920func unmarshalBasicMigrationProviderSpecificSettingsArray(body []byte) ([]BasicMigrationProviderSpecificSettings, error) {
13921	var rawMessages []*json.RawMessage
13922	err := json.Unmarshal(body, &rawMessages)
13923	if err != nil {
13924		return nil, err
13925	}
13926
13927	mpssArray := make([]BasicMigrationProviderSpecificSettings, len(rawMessages))
13928
13929	for index, rawMessage := range rawMessages {
13930		mpss, err := unmarshalBasicMigrationProviderSpecificSettings(*rawMessage)
13931		if err != nil {
13932			return nil, err
13933		}
13934		mpssArray[index] = mpss
13935	}
13936	return mpssArray, nil
13937}
13938
13939// MarshalJSON is the custom marshaler for MigrationProviderSpecificSettings.
13940func (mpss MigrationProviderSpecificSettings) MarshalJSON() ([]byte, error) {
13941	mpss.InstanceType = InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeMigrationProviderSpecificSettings
13942	objectMap := make(map[string]interface{})
13943	if mpss.InstanceType != "" {
13944		objectMap["instanceType"] = mpss.InstanceType
13945	}
13946	return json.Marshal(objectMap)
13947}
13948
13949// AsVMwareCbtMigrationDetails is the BasicMigrationProviderSpecificSettings implementation for MigrationProviderSpecificSettings.
13950func (mpss MigrationProviderSpecificSettings) AsVMwareCbtMigrationDetails() (*VMwareCbtMigrationDetails, bool) {
13951	return nil, false
13952}
13953
13954// AsMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for MigrationProviderSpecificSettings.
13955func (mpss MigrationProviderSpecificSettings) AsMigrationProviderSpecificSettings() (*MigrationProviderSpecificSettings, bool) {
13956	return &mpss, true
13957}
13958
13959// AsBasicMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for MigrationProviderSpecificSettings.
13960func (mpss MigrationProviderSpecificSettings) AsBasicMigrationProviderSpecificSettings() (BasicMigrationProviderSpecificSettings, bool) {
13961	return &mpss, true
13962}
13963
13964// MigrationRecoveryPoint recovery point for a migration item.
13965type MigrationRecoveryPoint struct {
13966	autorest.Response `json:"-"`
13967	// Properties - Recovery point properties.
13968	Properties *MigrationRecoveryPointProperties `json:"properties,omitempty"`
13969	// ID - READ-ONLY; Resource Id
13970	ID *string `json:"id,omitempty"`
13971	// Name - READ-ONLY; Resource Name
13972	Name *string `json:"name,omitempty"`
13973	// Type - READ-ONLY; Resource Type
13974	Type *string `json:"type,omitempty"`
13975	// Location - Resource Location
13976	Location *string `json:"location,omitempty"`
13977}
13978
13979// MarshalJSON is the custom marshaler for MigrationRecoveryPoint.
13980func (mrp MigrationRecoveryPoint) MarshalJSON() ([]byte, error) {
13981	objectMap := make(map[string]interface{})
13982	if mrp.Properties != nil {
13983		objectMap["properties"] = mrp.Properties
13984	}
13985	if mrp.Location != nil {
13986		objectMap["location"] = mrp.Location
13987	}
13988	return json.Marshal(objectMap)
13989}
13990
13991// MigrationRecoveryPointCollection collection of migration recovery points.
13992type MigrationRecoveryPointCollection struct {
13993	autorest.Response `json:"-"`
13994	// Value - The migration recovery point details.
13995	Value *[]MigrationRecoveryPoint `json:"value,omitempty"`
13996	// NextLink - The value of next link.
13997	NextLink *string `json:"nextLink,omitempty"`
13998}
13999
14000// MigrationRecoveryPointCollectionIterator provides access to a complete listing of MigrationRecoveryPoint
14001// values.
14002type MigrationRecoveryPointCollectionIterator struct {
14003	i    int
14004	page MigrationRecoveryPointCollectionPage
14005}
14006
14007// NextWithContext advances to the next value.  If there was an error making
14008// the request the iterator does not advance and the error is returned.
14009func (iter *MigrationRecoveryPointCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14010	if tracing.IsEnabled() {
14011		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationRecoveryPointCollectionIterator.NextWithContext")
14012		defer func() {
14013			sc := -1
14014			if iter.Response().Response.Response != nil {
14015				sc = iter.Response().Response.Response.StatusCode
14016			}
14017			tracing.EndSpan(ctx, sc, err)
14018		}()
14019	}
14020	iter.i++
14021	if iter.i < len(iter.page.Values()) {
14022		return nil
14023	}
14024	err = iter.page.NextWithContext(ctx)
14025	if err != nil {
14026		iter.i--
14027		return err
14028	}
14029	iter.i = 0
14030	return nil
14031}
14032
14033// Next advances to the next value.  If there was an error making
14034// the request the iterator does not advance and the error is returned.
14035// Deprecated: Use NextWithContext() instead.
14036func (iter *MigrationRecoveryPointCollectionIterator) Next() error {
14037	return iter.NextWithContext(context.Background())
14038}
14039
14040// NotDone returns true if the enumeration should be started or is not yet complete.
14041func (iter MigrationRecoveryPointCollectionIterator) NotDone() bool {
14042	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14043}
14044
14045// Response returns the raw server response from the last page request.
14046func (iter MigrationRecoveryPointCollectionIterator) Response() MigrationRecoveryPointCollection {
14047	return iter.page.Response()
14048}
14049
14050// Value returns the current value or a zero-initialized value if the
14051// iterator has advanced beyond the end of the collection.
14052func (iter MigrationRecoveryPointCollectionIterator) Value() MigrationRecoveryPoint {
14053	if !iter.page.NotDone() {
14054		return MigrationRecoveryPoint{}
14055	}
14056	return iter.page.Values()[iter.i]
14057}
14058
14059// Creates a new instance of the MigrationRecoveryPointCollectionIterator type.
14060func NewMigrationRecoveryPointCollectionIterator(page MigrationRecoveryPointCollectionPage) MigrationRecoveryPointCollectionIterator {
14061	return MigrationRecoveryPointCollectionIterator{page: page}
14062}
14063
14064// IsEmpty returns true if the ListResult contains no values.
14065func (mrpc MigrationRecoveryPointCollection) IsEmpty() bool {
14066	return mrpc.Value == nil || len(*mrpc.Value) == 0
14067}
14068
14069// hasNextLink returns true if the NextLink is not empty.
14070func (mrpc MigrationRecoveryPointCollection) hasNextLink() bool {
14071	return mrpc.NextLink != nil && len(*mrpc.NextLink) != 0
14072}
14073
14074// migrationRecoveryPointCollectionPreparer prepares a request to retrieve the next set of results.
14075// It returns nil if no more results exist.
14076func (mrpc MigrationRecoveryPointCollection) migrationRecoveryPointCollectionPreparer(ctx context.Context) (*http.Request, error) {
14077	if !mrpc.hasNextLink() {
14078		return nil, nil
14079	}
14080	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14081		autorest.AsJSON(),
14082		autorest.AsGet(),
14083		autorest.WithBaseURL(to.String(mrpc.NextLink)))
14084}
14085
14086// MigrationRecoveryPointCollectionPage contains a page of MigrationRecoveryPoint values.
14087type MigrationRecoveryPointCollectionPage struct {
14088	fn   func(context.Context, MigrationRecoveryPointCollection) (MigrationRecoveryPointCollection, error)
14089	mrpc MigrationRecoveryPointCollection
14090}
14091
14092// NextWithContext advances to the next page of values.  If there was an error making
14093// the request the page does not advance and the error is returned.
14094func (page *MigrationRecoveryPointCollectionPage) NextWithContext(ctx context.Context) (err error) {
14095	if tracing.IsEnabled() {
14096		ctx = tracing.StartSpan(ctx, fqdn+"/MigrationRecoveryPointCollectionPage.NextWithContext")
14097		defer func() {
14098			sc := -1
14099			if page.Response().Response.Response != nil {
14100				sc = page.Response().Response.Response.StatusCode
14101			}
14102			tracing.EndSpan(ctx, sc, err)
14103		}()
14104	}
14105	for {
14106		next, err := page.fn(ctx, page.mrpc)
14107		if err != nil {
14108			return err
14109		}
14110		page.mrpc = next
14111		if !next.hasNextLink() || !next.IsEmpty() {
14112			break
14113		}
14114	}
14115	return nil
14116}
14117
14118// Next advances to the next page of values.  If there was an error making
14119// the request the page does not advance and the error is returned.
14120// Deprecated: Use NextWithContext() instead.
14121func (page *MigrationRecoveryPointCollectionPage) Next() error {
14122	return page.NextWithContext(context.Background())
14123}
14124
14125// NotDone returns true if the page enumeration should be started or is not yet complete.
14126func (page MigrationRecoveryPointCollectionPage) NotDone() bool {
14127	return !page.mrpc.IsEmpty()
14128}
14129
14130// Response returns the raw server response from the last page request.
14131func (page MigrationRecoveryPointCollectionPage) Response() MigrationRecoveryPointCollection {
14132	return page.mrpc
14133}
14134
14135// Values returns the slice of values for the current page or nil if there are no values.
14136func (page MigrationRecoveryPointCollectionPage) Values() []MigrationRecoveryPoint {
14137	if page.mrpc.IsEmpty() {
14138		return nil
14139	}
14140	return *page.mrpc.Value
14141}
14142
14143// Creates a new instance of the MigrationRecoveryPointCollectionPage type.
14144func NewMigrationRecoveryPointCollectionPage(cur MigrationRecoveryPointCollection, getNextPage func(context.Context, MigrationRecoveryPointCollection) (MigrationRecoveryPointCollection, error)) MigrationRecoveryPointCollectionPage {
14145	return MigrationRecoveryPointCollectionPage{
14146		fn:   getNextPage,
14147		mrpc: cur,
14148	}
14149}
14150
14151// MigrationRecoveryPointProperties migration item recovery point properties.
14152type MigrationRecoveryPointProperties struct {
14153	// RecoveryPointTime - READ-ONLY; The recovery point time.
14154	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
14155	// RecoveryPointType - READ-ONLY; The recovery point type. Possible values include: 'MigrationRecoveryPointTypeNotSpecified', 'MigrationRecoveryPointTypeApplicationConsistent', 'MigrationRecoveryPointTypeCrashConsistent'
14156	RecoveryPointType MigrationRecoveryPointType `json:"recoveryPointType,omitempty"`
14157}
14158
14159// MobilityServiceUpdate the Mobility Service update details.
14160type MobilityServiceUpdate struct {
14161	// Version - The version of the latest update.
14162	Version *string `json:"version,omitempty"`
14163	// RebootStatus - The reboot status of the update - whether it is required or not.
14164	RebootStatus *string `json:"rebootStatus,omitempty"`
14165	// OsType - The OS type.
14166	OsType *string `json:"osType,omitempty"`
14167}
14168
14169// Network network model.
14170type Network struct {
14171	autorest.Response `json:"-"`
14172	// Properties - The Network Properties.
14173	Properties *NetworkProperties `json:"properties,omitempty"`
14174	// ID - READ-ONLY; Resource Id
14175	ID *string `json:"id,omitempty"`
14176	// Name - READ-ONLY; Resource Name
14177	Name *string `json:"name,omitempty"`
14178	// Type - READ-ONLY; Resource Type
14179	Type *string `json:"type,omitempty"`
14180	// Location - Resource Location
14181	Location *string `json:"location,omitempty"`
14182}
14183
14184// MarshalJSON is the custom marshaler for Network.
14185func (n Network) MarshalJSON() ([]byte, error) {
14186	objectMap := make(map[string]interface{})
14187	if n.Properties != nil {
14188		objectMap["properties"] = n.Properties
14189	}
14190	if n.Location != nil {
14191		objectMap["location"] = n.Location
14192	}
14193	return json.Marshal(objectMap)
14194}
14195
14196// NetworkCollection list of networks.
14197type NetworkCollection struct {
14198	autorest.Response `json:"-"`
14199	// Value - The Networks list details.
14200	Value *[]Network `json:"value,omitempty"`
14201	// NextLink - The value of next link.
14202	NextLink *string `json:"nextLink,omitempty"`
14203}
14204
14205// NetworkCollectionIterator provides access to a complete listing of Network values.
14206type NetworkCollectionIterator struct {
14207	i    int
14208	page NetworkCollectionPage
14209}
14210
14211// NextWithContext advances to the next value.  If there was an error making
14212// the request the iterator does not advance and the error is returned.
14213func (iter *NetworkCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14214	if tracing.IsEnabled() {
14215		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkCollectionIterator.NextWithContext")
14216		defer func() {
14217			sc := -1
14218			if iter.Response().Response.Response != nil {
14219				sc = iter.Response().Response.Response.StatusCode
14220			}
14221			tracing.EndSpan(ctx, sc, err)
14222		}()
14223	}
14224	iter.i++
14225	if iter.i < len(iter.page.Values()) {
14226		return nil
14227	}
14228	err = iter.page.NextWithContext(ctx)
14229	if err != nil {
14230		iter.i--
14231		return err
14232	}
14233	iter.i = 0
14234	return nil
14235}
14236
14237// Next advances to the next value.  If there was an error making
14238// the request the iterator does not advance and the error is returned.
14239// Deprecated: Use NextWithContext() instead.
14240func (iter *NetworkCollectionIterator) Next() error {
14241	return iter.NextWithContext(context.Background())
14242}
14243
14244// NotDone returns true if the enumeration should be started or is not yet complete.
14245func (iter NetworkCollectionIterator) NotDone() bool {
14246	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14247}
14248
14249// Response returns the raw server response from the last page request.
14250func (iter NetworkCollectionIterator) Response() NetworkCollection {
14251	return iter.page.Response()
14252}
14253
14254// Value returns the current value or a zero-initialized value if the
14255// iterator has advanced beyond the end of the collection.
14256func (iter NetworkCollectionIterator) Value() Network {
14257	if !iter.page.NotDone() {
14258		return Network{}
14259	}
14260	return iter.page.Values()[iter.i]
14261}
14262
14263// Creates a new instance of the NetworkCollectionIterator type.
14264func NewNetworkCollectionIterator(page NetworkCollectionPage) NetworkCollectionIterator {
14265	return NetworkCollectionIterator{page: page}
14266}
14267
14268// IsEmpty returns true if the ListResult contains no values.
14269func (nc NetworkCollection) IsEmpty() bool {
14270	return nc.Value == nil || len(*nc.Value) == 0
14271}
14272
14273// hasNextLink returns true if the NextLink is not empty.
14274func (nc NetworkCollection) hasNextLink() bool {
14275	return nc.NextLink != nil && len(*nc.NextLink) != 0
14276}
14277
14278// networkCollectionPreparer prepares a request to retrieve the next set of results.
14279// It returns nil if no more results exist.
14280func (nc NetworkCollection) networkCollectionPreparer(ctx context.Context) (*http.Request, error) {
14281	if !nc.hasNextLink() {
14282		return nil, nil
14283	}
14284	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14285		autorest.AsJSON(),
14286		autorest.AsGet(),
14287		autorest.WithBaseURL(to.String(nc.NextLink)))
14288}
14289
14290// NetworkCollectionPage contains a page of Network values.
14291type NetworkCollectionPage struct {
14292	fn func(context.Context, NetworkCollection) (NetworkCollection, error)
14293	nc NetworkCollection
14294}
14295
14296// NextWithContext advances to the next page of values.  If there was an error making
14297// the request the page does not advance and the error is returned.
14298func (page *NetworkCollectionPage) NextWithContext(ctx context.Context) (err error) {
14299	if tracing.IsEnabled() {
14300		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkCollectionPage.NextWithContext")
14301		defer func() {
14302			sc := -1
14303			if page.Response().Response.Response != nil {
14304				sc = page.Response().Response.Response.StatusCode
14305			}
14306			tracing.EndSpan(ctx, sc, err)
14307		}()
14308	}
14309	for {
14310		next, err := page.fn(ctx, page.nc)
14311		if err != nil {
14312			return err
14313		}
14314		page.nc = next
14315		if !next.hasNextLink() || !next.IsEmpty() {
14316			break
14317		}
14318	}
14319	return nil
14320}
14321
14322// Next advances to the next page of values.  If there was an error making
14323// the request the page does not advance and the error is returned.
14324// Deprecated: Use NextWithContext() instead.
14325func (page *NetworkCollectionPage) Next() error {
14326	return page.NextWithContext(context.Background())
14327}
14328
14329// NotDone returns true if the page enumeration should be started or is not yet complete.
14330func (page NetworkCollectionPage) NotDone() bool {
14331	return !page.nc.IsEmpty()
14332}
14333
14334// Response returns the raw server response from the last page request.
14335func (page NetworkCollectionPage) Response() NetworkCollection {
14336	return page.nc
14337}
14338
14339// Values returns the slice of values for the current page or nil if there are no values.
14340func (page NetworkCollectionPage) Values() []Network {
14341	if page.nc.IsEmpty() {
14342		return nil
14343	}
14344	return *page.nc.Value
14345}
14346
14347// Creates a new instance of the NetworkCollectionPage type.
14348func NewNetworkCollectionPage(cur NetworkCollection, getNextPage func(context.Context, NetworkCollection) (NetworkCollection, error)) NetworkCollectionPage {
14349	return NetworkCollectionPage{
14350		fn: getNextPage,
14351		nc: cur,
14352	}
14353}
14354
14355// NetworkMapping network Mapping model. Ideally it should have been possible to inherit this class from
14356// prev version in InheritedModels as long as there is no difference in structure or method signature.
14357// Since there were no base Models for certain fields and methods viz NetworkMappingProperties and Load
14358// with required return type, the class has been introduced in its entirety with references to base models
14359// to facilitate extensions in subsequent versions.
14360type NetworkMapping struct {
14361	autorest.Response `json:"-"`
14362	// Properties - The Network Mapping Properties.
14363	Properties *NetworkMappingProperties `json:"properties,omitempty"`
14364	// ID - READ-ONLY; Resource Id
14365	ID *string `json:"id,omitempty"`
14366	// Name - READ-ONLY; Resource Name
14367	Name *string `json:"name,omitempty"`
14368	// Type - READ-ONLY; Resource Type
14369	Type *string `json:"type,omitempty"`
14370	// Location - Resource Location
14371	Location *string `json:"location,omitempty"`
14372}
14373
14374// MarshalJSON is the custom marshaler for NetworkMapping.
14375func (nm NetworkMapping) MarshalJSON() ([]byte, error) {
14376	objectMap := make(map[string]interface{})
14377	if nm.Properties != nil {
14378		objectMap["properties"] = nm.Properties
14379	}
14380	if nm.Location != nil {
14381		objectMap["location"] = nm.Location
14382	}
14383	return json.Marshal(objectMap)
14384}
14385
14386// NetworkMappingCollection list of network mappings. As with NetworkMapping, it should be possible to
14387// reuse a prev version of this class. It doesn't seem likely this class could be anything more than a
14388// slightly bespoke collection of NetworkMapping. Hence it makes sense to override Load with
14389// Base.NetworkMapping instead of existing CurrentVersion.NetworkMapping.
14390type NetworkMappingCollection struct {
14391	autorest.Response `json:"-"`
14392	// Value - The Network Mappings list.
14393	Value *[]NetworkMapping `json:"value,omitempty"`
14394	// NextLink - The value of next link.
14395	NextLink *string `json:"nextLink,omitempty"`
14396}
14397
14398// NetworkMappingCollectionIterator provides access to a complete listing of NetworkMapping values.
14399type NetworkMappingCollectionIterator struct {
14400	i    int
14401	page NetworkMappingCollectionPage
14402}
14403
14404// NextWithContext advances to the next value.  If there was an error making
14405// the request the iterator does not advance and the error is returned.
14406func (iter *NetworkMappingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14407	if tracing.IsEnabled() {
14408		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkMappingCollectionIterator.NextWithContext")
14409		defer func() {
14410			sc := -1
14411			if iter.Response().Response.Response != nil {
14412				sc = iter.Response().Response.Response.StatusCode
14413			}
14414			tracing.EndSpan(ctx, sc, err)
14415		}()
14416	}
14417	iter.i++
14418	if iter.i < len(iter.page.Values()) {
14419		return nil
14420	}
14421	err = iter.page.NextWithContext(ctx)
14422	if err != nil {
14423		iter.i--
14424		return err
14425	}
14426	iter.i = 0
14427	return nil
14428}
14429
14430// Next advances to the next value.  If there was an error making
14431// the request the iterator does not advance and the error is returned.
14432// Deprecated: Use NextWithContext() instead.
14433func (iter *NetworkMappingCollectionIterator) Next() error {
14434	return iter.NextWithContext(context.Background())
14435}
14436
14437// NotDone returns true if the enumeration should be started or is not yet complete.
14438func (iter NetworkMappingCollectionIterator) NotDone() bool {
14439	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14440}
14441
14442// Response returns the raw server response from the last page request.
14443func (iter NetworkMappingCollectionIterator) Response() NetworkMappingCollection {
14444	return iter.page.Response()
14445}
14446
14447// Value returns the current value or a zero-initialized value if the
14448// iterator has advanced beyond the end of the collection.
14449func (iter NetworkMappingCollectionIterator) Value() NetworkMapping {
14450	if !iter.page.NotDone() {
14451		return NetworkMapping{}
14452	}
14453	return iter.page.Values()[iter.i]
14454}
14455
14456// Creates a new instance of the NetworkMappingCollectionIterator type.
14457func NewNetworkMappingCollectionIterator(page NetworkMappingCollectionPage) NetworkMappingCollectionIterator {
14458	return NetworkMappingCollectionIterator{page: page}
14459}
14460
14461// IsEmpty returns true if the ListResult contains no values.
14462func (nmc NetworkMappingCollection) IsEmpty() bool {
14463	return nmc.Value == nil || len(*nmc.Value) == 0
14464}
14465
14466// hasNextLink returns true if the NextLink is not empty.
14467func (nmc NetworkMappingCollection) hasNextLink() bool {
14468	return nmc.NextLink != nil && len(*nmc.NextLink) != 0
14469}
14470
14471// networkMappingCollectionPreparer prepares a request to retrieve the next set of results.
14472// It returns nil if no more results exist.
14473func (nmc NetworkMappingCollection) networkMappingCollectionPreparer(ctx context.Context) (*http.Request, error) {
14474	if !nmc.hasNextLink() {
14475		return nil, nil
14476	}
14477	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14478		autorest.AsJSON(),
14479		autorest.AsGet(),
14480		autorest.WithBaseURL(to.String(nmc.NextLink)))
14481}
14482
14483// NetworkMappingCollectionPage contains a page of NetworkMapping values.
14484type NetworkMappingCollectionPage struct {
14485	fn  func(context.Context, NetworkMappingCollection) (NetworkMappingCollection, error)
14486	nmc NetworkMappingCollection
14487}
14488
14489// NextWithContext advances to the next page of values.  If there was an error making
14490// the request the page does not advance and the error is returned.
14491func (page *NetworkMappingCollectionPage) NextWithContext(ctx context.Context) (err error) {
14492	if tracing.IsEnabled() {
14493		ctx = tracing.StartSpan(ctx, fqdn+"/NetworkMappingCollectionPage.NextWithContext")
14494		defer func() {
14495			sc := -1
14496			if page.Response().Response.Response != nil {
14497				sc = page.Response().Response.Response.StatusCode
14498			}
14499			tracing.EndSpan(ctx, sc, err)
14500		}()
14501	}
14502	for {
14503		next, err := page.fn(ctx, page.nmc)
14504		if err != nil {
14505			return err
14506		}
14507		page.nmc = next
14508		if !next.hasNextLink() || !next.IsEmpty() {
14509			break
14510		}
14511	}
14512	return nil
14513}
14514
14515// Next advances to the next page of values.  If there was an error making
14516// the request the page does not advance and the error is returned.
14517// Deprecated: Use NextWithContext() instead.
14518func (page *NetworkMappingCollectionPage) Next() error {
14519	return page.NextWithContext(context.Background())
14520}
14521
14522// NotDone returns true if the page enumeration should be started or is not yet complete.
14523func (page NetworkMappingCollectionPage) NotDone() bool {
14524	return !page.nmc.IsEmpty()
14525}
14526
14527// Response returns the raw server response from the last page request.
14528func (page NetworkMappingCollectionPage) Response() NetworkMappingCollection {
14529	return page.nmc
14530}
14531
14532// Values returns the slice of values for the current page or nil if there are no values.
14533func (page NetworkMappingCollectionPage) Values() []NetworkMapping {
14534	if page.nmc.IsEmpty() {
14535		return nil
14536	}
14537	return *page.nmc.Value
14538}
14539
14540// Creates a new instance of the NetworkMappingCollectionPage type.
14541func NewNetworkMappingCollectionPage(cur NetworkMappingCollection, getNextPage func(context.Context, NetworkMappingCollection) (NetworkMappingCollection, error)) NetworkMappingCollectionPage {
14542	return NetworkMappingCollectionPage{
14543		fn:  getNextPage,
14544		nmc: cur,
14545	}
14546}
14547
14548// BasicNetworkMappingFabricSpecificSettings network Mapping fabric specific settings.
14549type BasicNetworkMappingFabricSpecificSettings interface {
14550	AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool)
14551	AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool)
14552	AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool)
14553	AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool)
14554}
14555
14556// NetworkMappingFabricSpecificSettings network Mapping fabric specific settings.
14557type NetworkMappingFabricSpecificSettings struct {
14558	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
14559	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
14560}
14561
14562func unmarshalBasicNetworkMappingFabricSpecificSettings(body []byte) (BasicNetworkMappingFabricSpecificSettings, error) {
14563	var m map[string]interface{}
14564	err := json.Unmarshal(body, &m)
14565	if err != nil {
14566		return nil, err
14567	}
14568
14569	switch m["instanceType"] {
14570	case string(InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure):
14571		var atanms AzureToAzureNetworkMappingSettings
14572		err := json.Unmarshal(body, &atanms)
14573		return atanms, err
14574	case string(InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure):
14575		var vtanms VmmToAzureNetworkMappingSettings
14576		err := json.Unmarshal(body, &vtanms)
14577		return vtanms, err
14578	case string(InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm):
14579		var vtvnms VmmToVmmNetworkMappingSettings
14580		err := json.Unmarshal(body, &vtvnms)
14581		return vtvnms, err
14582	default:
14583		var nmfss NetworkMappingFabricSpecificSettings
14584		err := json.Unmarshal(body, &nmfss)
14585		return nmfss, err
14586	}
14587}
14588func unmarshalBasicNetworkMappingFabricSpecificSettingsArray(body []byte) ([]BasicNetworkMappingFabricSpecificSettings, error) {
14589	var rawMessages []*json.RawMessage
14590	err := json.Unmarshal(body, &rawMessages)
14591	if err != nil {
14592		return nil, err
14593	}
14594
14595	nmfssArray := make([]BasicNetworkMappingFabricSpecificSettings, len(rawMessages))
14596
14597	for index, rawMessage := range rawMessages {
14598		nmfss, err := unmarshalBasicNetworkMappingFabricSpecificSettings(*rawMessage)
14599		if err != nil {
14600			return nil, err
14601		}
14602		nmfssArray[index] = nmfss
14603	}
14604	return nmfssArray, nil
14605}
14606
14607// MarshalJSON is the custom marshaler for NetworkMappingFabricSpecificSettings.
14608func (nmfss NetworkMappingFabricSpecificSettings) MarshalJSON() ([]byte, error) {
14609	nmfss.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings
14610	objectMap := make(map[string]interface{})
14611	if nmfss.InstanceType != "" {
14612		objectMap["instanceType"] = nmfss.InstanceType
14613	}
14614	return json.Marshal(objectMap)
14615}
14616
14617// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14618func (nmfss NetworkMappingFabricSpecificSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
14619	return nil, false
14620}
14621
14622// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14623func (nmfss NetworkMappingFabricSpecificSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
14624	return nil, false
14625}
14626
14627// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14628func (nmfss NetworkMappingFabricSpecificSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
14629	return nil, false
14630}
14631
14632// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14633func (nmfss NetworkMappingFabricSpecificSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
14634	return &nmfss, true
14635}
14636
14637// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for NetworkMappingFabricSpecificSettings.
14638func (nmfss NetworkMappingFabricSpecificSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
14639	return &nmfss, true
14640}
14641
14642// NetworkMappingProperties network Mapping Properties.
14643type NetworkMappingProperties struct {
14644	// State - The pairing state for network mapping.
14645	State *string `json:"state,omitempty"`
14646	// PrimaryNetworkFriendlyName - The primary network friendly name.
14647	PrimaryNetworkFriendlyName *string `json:"primaryNetworkFriendlyName,omitempty"`
14648	// PrimaryNetworkID - The primary network id for network mapping.
14649	PrimaryNetworkID *string `json:"primaryNetworkId,omitempty"`
14650	// PrimaryFabricFriendlyName - The primary fabric friendly name.
14651	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
14652	// RecoveryNetworkFriendlyName - The recovery network friendly name.
14653	RecoveryNetworkFriendlyName *string `json:"recoveryNetworkFriendlyName,omitempty"`
14654	// RecoveryNetworkID - The recovery network id for network mapping.
14655	RecoveryNetworkID *string `json:"recoveryNetworkId,omitempty"`
14656	// RecoveryFabricArmID - The recovery fabric ARM id.
14657	RecoveryFabricArmID *string `json:"recoveryFabricArmId,omitempty"`
14658	// RecoveryFabricFriendlyName - The recovery fabric friendly name.
14659	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
14660	// FabricSpecificSettings - The fabric specific settings.
14661	FabricSpecificSettings BasicNetworkMappingFabricSpecificSettings `json:"fabricSpecificSettings,omitempty"`
14662}
14663
14664// UnmarshalJSON is the custom unmarshaler for NetworkMappingProperties struct.
14665func (nmp *NetworkMappingProperties) UnmarshalJSON(body []byte) error {
14666	var m map[string]*json.RawMessage
14667	err := json.Unmarshal(body, &m)
14668	if err != nil {
14669		return err
14670	}
14671	for k, v := range m {
14672		switch k {
14673		case "state":
14674			if v != nil {
14675				var state string
14676				err = json.Unmarshal(*v, &state)
14677				if err != nil {
14678					return err
14679				}
14680				nmp.State = &state
14681			}
14682		case "primaryNetworkFriendlyName":
14683			if v != nil {
14684				var primaryNetworkFriendlyName string
14685				err = json.Unmarshal(*v, &primaryNetworkFriendlyName)
14686				if err != nil {
14687					return err
14688				}
14689				nmp.PrimaryNetworkFriendlyName = &primaryNetworkFriendlyName
14690			}
14691		case "primaryNetworkId":
14692			if v != nil {
14693				var primaryNetworkID string
14694				err = json.Unmarshal(*v, &primaryNetworkID)
14695				if err != nil {
14696					return err
14697				}
14698				nmp.PrimaryNetworkID = &primaryNetworkID
14699			}
14700		case "primaryFabricFriendlyName":
14701			if v != nil {
14702				var primaryFabricFriendlyName string
14703				err = json.Unmarshal(*v, &primaryFabricFriendlyName)
14704				if err != nil {
14705					return err
14706				}
14707				nmp.PrimaryFabricFriendlyName = &primaryFabricFriendlyName
14708			}
14709		case "recoveryNetworkFriendlyName":
14710			if v != nil {
14711				var recoveryNetworkFriendlyName string
14712				err = json.Unmarshal(*v, &recoveryNetworkFriendlyName)
14713				if err != nil {
14714					return err
14715				}
14716				nmp.RecoveryNetworkFriendlyName = &recoveryNetworkFriendlyName
14717			}
14718		case "recoveryNetworkId":
14719			if v != nil {
14720				var recoveryNetworkID string
14721				err = json.Unmarshal(*v, &recoveryNetworkID)
14722				if err != nil {
14723					return err
14724				}
14725				nmp.RecoveryNetworkID = &recoveryNetworkID
14726			}
14727		case "recoveryFabricArmId":
14728			if v != nil {
14729				var recoveryFabricArmID string
14730				err = json.Unmarshal(*v, &recoveryFabricArmID)
14731				if err != nil {
14732					return err
14733				}
14734				nmp.RecoveryFabricArmID = &recoveryFabricArmID
14735			}
14736		case "recoveryFabricFriendlyName":
14737			if v != nil {
14738				var recoveryFabricFriendlyName string
14739				err = json.Unmarshal(*v, &recoveryFabricFriendlyName)
14740				if err != nil {
14741					return err
14742				}
14743				nmp.RecoveryFabricFriendlyName = &recoveryFabricFriendlyName
14744			}
14745		case "fabricSpecificSettings":
14746			if v != nil {
14747				fabricSpecificSettings, err := unmarshalBasicNetworkMappingFabricSpecificSettings(*v)
14748				if err != nil {
14749					return err
14750				}
14751				nmp.FabricSpecificSettings = fabricSpecificSettings
14752			}
14753		}
14754	}
14755
14756	return nil
14757}
14758
14759// NetworkProperties network Properties
14760type NetworkProperties struct {
14761	// FabricType - The Fabric Type.
14762	FabricType *string `json:"fabricType,omitempty"`
14763	// Subnets - The List of subnets.
14764	Subnets *[]Subnet `json:"subnets,omitempty"`
14765	// FriendlyName - The Friendly Name.
14766	FriendlyName *string `json:"friendlyName,omitempty"`
14767	// NetworkType - The Network Type.
14768	NetworkType *string `json:"networkType,omitempty"`
14769}
14770
14771// NewProtectionProfile new Protection profile input.
14772type NewProtectionProfile struct {
14773	// PolicyName - The protection profile input.
14774	PolicyName *string `json:"policyName,omitempty"`
14775	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
14776	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
14777	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
14778	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
14779	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
14780	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
14781	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Value should be 'Enabled' or 'Disabled'. Possible values include: 'Enable', 'Disable'
14782	MultiVMSyncStatus SetMultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
14783	// ResourceType - Possible values include: 'ResourceTypeProtectionProfileCustomDetails', 'ResourceTypeExisting', 'ResourceTypeNew'
14784	ResourceType ResourceType `json:"resourceType,omitempty"`
14785}
14786
14787// MarshalJSON is the custom marshaler for NewProtectionProfile.
14788func (npp NewProtectionProfile) MarshalJSON() ([]byte, error) {
14789	npp.ResourceType = ResourceTypeNew
14790	objectMap := make(map[string]interface{})
14791	if npp.PolicyName != nil {
14792		objectMap["policyName"] = npp.PolicyName
14793	}
14794	if npp.RecoveryPointHistory != nil {
14795		objectMap["recoveryPointHistory"] = npp.RecoveryPointHistory
14796	}
14797	if npp.CrashConsistentFrequencyInMinutes != nil {
14798		objectMap["crashConsistentFrequencyInMinutes"] = npp.CrashConsistentFrequencyInMinutes
14799	}
14800	if npp.AppConsistentFrequencyInMinutes != nil {
14801		objectMap["appConsistentFrequencyInMinutes"] = npp.AppConsistentFrequencyInMinutes
14802	}
14803	if npp.MultiVMSyncStatus != "" {
14804		objectMap["multiVmSyncStatus"] = npp.MultiVMSyncStatus
14805	}
14806	if npp.ResourceType != "" {
14807		objectMap["resourceType"] = npp.ResourceType
14808	}
14809	return json.Marshal(objectMap)
14810}
14811
14812// AsExistingProtectionProfile is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14813func (npp NewProtectionProfile) AsExistingProtectionProfile() (*ExistingProtectionProfile, bool) {
14814	return nil, false
14815}
14816
14817// AsNewProtectionProfile is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14818func (npp NewProtectionProfile) AsNewProtectionProfile() (*NewProtectionProfile, bool) {
14819	return &npp, true
14820}
14821
14822// AsProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14823func (npp NewProtectionProfile) AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool) {
14824	return nil, false
14825}
14826
14827// AsBasicProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for NewProtectionProfile.
14828func (npp NewProtectionProfile) AsBasicProtectionProfileCustomDetails() (BasicProtectionProfileCustomDetails, bool) {
14829	return &npp, true
14830}
14831
14832// OperationsDiscovery operations discovery class.
14833type OperationsDiscovery struct {
14834	// 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)
14835	Name *string `json:"name,omitempty"`
14836	// Display - Object type
14837	Display *Display `json:"display,omitempty"`
14838	// 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"
14839	Origin *string `json:"origin,omitempty"`
14840	// Properties - Properties. Reserved for future use.
14841	Properties interface{} `json:"properties,omitempty"`
14842}
14843
14844// OperationsDiscoveryCollection collection of ClientDiscovery details.
14845type OperationsDiscoveryCollection struct {
14846	autorest.Response `json:"-"`
14847	// Value - The ClientDiscovery details.
14848	Value *[]OperationsDiscovery `json:"value,omitempty"`
14849	// NextLink - The value of next link.
14850	NextLink *string `json:"nextLink,omitempty"`
14851}
14852
14853// OperationsDiscoveryCollectionIterator provides access to a complete listing of OperationsDiscovery
14854// values.
14855type OperationsDiscoveryCollectionIterator struct {
14856	i    int
14857	page OperationsDiscoveryCollectionPage
14858}
14859
14860// NextWithContext advances to the next value.  If there was an error making
14861// the request the iterator does not advance and the error is returned.
14862func (iter *OperationsDiscoveryCollectionIterator) NextWithContext(ctx context.Context) (err error) {
14863	if tracing.IsEnabled() {
14864		ctx = tracing.StartSpan(ctx, fqdn+"/OperationsDiscoveryCollectionIterator.NextWithContext")
14865		defer func() {
14866			sc := -1
14867			if iter.Response().Response.Response != nil {
14868				sc = iter.Response().Response.Response.StatusCode
14869			}
14870			tracing.EndSpan(ctx, sc, err)
14871		}()
14872	}
14873	iter.i++
14874	if iter.i < len(iter.page.Values()) {
14875		return nil
14876	}
14877	err = iter.page.NextWithContext(ctx)
14878	if err != nil {
14879		iter.i--
14880		return err
14881	}
14882	iter.i = 0
14883	return nil
14884}
14885
14886// Next advances to the next value.  If there was an error making
14887// the request the iterator does not advance and the error is returned.
14888// Deprecated: Use NextWithContext() instead.
14889func (iter *OperationsDiscoveryCollectionIterator) Next() error {
14890	return iter.NextWithContext(context.Background())
14891}
14892
14893// NotDone returns true if the enumeration should be started or is not yet complete.
14894func (iter OperationsDiscoveryCollectionIterator) NotDone() bool {
14895	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14896}
14897
14898// Response returns the raw server response from the last page request.
14899func (iter OperationsDiscoveryCollectionIterator) Response() OperationsDiscoveryCollection {
14900	return iter.page.Response()
14901}
14902
14903// Value returns the current value or a zero-initialized value if the
14904// iterator has advanced beyond the end of the collection.
14905func (iter OperationsDiscoveryCollectionIterator) Value() OperationsDiscovery {
14906	if !iter.page.NotDone() {
14907		return OperationsDiscovery{}
14908	}
14909	return iter.page.Values()[iter.i]
14910}
14911
14912// Creates a new instance of the OperationsDiscoveryCollectionIterator type.
14913func NewOperationsDiscoveryCollectionIterator(page OperationsDiscoveryCollectionPage) OperationsDiscoveryCollectionIterator {
14914	return OperationsDiscoveryCollectionIterator{page: page}
14915}
14916
14917// IsEmpty returns true if the ListResult contains no values.
14918func (odc OperationsDiscoveryCollection) IsEmpty() bool {
14919	return odc.Value == nil || len(*odc.Value) == 0
14920}
14921
14922// hasNextLink returns true if the NextLink is not empty.
14923func (odc OperationsDiscoveryCollection) hasNextLink() bool {
14924	return odc.NextLink != nil && len(*odc.NextLink) != 0
14925}
14926
14927// operationsDiscoveryCollectionPreparer prepares a request to retrieve the next set of results.
14928// It returns nil if no more results exist.
14929func (odc OperationsDiscoveryCollection) operationsDiscoveryCollectionPreparer(ctx context.Context) (*http.Request, error) {
14930	if !odc.hasNextLink() {
14931		return nil, nil
14932	}
14933	return autorest.Prepare((&http.Request{}).WithContext(ctx),
14934		autorest.AsJSON(),
14935		autorest.AsGet(),
14936		autorest.WithBaseURL(to.String(odc.NextLink)))
14937}
14938
14939// OperationsDiscoveryCollectionPage contains a page of OperationsDiscovery values.
14940type OperationsDiscoveryCollectionPage struct {
14941	fn  func(context.Context, OperationsDiscoveryCollection) (OperationsDiscoveryCollection, error)
14942	odc OperationsDiscoveryCollection
14943}
14944
14945// NextWithContext advances to the next page of values.  If there was an error making
14946// the request the page does not advance and the error is returned.
14947func (page *OperationsDiscoveryCollectionPage) NextWithContext(ctx context.Context) (err error) {
14948	if tracing.IsEnabled() {
14949		ctx = tracing.StartSpan(ctx, fqdn+"/OperationsDiscoveryCollectionPage.NextWithContext")
14950		defer func() {
14951			sc := -1
14952			if page.Response().Response.Response != nil {
14953				sc = page.Response().Response.Response.StatusCode
14954			}
14955			tracing.EndSpan(ctx, sc, err)
14956		}()
14957	}
14958	for {
14959		next, err := page.fn(ctx, page.odc)
14960		if err != nil {
14961			return err
14962		}
14963		page.odc = next
14964		if !next.hasNextLink() || !next.IsEmpty() {
14965			break
14966		}
14967	}
14968	return nil
14969}
14970
14971// Next advances to the next page of values.  If there was an error making
14972// the request the page does not advance and the error is returned.
14973// Deprecated: Use NextWithContext() instead.
14974func (page *OperationsDiscoveryCollectionPage) Next() error {
14975	return page.NextWithContext(context.Background())
14976}
14977
14978// NotDone returns true if the page enumeration should be started or is not yet complete.
14979func (page OperationsDiscoveryCollectionPage) NotDone() bool {
14980	return !page.odc.IsEmpty()
14981}
14982
14983// Response returns the raw server response from the last page request.
14984func (page OperationsDiscoveryCollectionPage) Response() OperationsDiscoveryCollection {
14985	return page.odc
14986}
14987
14988// Values returns the slice of values for the current page or nil if there are no values.
14989func (page OperationsDiscoveryCollectionPage) Values() []OperationsDiscovery {
14990	if page.odc.IsEmpty() {
14991		return nil
14992	}
14993	return *page.odc.Value
14994}
14995
14996// Creates a new instance of the OperationsDiscoveryCollectionPage type.
14997func NewOperationsDiscoveryCollectionPage(cur OperationsDiscoveryCollection, getNextPage func(context.Context, OperationsDiscoveryCollection) (OperationsDiscoveryCollection, error)) OperationsDiscoveryCollectionPage {
14998	return OperationsDiscoveryCollectionPage{
14999		fn:  getNextPage,
15000		odc: cur,
15001	}
15002}
15003
15004// OSDetails disk Details.
15005type OSDetails struct {
15006	// OsType - VM Disk details.
15007	OsType *string `json:"osType,omitempty"`
15008	// ProductType - Product type.
15009	ProductType *string `json:"productType,omitempty"`
15010	// OsEdition - The OSEdition.
15011	OsEdition *string `json:"osEdition,omitempty"`
15012	// OSVersion - The OS Version.
15013	OSVersion *string `json:"oSVersion,omitempty"`
15014	// OSMajorVersion - The OS Major Version.
15015	OSMajorVersion *string `json:"oSMajorVersion,omitempty"`
15016	// OSMinorVersion - The OS Minor Version.
15017	OSMinorVersion *string `json:"oSMinorVersion,omitempty"`
15018}
15019
15020// OSDiskDetails details of the OS Disk.
15021type OSDiskDetails struct {
15022	// OsVhdID - The id of the disk containing the OS.
15023	OsVhdID *string `json:"osVhdId,omitempty"`
15024	// OsType - The type of the OS on the VM.
15025	OsType *string `json:"osType,omitempty"`
15026	// VhdName - The OS disk VHD name.
15027	VhdName *string `json:"vhdName,omitempty"`
15028}
15029
15030// OSVersionWrapper wrapper model for OSVersion to include version and service pack info.
15031type OSVersionWrapper struct {
15032	// Version - The version.
15033	Version *string `json:"version,omitempty"`
15034	// ServicePack - Service pack.
15035	ServicePack *string `json:"servicePack,omitempty"`
15036}
15037
15038// PlannedFailoverInput input definition for planned failover.
15039type PlannedFailoverInput struct {
15040	// Properties - Planned failover input properties
15041	Properties *PlannedFailoverInputProperties `json:"properties,omitempty"`
15042}
15043
15044// PlannedFailoverInputProperties input definition for planned failover input properties.
15045type PlannedFailoverInputProperties struct {
15046	// FailoverDirection - Failover direction.
15047	FailoverDirection *string `json:"failoverDirection,omitempty"`
15048	// ProviderSpecificDetails - Provider specific settings
15049	ProviderSpecificDetails BasicProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
15050}
15051
15052// UnmarshalJSON is the custom unmarshaler for PlannedFailoverInputProperties struct.
15053func (pfip *PlannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
15054	var m map[string]*json.RawMessage
15055	err := json.Unmarshal(body, &m)
15056	if err != nil {
15057		return err
15058	}
15059	for k, v := range m {
15060		switch k {
15061		case "failoverDirection":
15062			if v != nil {
15063				var failoverDirection string
15064				err = json.Unmarshal(*v, &failoverDirection)
15065				if err != nil {
15066					return err
15067				}
15068				pfip.FailoverDirection = &failoverDirection
15069			}
15070		case "providerSpecificDetails":
15071			if v != nil {
15072				providerSpecificDetails, err := unmarshalBasicProviderSpecificFailoverInput(*v)
15073				if err != nil {
15074					return err
15075				}
15076				pfip.ProviderSpecificDetails = providerSpecificDetails
15077			}
15078		}
15079	}
15080
15081	return nil
15082}
15083
15084// Policy protection profile details.
15085type Policy struct {
15086	autorest.Response `json:"-"`
15087	// Properties - The custom data.
15088	Properties *PolicyProperties `json:"properties,omitempty"`
15089	// ID - READ-ONLY; Resource Id
15090	ID *string `json:"id,omitempty"`
15091	// Name - READ-ONLY; Resource Name
15092	Name *string `json:"name,omitempty"`
15093	// Type - READ-ONLY; Resource Type
15094	Type *string `json:"type,omitempty"`
15095	// Location - Resource Location
15096	Location *string `json:"location,omitempty"`
15097}
15098
15099// MarshalJSON is the custom marshaler for Policy.
15100func (p Policy) MarshalJSON() ([]byte, error) {
15101	objectMap := make(map[string]interface{})
15102	if p.Properties != nil {
15103		objectMap["properties"] = p.Properties
15104	}
15105	if p.Location != nil {
15106		objectMap["location"] = p.Location
15107	}
15108	return json.Marshal(objectMap)
15109}
15110
15111// PolicyCollection protection Profile Collection details.
15112type PolicyCollection struct {
15113	autorest.Response `json:"-"`
15114	// Value - The policy details.
15115	Value *[]Policy `json:"value,omitempty"`
15116	// NextLink - The value of next link.
15117	NextLink *string `json:"nextLink,omitempty"`
15118}
15119
15120// PolicyCollectionIterator provides access to a complete listing of Policy values.
15121type PolicyCollectionIterator struct {
15122	i    int
15123	page PolicyCollectionPage
15124}
15125
15126// NextWithContext advances to the next value.  If there was an error making
15127// the request the iterator does not advance and the error is returned.
15128func (iter *PolicyCollectionIterator) NextWithContext(ctx context.Context) (err error) {
15129	if tracing.IsEnabled() {
15130		ctx = tracing.StartSpan(ctx, fqdn+"/PolicyCollectionIterator.NextWithContext")
15131		defer func() {
15132			sc := -1
15133			if iter.Response().Response.Response != nil {
15134				sc = iter.Response().Response.Response.StatusCode
15135			}
15136			tracing.EndSpan(ctx, sc, err)
15137		}()
15138	}
15139	iter.i++
15140	if iter.i < len(iter.page.Values()) {
15141		return nil
15142	}
15143	err = iter.page.NextWithContext(ctx)
15144	if err != nil {
15145		iter.i--
15146		return err
15147	}
15148	iter.i = 0
15149	return nil
15150}
15151
15152// Next advances to the next value.  If there was an error making
15153// the request the iterator does not advance and the error is returned.
15154// Deprecated: Use NextWithContext() instead.
15155func (iter *PolicyCollectionIterator) Next() error {
15156	return iter.NextWithContext(context.Background())
15157}
15158
15159// NotDone returns true if the enumeration should be started or is not yet complete.
15160func (iter PolicyCollectionIterator) NotDone() bool {
15161	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15162}
15163
15164// Response returns the raw server response from the last page request.
15165func (iter PolicyCollectionIterator) Response() PolicyCollection {
15166	return iter.page.Response()
15167}
15168
15169// Value returns the current value or a zero-initialized value if the
15170// iterator has advanced beyond the end of the collection.
15171func (iter PolicyCollectionIterator) Value() Policy {
15172	if !iter.page.NotDone() {
15173		return Policy{}
15174	}
15175	return iter.page.Values()[iter.i]
15176}
15177
15178// Creates a new instance of the PolicyCollectionIterator type.
15179func NewPolicyCollectionIterator(page PolicyCollectionPage) PolicyCollectionIterator {
15180	return PolicyCollectionIterator{page: page}
15181}
15182
15183// IsEmpty returns true if the ListResult contains no values.
15184func (pc PolicyCollection) IsEmpty() bool {
15185	return pc.Value == nil || len(*pc.Value) == 0
15186}
15187
15188// hasNextLink returns true if the NextLink is not empty.
15189func (pc PolicyCollection) hasNextLink() bool {
15190	return pc.NextLink != nil && len(*pc.NextLink) != 0
15191}
15192
15193// policyCollectionPreparer prepares a request to retrieve the next set of results.
15194// It returns nil if no more results exist.
15195func (pc PolicyCollection) policyCollectionPreparer(ctx context.Context) (*http.Request, error) {
15196	if !pc.hasNextLink() {
15197		return nil, nil
15198	}
15199	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15200		autorest.AsJSON(),
15201		autorest.AsGet(),
15202		autorest.WithBaseURL(to.String(pc.NextLink)))
15203}
15204
15205// PolicyCollectionPage contains a page of Policy values.
15206type PolicyCollectionPage struct {
15207	fn func(context.Context, PolicyCollection) (PolicyCollection, error)
15208	pc PolicyCollection
15209}
15210
15211// NextWithContext advances to the next page of values.  If there was an error making
15212// the request the page does not advance and the error is returned.
15213func (page *PolicyCollectionPage) NextWithContext(ctx context.Context) (err error) {
15214	if tracing.IsEnabled() {
15215		ctx = tracing.StartSpan(ctx, fqdn+"/PolicyCollectionPage.NextWithContext")
15216		defer func() {
15217			sc := -1
15218			if page.Response().Response.Response != nil {
15219				sc = page.Response().Response.Response.StatusCode
15220			}
15221			tracing.EndSpan(ctx, sc, err)
15222		}()
15223	}
15224	for {
15225		next, err := page.fn(ctx, page.pc)
15226		if err != nil {
15227			return err
15228		}
15229		page.pc = next
15230		if !next.hasNextLink() || !next.IsEmpty() {
15231			break
15232		}
15233	}
15234	return nil
15235}
15236
15237// Next advances to the next page of values.  If there was an error making
15238// the request the page does not advance and the error is returned.
15239// Deprecated: Use NextWithContext() instead.
15240func (page *PolicyCollectionPage) Next() error {
15241	return page.NextWithContext(context.Background())
15242}
15243
15244// NotDone returns true if the page enumeration should be started or is not yet complete.
15245func (page PolicyCollectionPage) NotDone() bool {
15246	return !page.pc.IsEmpty()
15247}
15248
15249// Response returns the raw server response from the last page request.
15250func (page PolicyCollectionPage) Response() PolicyCollection {
15251	return page.pc
15252}
15253
15254// Values returns the slice of values for the current page or nil if there are no values.
15255func (page PolicyCollectionPage) Values() []Policy {
15256	if page.pc.IsEmpty() {
15257		return nil
15258	}
15259	return *page.pc.Value
15260}
15261
15262// Creates a new instance of the PolicyCollectionPage type.
15263func NewPolicyCollectionPage(cur PolicyCollection, getNextPage func(context.Context, PolicyCollection) (PolicyCollection, error)) PolicyCollectionPage {
15264	return PolicyCollectionPage{
15265		fn: getNextPage,
15266		pc: cur,
15267	}
15268}
15269
15270// PolicyProperties protection profile custom data details.
15271type PolicyProperties struct {
15272	// FriendlyName - The FriendlyName.
15273	FriendlyName *string `json:"friendlyName,omitempty"`
15274	// ProviderSpecificDetails - The ReplicationChannelSetting.
15275	ProviderSpecificDetails BasicPolicyProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
15276}
15277
15278// UnmarshalJSON is the custom unmarshaler for PolicyProperties struct.
15279func (pp *PolicyProperties) UnmarshalJSON(body []byte) error {
15280	var m map[string]*json.RawMessage
15281	err := json.Unmarshal(body, &m)
15282	if err != nil {
15283		return err
15284	}
15285	for k, v := range m {
15286		switch k {
15287		case "friendlyName":
15288			if v != nil {
15289				var friendlyName string
15290				err = json.Unmarshal(*v, &friendlyName)
15291				if err != nil {
15292					return err
15293				}
15294				pp.FriendlyName = &friendlyName
15295			}
15296		case "providerSpecificDetails":
15297			if v != nil {
15298				providerSpecificDetails, err := unmarshalBasicPolicyProviderSpecificDetails(*v)
15299				if err != nil {
15300					return err
15301				}
15302				pp.ProviderSpecificDetails = providerSpecificDetails
15303			}
15304		}
15305	}
15306
15307	return nil
15308}
15309
15310// BasicPolicyProviderSpecificDetails base class for Provider specific details for policies.
15311type BasicPolicyProviderSpecificDetails interface {
15312	AsA2APolicyDetails() (*A2APolicyDetails, bool)
15313	AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool)
15314	AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool)
15315	AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool)
15316	AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool)
15317	AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool)
15318	AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool)
15319	AsInMagePolicyDetails() (*InMagePolicyDetails, bool)
15320	AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool)
15321	AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool)
15322	AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool)
15323	AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool)
15324}
15325
15326// PolicyProviderSpecificDetails base class for Provider specific details for policies.
15327type PolicyProviderSpecificDetails struct {
15328	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
15329	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
15330}
15331
15332func unmarshalBasicPolicyProviderSpecificDetails(body []byte) (BasicPolicyProviderSpecificDetails, error) {
15333	var m map[string]interface{}
15334	err := json.Unmarshal(body, &m)
15335	if err != nil {
15336		return nil, err
15337	}
15338
15339	switch m["instanceType"] {
15340	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A):
15341		var apd A2APolicyDetails
15342		err := json.Unmarshal(body, &apd)
15343		return apd, err
15344	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure):
15345		var hvrapd HyperVReplicaAzurePolicyDetails
15346		err := json.Unmarshal(body, &hvrapd)
15347		return hvrapd, err
15348	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails):
15349		var hvrbpd HyperVReplicaBasePolicyDetails
15350		err := json.Unmarshal(body, &hvrbpd)
15351		return hvrbpd, err
15352	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2):
15353		var hvrbpd HyperVReplicaBluePolicyDetails
15354		err := json.Unmarshal(body, &hvrbpd)
15355		return hvrbpd, err
15356	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012):
15357		var hvrpd HyperVReplicaPolicyDetails
15358		err := json.Unmarshal(body, &hvrpd)
15359		return hvrpd, err
15360	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2):
15361		var imavpd InMageAzureV2PolicyDetails
15362		err := json.Unmarshal(body, &imavpd)
15363		return imavpd, err
15364	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails):
15365		var imbpd InMageBasePolicyDetails
15366		err := json.Unmarshal(body, &imbpd)
15367		return imbpd, err
15368	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage):
15369		var impd InMagePolicyDetails
15370		err := json.Unmarshal(body, &impd)
15371		return impd, err
15372	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm):
15373		var imrpd InMageRcmPolicyDetails
15374		err := json.Unmarshal(body, &imrpd)
15375		return imrpd, err
15376	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration):
15377		var rampd RcmAzureMigrationPolicyDetails
15378		err := json.Unmarshal(body, &rampd)
15379		return rampd, err
15380	case string(InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt):
15381		var vcpd VmwareCbtPolicyDetails
15382		err := json.Unmarshal(body, &vcpd)
15383		return vcpd, err
15384	default:
15385		var ppsd PolicyProviderSpecificDetails
15386		err := json.Unmarshal(body, &ppsd)
15387		return ppsd, err
15388	}
15389}
15390func unmarshalBasicPolicyProviderSpecificDetailsArray(body []byte) ([]BasicPolicyProviderSpecificDetails, error) {
15391	var rawMessages []*json.RawMessage
15392	err := json.Unmarshal(body, &rawMessages)
15393	if err != nil {
15394		return nil, err
15395	}
15396
15397	ppsdArray := make([]BasicPolicyProviderSpecificDetails, len(rawMessages))
15398
15399	for index, rawMessage := range rawMessages {
15400		ppsd, err := unmarshalBasicPolicyProviderSpecificDetails(*rawMessage)
15401		if err != nil {
15402			return nil, err
15403		}
15404		ppsdArray[index] = ppsd
15405	}
15406	return ppsdArray, nil
15407}
15408
15409// MarshalJSON is the custom marshaler for PolicyProviderSpecificDetails.
15410func (ppsd PolicyProviderSpecificDetails) MarshalJSON() ([]byte, error) {
15411	ppsd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails
15412	objectMap := make(map[string]interface{})
15413	if ppsd.InstanceType != "" {
15414		objectMap["instanceType"] = ppsd.InstanceType
15415	}
15416	return json.Marshal(objectMap)
15417}
15418
15419// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15420func (ppsd PolicyProviderSpecificDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
15421	return nil, false
15422}
15423
15424// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15425func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
15426	return nil, false
15427}
15428
15429// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15430func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
15431	return nil, false
15432}
15433
15434// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15435func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
15436	return nil, false
15437}
15438
15439// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15440func (ppsd PolicyProviderSpecificDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
15441	return nil, false
15442}
15443
15444// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15445func (ppsd PolicyProviderSpecificDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
15446	return nil, false
15447}
15448
15449// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15450func (ppsd PolicyProviderSpecificDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
15451	return nil, false
15452}
15453
15454// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15455func (ppsd PolicyProviderSpecificDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
15456	return nil, false
15457}
15458
15459// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15460func (ppsd PolicyProviderSpecificDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
15461	return nil, false
15462}
15463
15464// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15465func (ppsd PolicyProviderSpecificDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
15466	return nil, false
15467}
15468
15469// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15470func (ppsd PolicyProviderSpecificDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
15471	return nil, false
15472}
15473
15474// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15475func (ppsd PolicyProviderSpecificDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
15476	return &ppsd, true
15477}
15478
15479// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for PolicyProviderSpecificDetails.
15480func (ppsd PolicyProviderSpecificDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
15481	return &ppsd, true
15482}
15483
15484// BasicPolicyProviderSpecificInput base class for provider specific input
15485type BasicPolicyProviderSpecificInput interface {
15486	AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool)
15487	AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool)
15488	AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool)
15489	AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool)
15490	AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool)
15491	AsInMagePolicyInput() (*InMagePolicyInput, bool)
15492	AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool)
15493	AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool)
15494	AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool)
15495}
15496
15497// PolicyProviderSpecificInput base class for provider specific input
15498type PolicyProviderSpecificInput struct {
15499	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
15500	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
15501}
15502
15503func unmarshalBasicPolicyProviderSpecificInput(body []byte) (BasicPolicyProviderSpecificInput, error) {
15504	var m map[string]interface{}
15505	err := json.Unmarshal(body, &m)
15506	if err != nil {
15507		return nil, err
15508	}
15509
15510	switch m["instanceType"] {
15511	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A):
15512		var apci A2APolicyCreationInput
15513		err := json.Unmarshal(body, &apci)
15514		return apci, err
15515	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure):
15516		var hvrapi HyperVReplicaAzurePolicyInput
15517		err := json.Unmarshal(body, &hvrapi)
15518		return hvrapi, err
15519	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2):
15520		var hvrbpi HyperVReplicaBluePolicyInput
15521		err := json.Unmarshal(body, &hvrbpi)
15522		return hvrbpi, err
15523	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012):
15524		var hvrpi HyperVReplicaPolicyInput
15525		err := json.Unmarshal(body, &hvrpi)
15526		return hvrpi, err
15527	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2):
15528		var imavpi InMageAzureV2PolicyInput
15529		err := json.Unmarshal(body, &imavpi)
15530		return imavpi, err
15531	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage):
15532		var impi InMagePolicyInput
15533		err := json.Unmarshal(body, &impi)
15534		return impi, err
15535	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm):
15536		var imrpci InMageRcmPolicyCreationInput
15537		err := json.Unmarshal(body, &imrpci)
15538		return imrpci, err
15539	case string(InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt):
15540		var vmcpci VMwareCbtPolicyCreationInput
15541		err := json.Unmarshal(body, &vmcpci)
15542		return vmcpci, err
15543	default:
15544		var ppsi PolicyProviderSpecificInput
15545		err := json.Unmarshal(body, &ppsi)
15546		return ppsi, err
15547	}
15548}
15549func unmarshalBasicPolicyProviderSpecificInputArray(body []byte) ([]BasicPolicyProviderSpecificInput, error) {
15550	var rawMessages []*json.RawMessage
15551	err := json.Unmarshal(body, &rawMessages)
15552	if err != nil {
15553		return nil, err
15554	}
15555
15556	ppsiArray := make([]BasicPolicyProviderSpecificInput, len(rawMessages))
15557
15558	for index, rawMessage := range rawMessages {
15559		ppsi, err := unmarshalBasicPolicyProviderSpecificInput(*rawMessage)
15560		if err != nil {
15561			return nil, err
15562		}
15563		ppsiArray[index] = ppsi
15564	}
15565	return ppsiArray, nil
15566}
15567
15568// MarshalJSON is the custom marshaler for PolicyProviderSpecificInput.
15569func (ppsi PolicyProviderSpecificInput) MarshalJSON() ([]byte, error) {
15570	ppsi.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput
15571	objectMap := make(map[string]interface{})
15572	if ppsi.InstanceType != "" {
15573		objectMap["instanceType"] = ppsi.InstanceType
15574	}
15575	return json.Marshal(objectMap)
15576}
15577
15578// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15579func (ppsi PolicyProviderSpecificInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
15580	return nil, false
15581}
15582
15583// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15584func (ppsi PolicyProviderSpecificInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
15585	return nil, false
15586}
15587
15588// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15589func (ppsi PolicyProviderSpecificInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
15590	return nil, false
15591}
15592
15593// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15594func (ppsi PolicyProviderSpecificInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
15595	return nil, false
15596}
15597
15598// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15599func (ppsi PolicyProviderSpecificInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
15600	return nil, false
15601}
15602
15603// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15604func (ppsi PolicyProviderSpecificInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
15605	return nil, false
15606}
15607
15608// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15609func (ppsi PolicyProviderSpecificInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
15610	return nil, false
15611}
15612
15613// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15614func (ppsi PolicyProviderSpecificInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
15615	return nil, false
15616}
15617
15618// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15619func (ppsi PolicyProviderSpecificInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
15620	return &ppsi, true
15621}
15622
15623// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for PolicyProviderSpecificInput.
15624func (ppsi PolicyProviderSpecificInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
15625	return &ppsi, true
15626}
15627
15628// ProcessServer details of the Process Server.
15629type ProcessServer struct {
15630	// FriendlyName - The Process Server's friendly name.
15631	FriendlyName *string `json:"friendlyName,omitempty"`
15632	// ID - The Process Server Id.
15633	ID *string `json:"id,omitempty"`
15634	// IPAddress - The IP address of the server.
15635	IPAddress *string `json:"ipAddress,omitempty"`
15636	// OsType - The OS type of the server.
15637	OsType *string `json:"osType,omitempty"`
15638	// AgentVersion - The version of the scout component on the server.
15639	AgentVersion *string `json:"agentVersion,omitempty"`
15640	// LastHeartbeat - The last heartbeat received from the server.
15641	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
15642	// VersionStatus - Version status
15643	VersionStatus *string `json:"versionStatus,omitempty"`
15644	// MobilityServiceUpdates - The list of the mobility service updates available on the Process Server.
15645	MobilityServiceUpdates *[]MobilityServiceUpdate `json:"mobilityServiceUpdates,omitempty"`
15646	// HostID - The agent generated Id.
15647	HostID *string `json:"hostId,omitempty"`
15648	// MachineCount - The servers configured with this PS.
15649	MachineCount *string `json:"machineCount,omitempty"`
15650	// ReplicationPairCount - The number of replication pairs configured in this PS.
15651	ReplicationPairCount *string `json:"replicationPairCount,omitempty"`
15652	// SystemLoad - The percentage of the system load.
15653	SystemLoad *string `json:"systemLoad,omitempty"`
15654	// SystemLoadStatus - The system load status.
15655	SystemLoadStatus *string `json:"systemLoadStatus,omitempty"`
15656	// CPULoad - The percentage of the CPU load.
15657	CPULoad *string `json:"cpuLoad,omitempty"`
15658	// CPULoadStatus - The CPU load status.
15659	CPULoadStatus *string `json:"cpuLoadStatus,omitempty"`
15660	// TotalMemoryInBytes - The total memory.
15661	TotalMemoryInBytes *int64 `json:"totalMemoryInBytes,omitempty"`
15662	// AvailableMemoryInBytes - The available memory.
15663	AvailableMemoryInBytes *int64 `json:"availableMemoryInBytes,omitempty"`
15664	// MemoryUsageStatus - The memory usage status.
15665	MemoryUsageStatus *string `json:"memoryUsageStatus,omitempty"`
15666	// TotalSpaceInBytes - The total space.
15667	TotalSpaceInBytes *int64 `json:"totalSpaceInBytes,omitempty"`
15668	// AvailableSpaceInBytes - The available space.
15669	AvailableSpaceInBytes *int64 `json:"availableSpaceInBytes,omitempty"`
15670	// SpaceUsageStatus - The space usage status.
15671	SpaceUsageStatus *string `json:"spaceUsageStatus,omitempty"`
15672	// PsServiceStatus - The PS service status.
15673	PsServiceStatus *string `json:"psServiceStatus,omitempty"`
15674	// SslCertExpiryDate - The PS SSL cert expiry date.
15675	SslCertExpiryDate *date.Time `json:"sslCertExpiryDate,omitempty"`
15676	// SslCertExpiryRemainingDays - CS SSL cert expiry date.
15677	SslCertExpiryRemainingDays *int32 `json:"sslCertExpiryRemainingDays,omitempty"`
15678	// OsVersion - OS Version of the process server. Note: This will get populated if user has CS version greater than 9.12.0.0.
15679	OsVersion *string `json:"osVersion,omitempty"`
15680	// HealthErrors - Health errors.
15681	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
15682	// AgentExpiryDate - Agent expiry date.
15683	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
15684	// AgentVersionDetails - The agent version details.
15685	AgentVersionDetails *VersionDetails `json:"agentVersionDetails,omitempty"`
15686	// Health - READ-ONLY; The health of Process Server. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
15687	Health ProtectionHealth `json:"health,omitempty"`
15688	// PsStatsRefreshTime - READ-ONLY; The process server stats refresh time.
15689	PsStatsRefreshTime *date.Time `json:"psStatsRefreshTime,omitempty"`
15690	// ThroughputUploadPendingDataInBytes - READ-ONLY; The uploading pending data in bytes.
15691	ThroughputUploadPendingDataInBytes *int64 `json:"throughputUploadPendingDataInBytes,omitempty"`
15692	// ThroughputInMBps - READ-ONLY; The throughput in MBps.
15693	ThroughputInMBps *int64 `json:"throughputInMBps,omitempty"`
15694	// ThroughputInBytes - READ-ONLY; The throughput in bytes.
15695	ThroughputInBytes *int64 `json:"throughputInBytes,omitempty"`
15696	// ThroughputStatus - READ-ONLY; The throughput status.
15697	ThroughputStatus *string `json:"throughputStatus,omitempty"`
15698	// MarsCommunicationStatus - READ-ONLY; The MARS communication status.
15699	MarsCommunicationStatus *string `json:"marsCommunicationStatus,omitempty"`
15700	// MarsRegistrationStatus - READ-ONLY; The MARS registration status.
15701	MarsRegistrationStatus *string `json:"marsRegistrationStatus,omitempty"`
15702}
15703
15704// MarshalJSON is the custom marshaler for ProcessServer.
15705func (ps ProcessServer) MarshalJSON() ([]byte, error) {
15706	objectMap := make(map[string]interface{})
15707	if ps.FriendlyName != nil {
15708		objectMap["friendlyName"] = ps.FriendlyName
15709	}
15710	if ps.ID != nil {
15711		objectMap["id"] = ps.ID
15712	}
15713	if ps.IPAddress != nil {
15714		objectMap["ipAddress"] = ps.IPAddress
15715	}
15716	if ps.OsType != nil {
15717		objectMap["osType"] = ps.OsType
15718	}
15719	if ps.AgentVersion != nil {
15720		objectMap["agentVersion"] = ps.AgentVersion
15721	}
15722	if ps.LastHeartbeat != nil {
15723		objectMap["lastHeartbeat"] = ps.LastHeartbeat
15724	}
15725	if ps.VersionStatus != nil {
15726		objectMap["versionStatus"] = ps.VersionStatus
15727	}
15728	if ps.MobilityServiceUpdates != nil {
15729		objectMap["mobilityServiceUpdates"] = ps.MobilityServiceUpdates
15730	}
15731	if ps.HostID != nil {
15732		objectMap["hostId"] = ps.HostID
15733	}
15734	if ps.MachineCount != nil {
15735		objectMap["machineCount"] = ps.MachineCount
15736	}
15737	if ps.ReplicationPairCount != nil {
15738		objectMap["replicationPairCount"] = ps.ReplicationPairCount
15739	}
15740	if ps.SystemLoad != nil {
15741		objectMap["systemLoad"] = ps.SystemLoad
15742	}
15743	if ps.SystemLoadStatus != nil {
15744		objectMap["systemLoadStatus"] = ps.SystemLoadStatus
15745	}
15746	if ps.CPULoad != nil {
15747		objectMap["cpuLoad"] = ps.CPULoad
15748	}
15749	if ps.CPULoadStatus != nil {
15750		objectMap["cpuLoadStatus"] = ps.CPULoadStatus
15751	}
15752	if ps.TotalMemoryInBytes != nil {
15753		objectMap["totalMemoryInBytes"] = ps.TotalMemoryInBytes
15754	}
15755	if ps.AvailableMemoryInBytes != nil {
15756		objectMap["availableMemoryInBytes"] = ps.AvailableMemoryInBytes
15757	}
15758	if ps.MemoryUsageStatus != nil {
15759		objectMap["memoryUsageStatus"] = ps.MemoryUsageStatus
15760	}
15761	if ps.TotalSpaceInBytes != nil {
15762		objectMap["totalSpaceInBytes"] = ps.TotalSpaceInBytes
15763	}
15764	if ps.AvailableSpaceInBytes != nil {
15765		objectMap["availableSpaceInBytes"] = ps.AvailableSpaceInBytes
15766	}
15767	if ps.SpaceUsageStatus != nil {
15768		objectMap["spaceUsageStatus"] = ps.SpaceUsageStatus
15769	}
15770	if ps.PsServiceStatus != nil {
15771		objectMap["psServiceStatus"] = ps.PsServiceStatus
15772	}
15773	if ps.SslCertExpiryDate != nil {
15774		objectMap["sslCertExpiryDate"] = ps.SslCertExpiryDate
15775	}
15776	if ps.SslCertExpiryRemainingDays != nil {
15777		objectMap["sslCertExpiryRemainingDays"] = ps.SslCertExpiryRemainingDays
15778	}
15779	if ps.OsVersion != nil {
15780		objectMap["osVersion"] = ps.OsVersion
15781	}
15782	if ps.HealthErrors != nil {
15783		objectMap["healthErrors"] = ps.HealthErrors
15784	}
15785	if ps.AgentExpiryDate != nil {
15786		objectMap["agentExpiryDate"] = ps.AgentExpiryDate
15787	}
15788	if ps.AgentVersionDetails != nil {
15789		objectMap["agentVersionDetails"] = ps.AgentVersionDetails
15790	}
15791	return json.Marshal(objectMap)
15792}
15793
15794// ProcessServerDetails process server details.
15795type ProcessServerDetails struct {
15796	// ID - READ-ONLY; The process server Id.
15797	ID *string `json:"id,omitempty"`
15798	// Name - READ-ONLY; The process server name.
15799	Name *string `json:"name,omitempty"`
15800	// Version - READ-ONLY; The process server version.
15801	Version *string `json:"version,omitempty"`
15802	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the process server.
15803	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
15804	// TotalMemoryInBytes - READ-ONLY; The total memory.
15805	TotalMemoryInBytes *int64 `json:"totalMemoryInBytes,omitempty"`
15806	// AvailableMemoryInBytes - READ-ONLY; The available memory.
15807	AvailableMemoryInBytes *int64 `json:"availableMemoryInBytes,omitempty"`
15808	// UsedMemoryInBytes - READ-ONLY; The used memory.
15809	UsedMemoryInBytes *int64 `json:"usedMemoryInBytes,omitempty"`
15810	// MemoryUsagePercentage - READ-ONLY; The memory usage percentage.
15811	MemoryUsagePercentage *float64 `json:"memoryUsagePercentage,omitempty"`
15812	// TotalSpaceInBytes - READ-ONLY; The total disk space.
15813	TotalSpaceInBytes *int64 `json:"totalSpaceInBytes,omitempty"`
15814	// AvailableSpaceInBytes - READ-ONLY; The available disk space.
15815	AvailableSpaceInBytes *int64 `json:"availableSpaceInBytes,omitempty"`
15816	// UsedSpaceInBytes - READ-ONLY; The used disk space.
15817	UsedSpaceInBytes *int64 `json:"usedSpaceInBytes,omitempty"`
15818	// FreeSpacePercentage - READ-ONLY; The free disk space percentage.
15819	FreeSpacePercentage *float64 `json:"freeSpacePercentage,omitempty"`
15820	// ThroughputUploadPendingDataInBytes - READ-ONLY; The uploading pending data in bytes.
15821	ThroughputUploadPendingDataInBytes *int64 `json:"throughputUploadPendingDataInBytes,omitempty"`
15822	// ThroughputInBytes - READ-ONLY; The throughput in bytes.
15823	ThroughputInBytes *int64 `json:"throughputInBytes,omitempty"`
15824	// ProcessorUsagePercentage - READ-ONLY; The processor usage percentage.
15825	ProcessorUsagePercentage *float64 `json:"processorUsagePercentage,omitempty"`
15826	// Health - READ-ONLY; The health of the process server. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
15827	Health ProtectionHealth `json:"health,omitempty"`
15828	// HealthErrors - READ-ONLY; The health errors.
15829	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
15830	// 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'
15831	HistoricHealth ProtectionHealth `json:"historicHealth,omitempty"`
15832}
15833
15834// ProtectableItem replication protected item
15835type ProtectableItem struct {
15836	autorest.Response `json:"-"`
15837	// Properties - The custom data.
15838	Properties *ProtectableItemProperties `json:"properties,omitempty"`
15839	// ID - READ-ONLY; Resource Id
15840	ID *string `json:"id,omitempty"`
15841	// Name - READ-ONLY; Resource Name
15842	Name *string `json:"name,omitempty"`
15843	// Type - READ-ONLY; Resource Type
15844	Type *string `json:"type,omitempty"`
15845	// Location - Resource Location
15846	Location *string `json:"location,omitempty"`
15847}
15848
15849// MarshalJSON is the custom marshaler for ProtectableItem.
15850func (pi ProtectableItem) MarshalJSON() ([]byte, error) {
15851	objectMap := make(map[string]interface{})
15852	if pi.Properties != nil {
15853		objectMap["properties"] = pi.Properties
15854	}
15855	if pi.Location != nil {
15856		objectMap["location"] = pi.Location
15857	}
15858	return json.Marshal(objectMap)
15859}
15860
15861// ProtectableItemCollection protectable item collection.
15862type ProtectableItemCollection struct {
15863	autorest.Response `json:"-"`
15864	// Value - The Protectable item details.
15865	Value *[]ProtectableItem `json:"value,omitempty"`
15866	// NextLink - The value of next link.
15867	NextLink *string `json:"nextLink,omitempty"`
15868}
15869
15870// ProtectableItemCollectionIterator provides access to a complete listing of ProtectableItem values.
15871type ProtectableItemCollectionIterator struct {
15872	i    int
15873	page ProtectableItemCollectionPage
15874}
15875
15876// NextWithContext advances to the next value.  If there was an error making
15877// the request the iterator does not advance and the error is returned.
15878func (iter *ProtectableItemCollectionIterator) NextWithContext(ctx context.Context) (err error) {
15879	if tracing.IsEnabled() {
15880		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectableItemCollectionIterator.NextWithContext")
15881		defer func() {
15882			sc := -1
15883			if iter.Response().Response.Response != nil {
15884				sc = iter.Response().Response.Response.StatusCode
15885			}
15886			tracing.EndSpan(ctx, sc, err)
15887		}()
15888	}
15889	iter.i++
15890	if iter.i < len(iter.page.Values()) {
15891		return nil
15892	}
15893	err = iter.page.NextWithContext(ctx)
15894	if err != nil {
15895		iter.i--
15896		return err
15897	}
15898	iter.i = 0
15899	return nil
15900}
15901
15902// Next advances to the next value.  If there was an error making
15903// the request the iterator does not advance and the error is returned.
15904// Deprecated: Use NextWithContext() instead.
15905func (iter *ProtectableItemCollectionIterator) Next() error {
15906	return iter.NextWithContext(context.Background())
15907}
15908
15909// NotDone returns true if the enumeration should be started or is not yet complete.
15910func (iter ProtectableItemCollectionIterator) NotDone() bool {
15911	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15912}
15913
15914// Response returns the raw server response from the last page request.
15915func (iter ProtectableItemCollectionIterator) Response() ProtectableItemCollection {
15916	return iter.page.Response()
15917}
15918
15919// Value returns the current value or a zero-initialized value if the
15920// iterator has advanced beyond the end of the collection.
15921func (iter ProtectableItemCollectionIterator) Value() ProtectableItem {
15922	if !iter.page.NotDone() {
15923		return ProtectableItem{}
15924	}
15925	return iter.page.Values()[iter.i]
15926}
15927
15928// Creates a new instance of the ProtectableItemCollectionIterator type.
15929func NewProtectableItemCollectionIterator(page ProtectableItemCollectionPage) ProtectableItemCollectionIterator {
15930	return ProtectableItemCollectionIterator{page: page}
15931}
15932
15933// IsEmpty returns true if the ListResult contains no values.
15934func (pic ProtectableItemCollection) IsEmpty() bool {
15935	return pic.Value == nil || len(*pic.Value) == 0
15936}
15937
15938// hasNextLink returns true if the NextLink is not empty.
15939func (pic ProtectableItemCollection) hasNextLink() bool {
15940	return pic.NextLink != nil && len(*pic.NextLink) != 0
15941}
15942
15943// protectableItemCollectionPreparer prepares a request to retrieve the next set of results.
15944// It returns nil if no more results exist.
15945func (pic ProtectableItemCollection) protectableItemCollectionPreparer(ctx context.Context) (*http.Request, error) {
15946	if !pic.hasNextLink() {
15947		return nil, nil
15948	}
15949	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15950		autorest.AsJSON(),
15951		autorest.AsGet(),
15952		autorest.WithBaseURL(to.String(pic.NextLink)))
15953}
15954
15955// ProtectableItemCollectionPage contains a page of ProtectableItem values.
15956type ProtectableItemCollectionPage struct {
15957	fn  func(context.Context, ProtectableItemCollection) (ProtectableItemCollection, error)
15958	pic ProtectableItemCollection
15959}
15960
15961// NextWithContext advances to the next page of values.  If there was an error making
15962// the request the page does not advance and the error is returned.
15963func (page *ProtectableItemCollectionPage) NextWithContext(ctx context.Context) (err error) {
15964	if tracing.IsEnabled() {
15965		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectableItemCollectionPage.NextWithContext")
15966		defer func() {
15967			sc := -1
15968			if page.Response().Response.Response != nil {
15969				sc = page.Response().Response.Response.StatusCode
15970			}
15971			tracing.EndSpan(ctx, sc, err)
15972		}()
15973	}
15974	for {
15975		next, err := page.fn(ctx, page.pic)
15976		if err != nil {
15977			return err
15978		}
15979		page.pic = next
15980		if !next.hasNextLink() || !next.IsEmpty() {
15981			break
15982		}
15983	}
15984	return nil
15985}
15986
15987// Next advances to the next page of values.  If there was an error making
15988// the request the page does not advance and the error is returned.
15989// Deprecated: Use NextWithContext() instead.
15990func (page *ProtectableItemCollectionPage) Next() error {
15991	return page.NextWithContext(context.Background())
15992}
15993
15994// NotDone returns true if the page enumeration should be started or is not yet complete.
15995func (page ProtectableItemCollectionPage) NotDone() bool {
15996	return !page.pic.IsEmpty()
15997}
15998
15999// Response returns the raw server response from the last page request.
16000func (page ProtectableItemCollectionPage) Response() ProtectableItemCollection {
16001	return page.pic
16002}
16003
16004// Values returns the slice of values for the current page or nil if there are no values.
16005func (page ProtectableItemCollectionPage) Values() []ProtectableItem {
16006	if page.pic.IsEmpty() {
16007		return nil
16008	}
16009	return *page.pic.Value
16010}
16011
16012// Creates a new instance of the ProtectableItemCollectionPage type.
16013func NewProtectableItemCollectionPage(cur ProtectableItemCollection, getNextPage func(context.Context, ProtectableItemCollection) (ProtectableItemCollection, error)) ProtectableItemCollectionPage {
16014	return ProtectableItemCollectionPage{
16015		fn:  getNextPage,
16016		pic: cur,
16017	}
16018}
16019
16020// ProtectableItemProperties replication protected item custom data details.
16021type ProtectableItemProperties struct {
16022	// FriendlyName - The name.
16023	FriendlyName *string `json:"friendlyName,omitempty"`
16024	// ProtectionStatus - The protection status.
16025	ProtectionStatus *string `json:"protectionStatus,omitempty"`
16026	// ReplicationProtectedItemID - The ARM resource of protected items.
16027	ReplicationProtectedItemID *string `json:"replicationProtectedItemId,omitempty"`
16028	// RecoveryServicesProviderID - The recovery provider ARM Id.
16029	RecoveryServicesProviderID *string `json:"recoveryServicesProviderId,omitempty"`
16030	// ProtectionReadinessErrors - The Current protection readiness errors.
16031	ProtectionReadinessErrors *[]string `json:"protectionReadinessErrors,omitempty"`
16032	// SupportedReplicationProviders - The list of replication providers supported for the protectable item.
16033	SupportedReplicationProviders *[]string `json:"supportedReplicationProviders,omitempty"`
16034	// CustomDetails - The Replication provider custom settings.
16035	CustomDetails BasicConfigurationSettings `json:"customDetails,omitempty"`
16036}
16037
16038// UnmarshalJSON is the custom unmarshaler for ProtectableItemProperties struct.
16039func (pip *ProtectableItemProperties) UnmarshalJSON(body []byte) error {
16040	var m map[string]*json.RawMessage
16041	err := json.Unmarshal(body, &m)
16042	if err != nil {
16043		return err
16044	}
16045	for k, v := range m {
16046		switch k {
16047		case "friendlyName":
16048			if v != nil {
16049				var friendlyName string
16050				err = json.Unmarshal(*v, &friendlyName)
16051				if err != nil {
16052					return err
16053				}
16054				pip.FriendlyName = &friendlyName
16055			}
16056		case "protectionStatus":
16057			if v != nil {
16058				var protectionStatus string
16059				err = json.Unmarshal(*v, &protectionStatus)
16060				if err != nil {
16061					return err
16062				}
16063				pip.ProtectionStatus = &protectionStatus
16064			}
16065		case "replicationProtectedItemId":
16066			if v != nil {
16067				var replicationProtectedItemID string
16068				err = json.Unmarshal(*v, &replicationProtectedItemID)
16069				if err != nil {
16070					return err
16071				}
16072				pip.ReplicationProtectedItemID = &replicationProtectedItemID
16073			}
16074		case "recoveryServicesProviderId":
16075			if v != nil {
16076				var recoveryServicesProviderID string
16077				err = json.Unmarshal(*v, &recoveryServicesProviderID)
16078				if err != nil {
16079					return err
16080				}
16081				pip.RecoveryServicesProviderID = &recoveryServicesProviderID
16082			}
16083		case "protectionReadinessErrors":
16084			if v != nil {
16085				var protectionReadinessErrors []string
16086				err = json.Unmarshal(*v, &protectionReadinessErrors)
16087				if err != nil {
16088					return err
16089				}
16090				pip.ProtectionReadinessErrors = &protectionReadinessErrors
16091			}
16092		case "supportedReplicationProviders":
16093			if v != nil {
16094				var supportedReplicationProviders []string
16095				err = json.Unmarshal(*v, &supportedReplicationProviders)
16096				if err != nil {
16097					return err
16098				}
16099				pip.SupportedReplicationProviders = &supportedReplicationProviders
16100			}
16101		case "customDetails":
16102			if v != nil {
16103				customDetails, err := unmarshalBasicConfigurationSettings(*v)
16104				if err != nil {
16105					return err
16106				}
16107				pip.CustomDetails = customDetails
16108			}
16109		}
16110	}
16111
16112	return nil
16113}
16114
16115// ProtectableItemQueryParameter query parameter to enumerate Protectable items.
16116type ProtectableItemQueryParameter struct {
16117	// State - State of the Protectable item query filter.
16118	State *string `json:"state,omitempty"`
16119}
16120
16121// ProtectedItemsQueryParameter query parameter to enumerate protected items.
16122type ProtectedItemsQueryParameter struct {
16123	// SourceFabricName - The source fabric name filter.
16124	SourceFabricName *string `json:"sourceFabricName,omitempty"`
16125	// RecoveryPlanName - The recovery plan filter.
16126	RecoveryPlanName *string `json:"recoveryPlanName,omitempty"`
16127	// VCenterName - The vCenter name filter.
16128	VCenterName *string `json:"vCenterName,omitempty"`
16129	// InstanceType - The replication provider type.
16130	InstanceType *string `json:"instanceType,omitempty"`
16131	// MultiVMGroupCreateOption - Whether Multi VM group is auto created or specified by user. Possible values include: 'AutoCreated', 'UserSpecified'
16132	MultiVMGroupCreateOption MultiVMGroupCreateOption `json:"multiVmGroupCreateOption,omitempty"`
16133}
16134
16135// ProtectionContainer protection container details.
16136type ProtectionContainer struct {
16137	autorest.Response `json:"-"`
16138	// Properties - The custom data.
16139	Properties *ProtectionContainerProperties `json:"properties,omitempty"`
16140	// ID - READ-ONLY; Resource Id
16141	ID *string `json:"id,omitempty"`
16142	// Name - READ-ONLY; Resource Name
16143	Name *string `json:"name,omitempty"`
16144	// Type - READ-ONLY; Resource Type
16145	Type *string `json:"type,omitempty"`
16146	// Location - Resource Location
16147	Location *string `json:"location,omitempty"`
16148}
16149
16150// MarshalJSON is the custom marshaler for ProtectionContainer.
16151func (pc ProtectionContainer) MarshalJSON() ([]byte, error) {
16152	objectMap := make(map[string]interface{})
16153	if pc.Properties != nil {
16154		objectMap["properties"] = pc.Properties
16155	}
16156	if pc.Location != nil {
16157		objectMap["location"] = pc.Location
16158	}
16159	return json.Marshal(objectMap)
16160}
16161
16162// ProtectionContainerCollection protection Container collection.
16163type ProtectionContainerCollection struct {
16164	autorest.Response `json:"-"`
16165	// Value - The Protection Container details.
16166	Value *[]ProtectionContainer `json:"value,omitempty"`
16167	// NextLink - The value of next link.
16168	NextLink *string `json:"nextLink,omitempty"`
16169}
16170
16171// ProtectionContainerCollectionIterator provides access to a complete listing of ProtectionContainer
16172// values.
16173type ProtectionContainerCollectionIterator struct {
16174	i    int
16175	page ProtectionContainerCollectionPage
16176}
16177
16178// NextWithContext advances to the next value.  If there was an error making
16179// the request the iterator does not advance and the error is returned.
16180func (iter *ProtectionContainerCollectionIterator) NextWithContext(ctx context.Context) (err error) {
16181	if tracing.IsEnabled() {
16182		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerCollectionIterator.NextWithContext")
16183		defer func() {
16184			sc := -1
16185			if iter.Response().Response.Response != nil {
16186				sc = iter.Response().Response.Response.StatusCode
16187			}
16188			tracing.EndSpan(ctx, sc, err)
16189		}()
16190	}
16191	iter.i++
16192	if iter.i < len(iter.page.Values()) {
16193		return nil
16194	}
16195	err = iter.page.NextWithContext(ctx)
16196	if err != nil {
16197		iter.i--
16198		return err
16199	}
16200	iter.i = 0
16201	return nil
16202}
16203
16204// Next advances to the next value.  If there was an error making
16205// the request the iterator does not advance and the error is returned.
16206// Deprecated: Use NextWithContext() instead.
16207func (iter *ProtectionContainerCollectionIterator) Next() error {
16208	return iter.NextWithContext(context.Background())
16209}
16210
16211// NotDone returns true if the enumeration should be started or is not yet complete.
16212func (iter ProtectionContainerCollectionIterator) NotDone() bool {
16213	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16214}
16215
16216// Response returns the raw server response from the last page request.
16217func (iter ProtectionContainerCollectionIterator) Response() ProtectionContainerCollection {
16218	return iter.page.Response()
16219}
16220
16221// Value returns the current value or a zero-initialized value if the
16222// iterator has advanced beyond the end of the collection.
16223func (iter ProtectionContainerCollectionIterator) Value() ProtectionContainer {
16224	if !iter.page.NotDone() {
16225		return ProtectionContainer{}
16226	}
16227	return iter.page.Values()[iter.i]
16228}
16229
16230// Creates a new instance of the ProtectionContainerCollectionIterator type.
16231func NewProtectionContainerCollectionIterator(page ProtectionContainerCollectionPage) ProtectionContainerCollectionIterator {
16232	return ProtectionContainerCollectionIterator{page: page}
16233}
16234
16235// IsEmpty returns true if the ListResult contains no values.
16236func (pcc ProtectionContainerCollection) IsEmpty() bool {
16237	return pcc.Value == nil || len(*pcc.Value) == 0
16238}
16239
16240// hasNextLink returns true if the NextLink is not empty.
16241func (pcc ProtectionContainerCollection) hasNextLink() bool {
16242	return pcc.NextLink != nil && len(*pcc.NextLink) != 0
16243}
16244
16245// protectionContainerCollectionPreparer prepares a request to retrieve the next set of results.
16246// It returns nil if no more results exist.
16247func (pcc ProtectionContainerCollection) protectionContainerCollectionPreparer(ctx context.Context) (*http.Request, error) {
16248	if !pcc.hasNextLink() {
16249		return nil, nil
16250	}
16251	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16252		autorest.AsJSON(),
16253		autorest.AsGet(),
16254		autorest.WithBaseURL(to.String(pcc.NextLink)))
16255}
16256
16257// ProtectionContainerCollectionPage contains a page of ProtectionContainer values.
16258type ProtectionContainerCollectionPage struct {
16259	fn  func(context.Context, ProtectionContainerCollection) (ProtectionContainerCollection, error)
16260	pcc ProtectionContainerCollection
16261}
16262
16263// NextWithContext advances to the next page of values.  If there was an error making
16264// the request the page does not advance and the error is returned.
16265func (page *ProtectionContainerCollectionPage) NextWithContext(ctx context.Context) (err error) {
16266	if tracing.IsEnabled() {
16267		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerCollectionPage.NextWithContext")
16268		defer func() {
16269			sc := -1
16270			if page.Response().Response.Response != nil {
16271				sc = page.Response().Response.Response.StatusCode
16272			}
16273			tracing.EndSpan(ctx, sc, err)
16274		}()
16275	}
16276	for {
16277		next, err := page.fn(ctx, page.pcc)
16278		if err != nil {
16279			return err
16280		}
16281		page.pcc = next
16282		if !next.hasNextLink() || !next.IsEmpty() {
16283			break
16284		}
16285	}
16286	return nil
16287}
16288
16289// Next advances to the next page of values.  If there was an error making
16290// the request the page does not advance and the error is returned.
16291// Deprecated: Use NextWithContext() instead.
16292func (page *ProtectionContainerCollectionPage) Next() error {
16293	return page.NextWithContext(context.Background())
16294}
16295
16296// NotDone returns true if the page enumeration should be started or is not yet complete.
16297func (page ProtectionContainerCollectionPage) NotDone() bool {
16298	return !page.pcc.IsEmpty()
16299}
16300
16301// Response returns the raw server response from the last page request.
16302func (page ProtectionContainerCollectionPage) Response() ProtectionContainerCollection {
16303	return page.pcc
16304}
16305
16306// Values returns the slice of values for the current page or nil if there are no values.
16307func (page ProtectionContainerCollectionPage) Values() []ProtectionContainer {
16308	if page.pcc.IsEmpty() {
16309		return nil
16310	}
16311	return *page.pcc.Value
16312}
16313
16314// Creates a new instance of the ProtectionContainerCollectionPage type.
16315func NewProtectionContainerCollectionPage(cur ProtectionContainerCollection, getNextPage func(context.Context, ProtectionContainerCollection) (ProtectionContainerCollection, error)) ProtectionContainerCollectionPage {
16316	return ProtectionContainerCollectionPage{
16317		fn:  getNextPage,
16318		pcc: cur,
16319	}
16320}
16321
16322// ProtectionContainerFabricSpecificDetails base class for fabric specific details of container.
16323type ProtectionContainerFabricSpecificDetails struct {
16324	// InstanceType - READ-ONLY; Gets the class type. Overridden in derived classes.
16325	InstanceType *string `json:"instanceType,omitempty"`
16326}
16327
16328// ProtectionContainerMapping protection container mapping object.
16329type ProtectionContainerMapping struct {
16330	autorest.Response `json:"-"`
16331	// Properties - The custom data.
16332	Properties *ProtectionContainerMappingProperties `json:"properties,omitempty"`
16333	// ID - READ-ONLY; Resource Id
16334	ID *string `json:"id,omitempty"`
16335	// Name - READ-ONLY; Resource Name
16336	Name *string `json:"name,omitempty"`
16337	// Type - READ-ONLY; Resource Type
16338	Type *string `json:"type,omitempty"`
16339	// Location - Resource Location
16340	Location *string `json:"location,omitempty"`
16341}
16342
16343// MarshalJSON is the custom marshaler for ProtectionContainerMapping.
16344func (pcm ProtectionContainerMapping) MarshalJSON() ([]byte, error) {
16345	objectMap := make(map[string]interface{})
16346	if pcm.Properties != nil {
16347		objectMap["properties"] = pcm.Properties
16348	}
16349	if pcm.Location != nil {
16350		objectMap["location"] = pcm.Location
16351	}
16352	return json.Marshal(objectMap)
16353}
16354
16355// ProtectionContainerMappingCollection protection container mapping collection class.
16356type ProtectionContainerMappingCollection struct {
16357	autorest.Response `json:"-"`
16358	// Value - List of container mappings.
16359	Value *[]ProtectionContainerMapping `json:"value,omitempty"`
16360	// NextLink - Link to fetch rest of the data.
16361	NextLink *string `json:"nextLink,omitempty"`
16362}
16363
16364// ProtectionContainerMappingCollectionIterator provides access to a complete listing of
16365// ProtectionContainerMapping values.
16366type ProtectionContainerMappingCollectionIterator struct {
16367	i    int
16368	page ProtectionContainerMappingCollectionPage
16369}
16370
16371// NextWithContext advances to the next value.  If there was an error making
16372// the request the iterator does not advance and the error is returned.
16373func (iter *ProtectionContainerMappingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
16374	if tracing.IsEnabled() {
16375		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerMappingCollectionIterator.NextWithContext")
16376		defer func() {
16377			sc := -1
16378			if iter.Response().Response.Response != nil {
16379				sc = iter.Response().Response.Response.StatusCode
16380			}
16381			tracing.EndSpan(ctx, sc, err)
16382		}()
16383	}
16384	iter.i++
16385	if iter.i < len(iter.page.Values()) {
16386		return nil
16387	}
16388	err = iter.page.NextWithContext(ctx)
16389	if err != nil {
16390		iter.i--
16391		return err
16392	}
16393	iter.i = 0
16394	return nil
16395}
16396
16397// Next advances to the next value.  If there was an error making
16398// the request the iterator does not advance and the error is returned.
16399// Deprecated: Use NextWithContext() instead.
16400func (iter *ProtectionContainerMappingCollectionIterator) Next() error {
16401	return iter.NextWithContext(context.Background())
16402}
16403
16404// NotDone returns true if the enumeration should be started or is not yet complete.
16405func (iter ProtectionContainerMappingCollectionIterator) NotDone() bool {
16406	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16407}
16408
16409// Response returns the raw server response from the last page request.
16410func (iter ProtectionContainerMappingCollectionIterator) Response() ProtectionContainerMappingCollection {
16411	return iter.page.Response()
16412}
16413
16414// Value returns the current value or a zero-initialized value if the
16415// iterator has advanced beyond the end of the collection.
16416func (iter ProtectionContainerMappingCollectionIterator) Value() ProtectionContainerMapping {
16417	if !iter.page.NotDone() {
16418		return ProtectionContainerMapping{}
16419	}
16420	return iter.page.Values()[iter.i]
16421}
16422
16423// Creates a new instance of the ProtectionContainerMappingCollectionIterator type.
16424func NewProtectionContainerMappingCollectionIterator(page ProtectionContainerMappingCollectionPage) ProtectionContainerMappingCollectionIterator {
16425	return ProtectionContainerMappingCollectionIterator{page: page}
16426}
16427
16428// IsEmpty returns true if the ListResult contains no values.
16429func (pcmc ProtectionContainerMappingCollection) IsEmpty() bool {
16430	return pcmc.Value == nil || len(*pcmc.Value) == 0
16431}
16432
16433// hasNextLink returns true if the NextLink is not empty.
16434func (pcmc ProtectionContainerMappingCollection) hasNextLink() bool {
16435	return pcmc.NextLink != nil && len(*pcmc.NextLink) != 0
16436}
16437
16438// protectionContainerMappingCollectionPreparer prepares a request to retrieve the next set of results.
16439// It returns nil if no more results exist.
16440func (pcmc ProtectionContainerMappingCollection) protectionContainerMappingCollectionPreparer(ctx context.Context) (*http.Request, error) {
16441	if !pcmc.hasNextLink() {
16442		return nil, nil
16443	}
16444	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16445		autorest.AsJSON(),
16446		autorest.AsGet(),
16447		autorest.WithBaseURL(to.String(pcmc.NextLink)))
16448}
16449
16450// ProtectionContainerMappingCollectionPage contains a page of ProtectionContainerMapping values.
16451type ProtectionContainerMappingCollectionPage struct {
16452	fn   func(context.Context, ProtectionContainerMappingCollection) (ProtectionContainerMappingCollection, error)
16453	pcmc ProtectionContainerMappingCollection
16454}
16455
16456// NextWithContext advances to the next page of values.  If there was an error making
16457// the request the page does not advance and the error is returned.
16458func (page *ProtectionContainerMappingCollectionPage) NextWithContext(ctx context.Context) (err error) {
16459	if tracing.IsEnabled() {
16460		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerMappingCollectionPage.NextWithContext")
16461		defer func() {
16462			sc := -1
16463			if page.Response().Response.Response != nil {
16464				sc = page.Response().Response.Response.StatusCode
16465			}
16466			tracing.EndSpan(ctx, sc, err)
16467		}()
16468	}
16469	for {
16470		next, err := page.fn(ctx, page.pcmc)
16471		if err != nil {
16472			return err
16473		}
16474		page.pcmc = next
16475		if !next.hasNextLink() || !next.IsEmpty() {
16476			break
16477		}
16478	}
16479	return nil
16480}
16481
16482// Next advances to the next page of values.  If there was an error making
16483// the request the page does not advance and the error is returned.
16484// Deprecated: Use NextWithContext() instead.
16485func (page *ProtectionContainerMappingCollectionPage) Next() error {
16486	return page.NextWithContext(context.Background())
16487}
16488
16489// NotDone returns true if the page enumeration should be started or is not yet complete.
16490func (page ProtectionContainerMappingCollectionPage) NotDone() bool {
16491	return !page.pcmc.IsEmpty()
16492}
16493
16494// Response returns the raw server response from the last page request.
16495func (page ProtectionContainerMappingCollectionPage) Response() ProtectionContainerMappingCollection {
16496	return page.pcmc
16497}
16498
16499// Values returns the slice of values for the current page or nil if there are no values.
16500func (page ProtectionContainerMappingCollectionPage) Values() []ProtectionContainerMapping {
16501	if page.pcmc.IsEmpty() {
16502		return nil
16503	}
16504	return *page.pcmc.Value
16505}
16506
16507// Creates a new instance of the ProtectionContainerMappingCollectionPage type.
16508func NewProtectionContainerMappingCollectionPage(cur ProtectionContainerMappingCollection, getNextPage func(context.Context, ProtectionContainerMappingCollection) (ProtectionContainerMappingCollection, error)) ProtectionContainerMappingCollectionPage {
16509	return ProtectionContainerMappingCollectionPage{
16510		fn:   getNextPage,
16511		pcmc: cur,
16512	}
16513}
16514
16515// ProtectionContainerMappingProperties protection container mapping properties.
16516type ProtectionContainerMappingProperties struct {
16517	// TargetProtectionContainerID - Paired protection container ARM ID.
16518	TargetProtectionContainerID *string `json:"targetProtectionContainerId,omitempty"`
16519	// TargetProtectionContainerFriendlyName - Friendly name of paired container.
16520	TargetProtectionContainerFriendlyName *string `json:"targetProtectionContainerFriendlyName,omitempty"`
16521	// ProviderSpecificDetails - Provider specific provider details.
16522	ProviderSpecificDetails BasicProtectionContainerMappingProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
16523	// Health - Health of pairing.
16524	Health *string `json:"health,omitempty"`
16525	// HealthErrorDetails - Health error.
16526	HealthErrorDetails *[]HealthError `json:"healthErrorDetails,omitempty"`
16527	// PolicyID - Policy ARM Id.
16528	PolicyID *string `json:"policyId,omitempty"`
16529	// State - Association Status
16530	State *string `json:"state,omitempty"`
16531	// SourceProtectionContainerFriendlyName - Friendly name of source protection container.
16532	SourceProtectionContainerFriendlyName *string `json:"sourceProtectionContainerFriendlyName,omitempty"`
16533	// SourceFabricFriendlyName - Friendly name of source fabric.
16534	SourceFabricFriendlyName *string `json:"sourceFabricFriendlyName,omitempty"`
16535	// TargetFabricFriendlyName - Friendly name of target fabric.
16536	TargetFabricFriendlyName *string `json:"targetFabricFriendlyName,omitempty"`
16537	// PolicyFriendlyName - Friendly name of replication policy.
16538	PolicyFriendlyName *string `json:"policyFriendlyName,omitempty"`
16539}
16540
16541// UnmarshalJSON is the custom unmarshaler for ProtectionContainerMappingProperties struct.
16542func (pcmp *ProtectionContainerMappingProperties) UnmarshalJSON(body []byte) error {
16543	var m map[string]*json.RawMessage
16544	err := json.Unmarshal(body, &m)
16545	if err != nil {
16546		return err
16547	}
16548	for k, v := range m {
16549		switch k {
16550		case "targetProtectionContainerId":
16551			if v != nil {
16552				var targetProtectionContainerID string
16553				err = json.Unmarshal(*v, &targetProtectionContainerID)
16554				if err != nil {
16555					return err
16556				}
16557				pcmp.TargetProtectionContainerID = &targetProtectionContainerID
16558			}
16559		case "targetProtectionContainerFriendlyName":
16560			if v != nil {
16561				var targetProtectionContainerFriendlyName string
16562				err = json.Unmarshal(*v, &targetProtectionContainerFriendlyName)
16563				if err != nil {
16564					return err
16565				}
16566				pcmp.TargetProtectionContainerFriendlyName = &targetProtectionContainerFriendlyName
16567			}
16568		case "providerSpecificDetails":
16569			if v != nil {
16570				providerSpecificDetails, err := unmarshalBasicProtectionContainerMappingProviderSpecificDetails(*v)
16571				if err != nil {
16572					return err
16573				}
16574				pcmp.ProviderSpecificDetails = providerSpecificDetails
16575			}
16576		case "health":
16577			if v != nil {
16578				var health string
16579				err = json.Unmarshal(*v, &health)
16580				if err != nil {
16581					return err
16582				}
16583				pcmp.Health = &health
16584			}
16585		case "healthErrorDetails":
16586			if v != nil {
16587				var healthErrorDetails []HealthError
16588				err = json.Unmarshal(*v, &healthErrorDetails)
16589				if err != nil {
16590					return err
16591				}
16592				pcmp.HealthErrorDetails = &healthErrorDetails
16593			}
16594		case "policyId":
16595			if v != nil {
16596				var policyID string
16597				err = json.Unmarshal(*v, &policyID)
16598				if err != nil {
16599					return err
16600				}
16601				pcmp.PolicyID = &policyID
16602			}
16603		case "state":
16604			if v != nil {
16605				var state string
16606				err = json.Unmarshal(*v, &state)
16607				if err != nil {
16608					return err
16609				}
16610				pcmp.State = &state
16611			}
16612		case "sourceProtectionContainerFriendlyName":
16613			if v != nil {
16614				var sourceProtectionContainerFriendlyName string
16615				err = json.Unmarshal(*v, &sourceProtectionContainerFriendlyName)
16616				if err != nil {
16617					return err
16618				}
16619				pcmp.SourceProtectionContainerFriendlyName = &sourceProtectionContainerFriendlyName
16620			}
16621		case "sourceFabricFriendlyName":
16622			if v != nil {
16623				var sourceFabricFriendlyName string
16624				err = json.Unmarshal(*v, &sourceFabricFriendlyName)
16625				if err != nil {
16626					return err
16627				}
16628				pcmp.SourceFabricFriendlyName = &sourceFabricFriendlyName
16629			}
16630		case "targetFabricFriendlyName":
16631			if v != nil {
16632				var targetFabricFriendlyName string
16633				err = json.Unmarshal(*v, &targetFabricFriendlyName)
16634				if err != nil {
16635					return err
16636				}
16637				pcmp.TargetFabricFriendlyName = &targetFabricFriendlyName
16638			}
16639		case "policyFriendlyName":
16640			if v != nil {
16641				var policyFriendlyName string
16642				err = json.Unmarshal(*v, &policyFriendlyName)
16643				if err != nil {
16644					return err
16645				}
16646				pcmp.PolicyFriendlyName = &policyFriendlyName
16647			}
16648		}
16649	}
16650
16651	return nil
16652}
16653
16654// BasicProtectionContainerMappingProviderSpecificDetails container mapping provider specific details.
16655type BasicProtectionContainerMappingProviderSpecificDetails interface {
16656	AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool)
16657	AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool)
16658	AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool)
16659}
16660
16661// ProtectionContainerMappingProviderSpecificDetails container mapping provider specific details.
16662type ProtectionContainerMappingProviderSpecificDetails struct {
16663	// InstanceType - Possible values include: 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt'
16664	InstanceType InstanceTypeBasicProtectionContainerMappingProviderSpecificDetails `json:"instanceType,omitempty"`
16665}
16666
16667func unmarshalBasicProtectionContainerMappingProviderSpecificDetails(body []byte) (BasicProtectionContainerMappingProviderSpecificDetails, error) {
16668	var m map[string]interface{}
16669	err := json.Unmarshal(body, &m)
16670	if err != nil {
16671		return nil, err
16672	}
16673
16674	switch m["instanceType"] {
16675	case string(InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A):
16676		var apcmd A2AProtectionContainerMappingDetails
16677		err := json.Unmarshal(body, &apcmd)
16678		return apcmd, err
16679	case string(InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt):
16680		var vmcpcmd VMwareCbtProtectionContainerMappingDetails
16681		err := json.Unmarshal(body, &vmcpcmd)
16682		return vmcpcmd, err
16683	default:
16684		var pcmpsd ProtectionContainerMappingProviderSpecificDetails
16685		err := json.Unmarshal(body, &pcmpsd)
16686		return pcmpsd, err
16687	}
16688}
16689func unmarshalBasicProtectionContainerMappingProviderSpecificDetailsArray(body []byte) ([]BasicProtectionContainerMappingProviderSpecificDetails, error) {
16690	var rawMessages []*json.RawMessage
16691	err := json.Unmarshal(body, &rawMessages)
16692	if err != nil {
16693		return nil, err
16694	}
16695
16696	pcmpsdArray := make([]BasicProtectionContainerMappingProviderSpecificDetails, len(rawMessages))
16697
16698	for index, rawMessage := range rawMessages {
16699		pcmpsd, err := unmarshalBasicProtectionContainerMappingProviderSpecificDetails(*rawMessage)
16700		if err != nil {
16701			return nil, err
16702		}
16703		pcmpsdArray[index] = pcmpsd
16704	}
16705	return pcmpsdArray, nil
16706}
16707
16708// MarshalJSON is the custom marshaler for ProtectionContainerMappingProviderSpecificDetails.
16709func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) MarshalJSON() ([]byte, error) {
16710	pcmpsd.InstanceType = InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails
16711	objectMap := make(map[string]interface{})
16712	if pcmpsd.InstanceType != "" {
16713		objectMap["instanceType"] = pcmpsd.InstanceType
16714	}
16715	return json.Marshal(objectMap)
16716}
16717
16718// AsA2AProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16719func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool) {
16720	return nil, false
16721}
16722
16723// AsVMwareCbtProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16724func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool) {
16725	return nil, false
16726}
16727
16728// AsProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16729func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool) {
16730	return &pcmpsd, true
16731}
16732
16733// AsBasicProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for ProtectionContainerMappingProviderSpecificDetails.
16734func (pcmpsd ProtectionContainerMappingProviderSpecificDetails) AsBasicProtectionContainerMappingProviderSpecificDetails() (BasicProtectionContainerMappingProviderSpecificDetails, bool) {
16735	return &pcmpsd, true
16736}
16737
16738// ProtectionContainerProperties protection profile custom data details.
16739type ProtectionContainerProperties struct {
16740	// FabricFriendlyName - Fabric friendly name.
16741	FabricFriendlyName *string `json:"fabricFriendlyName,omitempty"`
16742	// FriendlyName - The name.
16743	FriendlyName *string `json:"friendlyName,omitempty"`
16744	// FabricType - The fabric type.
16745	FabricType *string `json:"fabricType,omitempty"`
16746	// ProtectedItemCount - Number of protected PEs
16747	ProtectedItemCount *int32 `json:"protectedItemCount,omitempty"`
16748	// PairingStatus - The pairing status of this cloud.
16749	PairingStatus *string `json:"pairingStatus,omitempty"`
16750	// Role - The role of this cloud.
16751	Role *string `json:"role,omitempty"`
16752	// FabricSpecificDetails - Fabric specific details.
16753	FabricSpecificDetails *ProtectionContainerFabricSpecificDetails `json:"fabricSpecificDetails,omitempty"`
16754}
16755
16756// BasicProtectionProfileCustomDetails protection Profile custom input.
16757type BasicProtectionProfileCustomDetails interface {
16758	AsExistingProtectionProfile() (*ExistingProtectionProfile, bool)
16759	AsNewProtectionProfile() (*NewProtectionProfile, bool)
16760	AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool)
16761}
16762
16763// ProtectionProfileCustomDetails protection Profile custom input.
16764type ProtectionProfileCustomDetails struct {
16765	// ResourceType - Possible values include: 'ResourceTypeProtectionProfileCustomDetails', 'ResourceTypeExisting', 'ResourceTypeNew'
16766	ResourceType ResourceType `json:"resourceType,omitempty"`
16767}
16768
16769func unmarshalBasicProtectionProfileCustomDetails(body []byte) (BasicProtectionProfileCustomDetails, error) {
16770	var m map[string]interface{}
16771	err := json.Unmarshal(body, &m)
16772	if err != nil {
16773		return nil, err
16774	}
16775
16776	switch m["resourceType"] {
16777	case string(ResourceTypeExisting):
16778		var epp ExistingProtectionProfile
16779		err := json.Unmarshal(body, &epp)
16780		return epp, err
16781	case string(ResourceTypeNew):
16782		var npp NewProtectionProfile
16783		err := json.Unmarshal(body, &npp)
16784		return npp, err
16785	default:
16786		var ppcd ProtectionProfileCustomDetails
16787		err := json.Unmarshal(body, &ppcd)
16788		return ppcd, err
16789	}
16790}
16791func unmarshalBasicProtectionProfileCustomDetailsArray(body []byte) ([]BasicProtectionProfileCustomDetails, error) {
16792	var rawMessages []*json.RawMessage
16793	err := json.Unmarshal(body, &rawMessages)
16794	if err != nil {
16795		return nil, err
16796	}
16797
16798	ppcdArray := make([]BasicProtectionProfileCustomDetails, len(rawMessages))
16799
16800	for index, rawMessage := range rawMessages {
16801		ppcd, err := unmarshalBasicProtectionProfileCustomDetails(*rawMessage)
16802		if err != nil {
16803			return nil, err
16804		}
16805		ppcdArray[index] = ppcd
16806	}
16807	return ppcdArray, nil
16808}
16809
16810// MarshalJSON is the custom marshaler for ProtectionProfileCustomDetails.
16811func (ppcd ProtectionProfileCustomDetails) MarshalJSON() ([]byte, error) {
16812	ppcd.ResourceType = ResourceTypeProtectionProfileCustomDetails
16813	objectMap := make(map[string]interface{})
16814	if ppcd.ResourceType != "" {
16815		objectMap["resourceType"] = ppcd.ResourceType
16816	}
16817	return json.Marshal(objectMap)
16818}
16819
16820// AsExistingProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16821func (ppcd ProtectionProfileCustomDetails) AsExistingProtectionProfile() (*ExistingProtectionProfile, bool) {
16822	return nil, false
16823}
16824
16825// AsNewProtectionProfile is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16826func (ppcd ProtectionProfileCustomDetails) AsNewProtectionProfile() (*NewProtectionProfile, bool) {
16827	return nil, false
16828}
16829
16830// AsProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16831func (ppcd ProtectionProfileCustomDetails) AsProtectionProfileCustomDetails() (*ProtectionProfileCustomDetails, bool) {
16832	return &ppcd, true
16833}
16834
16835// AsBasicProtectionProfileCustomDetails is the BasicProtectionProfileCustomDetails implementation for ProtectionProfileCustomDetails.
16836func (ppcd ProtectionProfileCustomDetails) AsBasicProtectionProfileCustomDetails() (BasicProtectionProfileCustomDetails, bool) {
16837	return &ppcd, true
16838}
16839
16840// ProviderError this class contains the error details per object.
16841type ProviderError struct {
16842	// ErrorCode - The Error code.
16843	ErrorCode *int32 `json:"errorCode,omitempty"`
16844	// ErrorMessage - The Error message.
16845	ErrorMessage *string `json:"errorMessage,omitempty"`
16846	// ErrorID - The Provider error Id.
16847	ErrorID *string `json:"errorId,omitempty"`
16848	// PossibleCauses - The possible causes for the error.
16849	PossibleCauses *string `json:"possibleCauses,omitempty"`
16850	// RecommendedAction - The recommended action to resolve the error.
16851	RecommendedAction *string `json:"recommendedAction,omitempty"`
16852}
16853
16854// BasicProviderSpecificFailoverInput provider specific failover input.
16855type BasicProviderSpecificFailoverInput interface {
16856	AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool)
16857	AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool)
16858	AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool)
16859	AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool)
16860	AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool)
16861	AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool)
16862}
16863
16864// ProviderSpecificFailoverInput provider specific failover input.
16865type ProviderSpecificFailoverInput struct {
16866	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage'
16867	InstanceType InstanceTypeBasicProviderSpecificFailoverInput `json:"instanceType,omitempty"`
16868}
16869
16870func unmarshalBasicProviderSpecificFailoverInput(body []byte) (BasicProviderSpecificFailoverInput, error) {
16871	var m map[string]interface{}
16872	err := json.Unmarshal(body, &m)
16873	if err != nil {
16874		return nil, err
16875	}
16876
16877	switch m["instanceType"] {
16878	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeA2A):
16879		var afpi A2AFailoverProviderInput
16880		err := json.Unmarshal(body, &afpi)
16881		return afpi, err
16882	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback):
16883		var hvrafpi HyperVReplicaAzureFailbackProviderInput
16884		err := json.Unmarshal(body, &hvrafpi)
16885		return hvrafpi, err
16886	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure):
16887		var hvrafpi HyperVReplicaAzureFailoverProviderInput
16888		err := json.Unmarshal(body, &hvrafpi)
16889		return hvrafpi, err
16890	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMageAzureV2):
16891		var imavfpi InMageAzureV2FailoverProviderInput
16892		err := json.Unmarshal(body, &imavfpi)
16893		return imavfpi, err
16894	case string(InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeInMage):
16895		var imfpi InMageFailoverProviderInput
16896		err := json.Unmarshal(body, &imfpi)
16897		return imfpi, err
16898	default:
16899		var psfi ProviderSpecificFailoverInput
16900		err := json.Unmarshal(body, &psfi)
16901		return psfi, err
16902	}
16903}
16904func unmarshalBasicProviderSpecificFailoverInputArray(body []byte) ([]BasicProviderSpecificFailoverInput, error) {
16905	var rawMessages []*json.RawMessage
16906	err := json.Unmarshal(body, &rawMessages)
16907	if err != nil {
16908		return nil, err
16909	}
16910
16911	psfiArray := make([]BasicProviderSpecificFailoverInput, len(rawMessages))
16912
16913	for index, rawMessage := range rawMessages {
16914		psfi, err := unmarshalBasicProviderSpecificFailoverInput(*rawMessage)
16915		if err != nil {
16916			return nil, err
16917		}
16918		psfiArray[index] = psfi
16919	}
16920	return psfiArray, nil
16921}
16922
16923// MarshalJSON is the custom marshaler for ProviderSpecificFailoverInput.
16924func (psfi ProviderSpecificFailoverInput) MarshalJSON() ([]byte, error) {
16925	psfi.InstanceType = InstanceTypeBasicProviderSpecificFailoverInputInstanceTypeProviderSpecificFailoverInput
16926	objectMap := make(map[string]interface{})
16927	if psfi.InstanceType != "" {
16928		objectMap["instanceType"] = psfi.InstanceType
16929	}
16930	return json.Marshal(objectMap)
16931}
16932
16933// AsA2AFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16934func (psfi ProviderSpecificFailoverInput) AsA2AFailoverProviderInput() (*A2AFailoverProviderInput, bool) {
16935	return nil, false
16936}
16937
16938// AsHyperVReplicaAzureFailbackProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16939func (psfi ProviderSpecificFailoverInput) AsHyperVReplicaAzureFailbackProviderInput() (*HyperVReplicaAzureFailbackProviderInput, bool) {
16940	return nil, false
16941}
16942
16943// AsHyperVReplicaAzureFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16944func (psfi ProviderSpecificFailoverInput) AsHyperVReplicaAzureFailoverProviderInput() (*HyperVReplicaAzureFailoverProviderInput, bool) {
16945	return nil, false
16946}
16947
16948// AsInMageAzureV2FailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16949func (psfi ProviderSpecificFailoverInput) AsInMageAzureV2FailoverProviderInput() (*InMageAzureV2FailoverProviderInput, bool) {
16950	return nil, false
16951}
16952
16953// AsInMageFailoverProviderInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16954func (psfi ProviderSpecificFailoverInput) AsInMageFailoverProviderInput() (*InMageFailoverProviderInput, bool) {
16955	return nil, false
16956}
16957
16958// AsProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16959func (psfi ProviderSpecificFailoverInput) AsProviderSpecificFailoverInput() (*ProviderSpecificFailoverInput, bool) {
16960	return &psfi, true
16961}
16962
16963// AsBasicProviderSpecificFailoverInput is the BasicProviderSpecificFailoverInput implementation for ProviderSpecificFailoverInput.
16964func (psfi ProviderSpecificFailoverInput) AsBasicProviderSpecificFailoverInput() (BasicProviderSpecificFailoverInput, bool) {
16965	return &psfi, true
16966}
16967
16968// BasicProviderSpecificRecoveryPointDetails replication provider specific recovery point details.
16969type BasicProviderSpecificRecoveryPointDetails interface {
16970	AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool)
16971	AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool)
16972	AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool)
16973	AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool)
16974}
16975
16976// ProviderSpecificRecoveryPointDetails replication provider specific recovery point details.
16977type ProviderSpecificRecoveryPointDetails struct {
16978	// InstanceType - Possible values include: 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm'
16979	InstanceType InstanceTypeBasicProviderSpecificRecoveryPointDetails `json:"instanceType,omitempty"`
16980}
16981
16982func unmarshalBasicProviderSpecificRecoveryPointDetails(body []byte) (BasicProviderSpecificRecoveryPointDetails, error) {
16983	var m map[string]interface{}
16984	err := json.Unmarshal(body, &m)
16985	if err != nil {
16986		return nil, err
16987	}
16988
16989	switch m["instanceType"] {
16990	case string(InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeA2A):
16991		var arpd A2ARecoveryPointDetails
16992		err := json.Unmarshal(body, &arpd)
16993		return arpd, err
16994	case string(InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageAzureV2):
16995		var imavrpd InMageAzureV2RecoveryPointDetails
16996		err := json.Unmarshal(body, &imavrpd)
16997		return imavrpd, err
16998	case string(InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeInMageRcm):
16999		var imrrpd InMageRcmRecoveryPointDetails
17000		err := json.Unmarshal(body, &imrrpd)
17001		return imrrpd, err
17002	default:
17003		var psrpd ProviderSpecificRecoveryPointDetails
17004		err := json.Unmarshal(body, &psrpd)
17005		return psrpd, err
17006	}
17007}
17008func unmarshalBasicProviderSpecificRecoveryPointDetailsArray(body []byte) ([]BasicProviderSpecificRecoveryPointDetails, error) {
17009	var rawMessages []*json.RawMessage
17010	err := json.Unmarshal(body, &rawMessages)
17011	if err != nil {
17012		return nil, err
17013	}
17014
17015	psrpdArray := make([]BasicProviderSpecificRecoveryPointDetails, len(rawMessages))
17016
17017	for index, rawMessage := range rawMessages {
17018		psrpd, err := unmarshalBasicProviderSpecificRecoveryPointDetails(*rawMessage)
17019		if err != nil {
17020			return nil, err
17021		}
17022		psrpdArray[index] = psrpd
17023	}
17024	return psrpdArray, nil
17025}
17026
17027// MarshalJSON is the custom marshaler for ProviderSpecificRecoveryPointDetails.
17028func (psrpd ProviderSpecificRecoveryPointDetails) MarshalJSON() ([]byte, error) {
17029	psrpd.InstanceType = InstanceTypeBasicProviderSpecificRecoveryPointDetailsInstanceTypeProviderSpecificRecoveryPointDetails
17030	objectMap := make(map[string]interface{})
17031	if psrpd.InstanceType != "" {
17032		objectMap["instanceType"] = psrpd.InstanceType
17033	}
17034	return json.Marshal(objectMap)
17035}
17036
17037// AsA2ARecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17038func (psrpd ProviderSpecificRecoveryPointDetails) AsA2ARecoveryPointDetails() (*A2ARecoveryPointDetails, bool) {
17039	return nil, false
17040}
17041
17042// AsInMageAzureV2RecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17043func (psrpd ProviderSpecificRecoveryPointDetails) AsInMageAzureV2RecoveryPointDetails() (*InMageAzureV2RecoveryPointDetails, bool) {
17044	return nil, false
17045}
17046
17047// AsInMageRcmRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17048func (psrpd ProviderSpecificRecoveryPointDetails) AsInMageRcmRecoveryPointDetails() (*InMageRcmRecoveryPointDetails, bool) {
17049	return nil, false
17050}
17051
17052// AsProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17053func (psrpd ProviderSpecificRecoveryPointDetails) AsProviderSpecificRecoveryPointDetails() (*ProviderSpecificRecoveryPointDetails, bool) {
17054	return &psrpd, true
17055}
17056
17057// AsBasicProviderSpecificRecoveryPointDetails is the BasicProviderSpecificRecoveryPointDetails implementation for ProviderSpecificRecoveryPointDetails.
17058func (psrpd ProviderSpecificRecoveryPointDetails) AsBasicProviderSpecificRecoveryPointDetails() (BasicProviderSpecificRecoveryPointDetails, bool) {
17059	return &psrpd, true
17060}
17061
17062// PushInstallerDetails push installer details.
17063type PushInstallerDetails struct {
17064	// ID - READ-ONLY; The push installer Id.
17065	ID *string `json:"id,omitempty"`
17066	// Name - READ-ONLY; The push installer name.
17067	Name *string `json:"name,omitempty"`
17068	// Version - READ-ONLY; The push installer version.
17069	Version *string `json:"version,omitempty"`
17070	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the push installer.
17071	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
17072	// Health - READ-ONLY; The health of the push installer. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
17073	Health ProtectionHealth `json:"health,omitempty"`
17074	// HealthErrors - READ-ONLY; The health errors.
17075	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
17076}
17077
17078// RcmAzureMigrationPolicyDetails RCM based Azure migration specific policy details.
17079type RcmAzureMigrationPolicyDetails struct {
17080	// RecoveryPointThresholdInMinutes - The recovery point threshold in minutes.
17081	RecoveryPointThresholdInMinutes *int32 `json:"recoveryPointThresholdInMinutes,omitempty"`
17082	// RecoveryPointHistory - The duration in minutes until which the recovery points need to be stored.
17083	RecoveryPointHistory *int32 `json:"recoveryPointHistory,omitempty"`
17084	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
17085	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
17086	// MultiVMSyncStatus - A value indicating whether multi-VM sync has to be enabled. Possible values include: 'MultiVMSyncStatusEnabled', 'MultiVMSyncStatusDisabled'
17087	MultiVMSyncStatus MultiVMSyncStatus `json:"multiVmSyncStatus,omitempty"`
17088	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
17089	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
17090	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
17091	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
17092}
17093
17094// MarshalJSON is the custom marshaler for RcmAzureMigrationPolicyDetails.
17095func (rampd RcmAzureMigrationPolicyDetails) MarshalJSON() ([]byte, error) {
17096	rampd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration
17097	objectMap := make(map[string]interface{})
17098	if rampd.RecoveryPointThresholdInMinutes != nil {
17099		objectMap["recoveryPointThresholdInMinutes"] = rampd.RecoveryPointThresholdInMinutes
17100	}
17101	if rampd.RecoveryPointHistory != nil {
17102		objectMap["recoveryPointHistory"] = rampd.RecoveryPointHistory
17103	}
17104	if rampd.AppConsistentFrequencyInMinutes != nil {
17105		objectMap["appConsistentFrequencyInMinutes"] = rampd.AppConsistentFrequencyInMinutes
17106	}
17107	if rampd.MultiVMSyncStatus != "" {
17108		objectMap["multiVmSyncStatus"] = rampd.MultiVMSyncStatus
17109	}
17110	if rampd.CrashConsistentFrequencyInMinutes != nil {
17111		objectMap["crashConsistentFrequencyInMinutes"] = rampd.CrashConsistentFrequencyInMinutes
17112	}
17113	if rampd.InstanceType != "" {
17114		objectMap["instanceType"] = rampd.InstanceType
17115	}
17116	return json.Marshal(objectMap)
17117}
17118
17119// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17120func (rampd RcmAzureMigrationPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
17121	return nil, false
17122}
17123
17124// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17125func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
17126	return nil, false
17127}
17128
17129// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17130func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
17131	return nil, false
17132}
17133
17134// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17135func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
17136	return nil, false
17137}
17138
17139// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17140func (rampd RcmAzureMigrationPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
17141	return nil, false
17142}
17143
17144// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17145func (rampd RcmAzureMigrationPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
17146	return nil, false
17147}
17148
17149// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17150func (rampd RcmAzureMigrationPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
17151	return nil, false
17152}
17153
17154// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17155func (rampd RcmAzureMigrationPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
17156	return nil, false
17157}
17158
17159// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17160func (rampd RcmAzureMigrationPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
17161	return nil, false
17162}
17163
17164// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17165func (rampd RcmAzureMigrationPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
17166	return &rampd, true
17167}
17168
17169// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17170func (rampd RcmAzureMigrationPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
17171	return nil, false
17172}
17173
17174// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17175func (rampd RcmAzureMigrationPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
17176	return nil, false
17177}
17178
17179// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for RcmAzureMigrationPolicyDetails.
17180func (rampd RcmAzureMigrationPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
17181	return &rampd, true
17182}
17183
17184// RcmProxyDetails RCM proxy details.
17185type RcmProxyDetails struct {
17186	// ID - READ-ONLY; The RCM proxy Id.
17187	ID *string `json:"id,omitempty"`
17188	// Name - READ-ONLY; The RCM proxy name.
17189	Name *string `json:"name,omitempty"`
17190	// Version - READ-ONLY; The RCM proxy version.
17191	Version *string `json:"version,omitempty"`
17192	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the RCM proxy.
17193	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
17194	// Health - READ-ONLY; The health of the RCM proxy. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
17195	Health ProtectionHealth `json:"health,omitempty"`
17196	// HealthErrors - READ-ONLY; The health errors.
17197	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
17198}
17199
17200// BasicRecoveryAvailabilitySetCustomDetails recovery Availability Set custom input.
17201type BasicRecoveryAvailabilitySetCustomDetails interface {
17202	AsExistingRecoveryAvailabilitySet() (*ExistingRecoveryAvailabilitySet, bool)
17203	AsRecoveryAvailabilitySetCustomDetails() (*RecoveryAvailabilitySetCustomDetails, bool)
17204}
17205
17206// RecoveryAvailabilitySetCustomDetails recovery Availability Set custom input.
17207type RecoveryAvailabilitySetCustomDetails struct {
17208	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeRecoveryAvailabilitySetCustomDetails', 'ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting'
17209	ResourceType ResourceTypeBasicRecoveryAvailabilitySetCustomDetails `json:"resourceType,omitempty"`
17210}
17211
17212func unmarshalBasicRecoveryAvailabilitySetCustomDetails(body []byte) (BasicRecoveryAvailabilitySetCustomDetails, error) {
17213	var m map[string]interface{}
17214	err := json.Unmarshal(body, &m)
17215	if err != nil {
17216		return nil, err
17217	}
17218
17219	switch m["resourceType"] {
17220	case string(ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeExisting):
17221		var eras ExistingRecoveryAvailabilitySet
17222		err := json.Unmarshal(body, &eras)
17223		return eras, err
17224	default:
17225		var rascd RecoveryAvailabilitySetCustomDetails
17226		err := json.Unmarshal(body, &rascd)
17227		return rascd, err
17228	}
17229}
17230func unmarshalBasicRecoveryAvailabilitySetCustomDetailsArray(body []byte) ([]BasicRecoveryAvailabilitySetCustomDetails, error) {
17231	var rawMessages []*json.RawMessage
17232	err := json.Unmarshal(body, &rawMessages)
17233	if err != nil {
17234		return nil, err
17235	}
17236
17237	rascdArray := make([]BasicRecoveryAvailabilitySetCustomDetails, len(rawMessages))
17238
17239	for index, rawMessage := range rawMessages {
17240		rascd, err := unmarshalBasicRecoveryAvailabilitySetCustomDetails(*rawMessage)
17241		if err != nil {
17242			return nil, err
17243		}
17244		rascdArray[index] = rascd
17245	}
17246	return rascdArray, nil
17247}
17248
17249// MarshalJSON is the custom marshaler for RecoveryAvailabilitySetCustomDetails.
17250func (rascd RecoveryAvailabilitySetCustomDetails) MarshalJSON() ([]byte, error) {
17251	rascd.ResourceType = ResourceTypeBasicRecoveryAvailabilitySetCustomDetailsResourceTypeRecoveryAvailabilitySetCustomDetails
17252	objectMap := make(map[string]interface{})
17253	if rascd.ResourceType != "" {
17254		objectMap["resourceType"] = rascd.ResourceType
17255	}
17256	return json.Marshal(objectMap)
17257}
17258
17259// AsExistingRecoveryAvailabilitySet is the BasicRecoveryAvailabilitySetCustomDetails implementation for RecoveryAvailabilitySetCustomDetails.
17260func (rascd RecoveryAvailabilitySetCustomDetails) AsExistingRecoveryAvailabilitySet() (*ExistingRecoveryAvailabilitySet, bool) {
17261	return nil, false
17262}
17263
17264// AsRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for RecoveryAvailabilitySetCustomDetails.
17265func (rascd RecoveryAvailabilitySetCustomDetails) AsRecoveryAvailabilitySetCustomDetails() (*RecoveryAvailabilitySetCustomDetails, bool) {
17266	return &rascd, true
17267}
17268
17269// AsBasicRecoveryAvailabilitySetCustomDetails is the BasicRecoveryAvailabilitySetCustomDetails implementation for RecoveryAvailabilitySetCustomDetails.
17270func (rascd RecoveryAvailabilitySetCustomDetails) AsBasicRecoveryAvailabilitySetCustomDetails() (BasicRecoveryAvailabilitySetCustomDetails, bool) {
17271	return &rascd, true
17272}
17273
17274// RecoveryPlan recovery plan details.
17275type RecoveryPlan struct {
17276	autorest.Response `json:"-"`
17277	// Properties - The custom details.
17278	Properties *RecoveryPlanProperties `json:"properties,omitempty"`
17279	// ID - READ-ONLY; Resource Id
17280	ID *string `json:"id,omitempty"`
17281	// Name - READ-ONLY; Resource Name
17282	Name *string `json:"name,omitempty"`
17283	// Type - READ-ONLY; Resource Type
17284	Type *string `json:"type,omitempty"`
17285	// Location - Resource Location
17286	Location *string `json:"location,omitempty"`
17287}
17288
17289// MarshalJSON is the custom marshaler for RecoveryPlan.
17290func (rp RecoveryPlan) MarshalJSON() ([]byte, error) {
17291	objectMap := make(map[string]interface{})
17292	if rp.Properties != nil {
17293		objectMap["properties"] = rp.Properties
17294	}
17295	if rp.Location != nil {
17296		objectMap["location"] = rp.Location
17297	}
17298	return json.Marshal(objectMap)
17299}
17300
17301// RecoveryPlanA2ADetails recovery plan A2A specific details.
17302type RecoveryPlanA2ADetails struct {
17303	// PrimaryZone - The primary zone.
17304	PrimaryZone *string `json:"primaryZone,omitempty"`
17305	// RecoveryZone - The recovery zone.
17306	RecoveryZone *string `json:"recoveryZone,omitempty"`
17307	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeRecoveryPlanProviderSpecificDetails', 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A'
17308	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificDetails `json:"instanceType,omitempty"`
17309}
17310
17311// MarshalJSON is the custom marshaler for RecoveryPlanA2ADetails.
17312func (rpad RecoveryPlanA2ADetails) MarshalJSON() ([]byte, error) {
17313	rpad.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A
17314	objectMap := make(map[string]interface{})
17315	if rpad.PrimaryZone != nil {
17316		objectMap["primaryZone"] = rpad.PrimaryZone
17317	}
17318	if rpad.RecoveryZone != nil {
17319		objectMap["recoveryZone"] = rpad.RecoveryZone
17320	}
17321	if rpad.InstanceType != "" {
17322		objectMap["instanceType"] = rpad.InstanceType
17323	}
17324	return json.Marshal(objectMap)
17325}
17326
17327// AsRecoveryPlanA2ADetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanA2ADetails.
17328func (rpad RecoveryPlanA2ADetails) AsRecoveryPlanA2ADetails() (*RecoveryPlanA2ADetails, bool) {
17329	return &rpad, true
17330}
17331
17332// AsRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanA2ADetails.
17333func (rpad RecoveryPlanA2ADetails) AsRecoveryPlanProviderSpecificDetails() (*RecoveryPlanProviderSpecificDetails, bool) {
17334	return nil, false
17335}
17336
17337// AsBasicRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanA2ADetails.
17338func (rpad RecoveryPlanA2ADetails) AsBasicRecoveryPlanProviderSpecificDetails() (BasicRecoveryPlanProviderSpecificDetails, bool) {
17339	return &rpad, true
17340}
17341
17342// RecoveryPlanA2AFailoverInput recovery plan A2A failover input.
17343type RecoveryPlanA2AFailoverInput struct {
17344	// RecoveryPointType - The recovery point type. Possible values include: 'Latest', 'LatestApplicationConsistent', 'LatestCrashConsistent', 'LatestProcessed'
17345	RecoveryPointType A2ARpRecoveryPointType `json:"recoveryPointType,omitempty"`
17346	// CloudServiceCreationOption - A value indicating whether to use recovery cloud service for TFO or not.
17347	CloudServiceCreationOption *string `json:"cloudServiceCreationOption,omitempty"`
17348	// MultiVMSyncPointOption - A value indicating whether multi VM sync enabled VMs should use multi VM sync points for failover. Possible values include: 'UseMultiVMSyncRecoveryPoint', 'UsePerVMRecoveryPoint'
17349	MultiVMSyncPointOption MultiVMSyncPointOption `json:"multiVmSyncPointOption,omitempty"`
17350	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
17351	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
17352}
17353
17354// MarshalJSON is the custom marshaler for RecoveryPlanA2AFailoverInput.
17355func (rpafi RecoveryPlanA2AFailoverInput) MarshalJSON() ([]byte, error) {
17356	rpafi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A
17357	objectMap := make(map[string]interface{})
17358	if rpafi.RecoveryPointType != "" {
17359		objectMap["recoveryPointType"] = rpafi.RecoveryPointType
17360	}
17361	if rpafi.CloudServiceCreationOption != nil {
17362		objectMap["cloudServiceCreationOption"] = rpafi.CloudServiceCreationOption
17363	}
17364	if rpafi.MultiVMSyncPointOption != "" {
17365		objectMap["multiVmSyncPointOption"] = rpafi.MultiVMSyncPointOption
17366	}
17367	if rpafi.InstanceType != "" {
17368		objectMap["instanceType"] = rpafi.InstanceType
17369	}
17370	return json.Marshal(objectMap)
17371}
17372
17373// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17374func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
17375	return &rpafi, true
17376}
17377
17378// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17379func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
17380	return nil, false
17381}
17382
17383// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17384func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
17385	return nil, false
17386}
17387
17388// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17389func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
17390	return nil, false
17391}
17392
17393// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17394func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
17395	return nil, false
17396}
17397
17398// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17399func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
17400	return nil, false
17401}
17402
17403// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17404func (rpafi RecoveryPlanA2AFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
17405	return nil, false
17406}
17407
17408// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanA2AFailoverInput.
17409func (rpafi RecoveryPlanA2AFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
17410	return &rpafi, true
17411}
17412
17413// RecoveryPlanA2AInput recovery plan A2A input.
17414type RecoveryPlanA2AInput struct {
17415	// PrimaryZone - The primary zone.
17416	PrimaryZone *string `json:"primaryZone,omitempty"`
17417	// RecoveryZone - The recovery zone.
17418	RecoveryZone *string `json:"recoveryZone,omitempty"`
17419	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeRecoveryPlanProviderSpecificInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A'
17420	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificInput `json:"instanceType,omitempty"`
17421}
17422
17423// MarshalJSON is the custom marshaler for RecoveryPlanA2AInput.
17424func (rpai RecoveryPlanA2AInput) MarshalJSON() ([]byte, error) {
17425	rpai.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A
17426	objectMap := make(map[string]interface{})
17427	if rpai.PrimaryZone != nil {
17428		objectMap["primaryZone"] = rpai.PrimaryZone
17429	}
17430	if rpai.RecoveryZone != nil {
17431		objectMap["recoveryZone"] = rpai.RecoveryZone
17432	}
17433	if rpai.InstanceType != "" {
17434		objectMap["instanceType"] = rpai.InstanceType
17435	}
17436	return json.Marshal(objectMap)
17437}
17438
17439// AsRecoveryPlanA2AInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanA2AInput.
17440func (rpai RecoveryPlanA2AInput) AsRecoveryPlanA2AInput() (*RecoveryPlanA2AInput, bool) {
17441	return &rpai, true
17442}
17443
17444// AsRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanA2AInput.
17445func (rpai RecoveryPlanA2AInput) AsRecoveryPlanProviderSpecificInput() (*RecoveryPlanProviderSpecificInput, bool) {
17446	return nil, false
17447}
17448
17449// AsBasicRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanA2AInput.
17450func (rpai RecoveryPlanA2AInput) AsBasicRecoveryPlanProviderSpecificInput() (BasicRecoveryPlanProviderSpecificInput, bool) {
17451	return &rpai, true
17452}
17453
17454// RecoveryPlanAction recovery plan action details.
17455type RecoveryPlanAction struct {
17456	// ActionName - The action name.
17457	ActionName *string `json:"actionName,omitempty"`
17458	// FailoverTypes - The list of failover types.
17459	FailoverTypes *[]ReplicationProtectedItemOperation `json:"failoverTypes,omitempty"`
17460	// FailoverDirections - The list of failover directions.
17461	FailoverDirections *[]PossibleOperationsDirections `json:"failoverDirections,omitempty"`
17462	// CustomDetails - The custom details.
17463	CustomDetails BasicRecoveryPlanActionDetails `json:"customDetails,omitempty"`
17464}
17465
17466// UnmarshalJSON is the custom unmarshaler for RecoveryPlanAction struct.
17467func (rpa *RecoveryPlanAction) UnmarshalJSON(body []byte) error {
17468	var m map[string]*json.RawMessage
17469	err := json.Unmarshal(body, &m)
17470	if err != nil {
17471		return err
17472	}
17473	for k, v := range m {
17474		switch k {
17475		case "actionName":
17476			if v != nil {
17477				var actionName string
17478				err = json.Unmarshal(*v, &actionName)
17479				if err != nil {
17480					return err
17481				}
17482				rpa.ActionName = &actionName
17483			}
17484		case "failoverTypes":
17485			if v != nil {
17486				var failoverTypes []ReplicationProtectedItemOperation
17487				err = json.Unmarshal(*v, &failoverTypes)
17488				if err != nil {
17489					return err
17490				}
17491				rpa.FailoverTypes = &failoverTypes
17492			}
17493		case "failoverDirections":
17494			if v != nil {
17495				var failoverDirections []PossibleOperationsDirections
17496				err = json.Unmarshal(*v, &failoverDirections)
17497				if err != nil {
17498					return err
17499				}
17500				rpa.FailoverDirections = &failoverDirections
17501			}
17502		case "customDetails":
17503			if v != nil {
17504				customDetails, err := unmarshalBasicRecoveryPlanActionDetails(*v)
17505				if err != nil {
17506					return err
17507				}
17508				rpa.CustomDetails = customDetails
17509			}
17510		}
17511	}
17512
17513	return nil
17514}
17515
17516// BasicRecoveryPlanActionDetails recovery plan action custom details.
17517type BasicRecoveryPlanActionDetails interface {
17518	AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool)
17519	AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool)
17520	AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool)
17521	AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool)
17522}
17523
17524// RecoveryPlanActionDetails recovery plan action custom details.
17525type RecoveryPlanActionDetails struct {
17526	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
17527	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
17528}
17529
17530func unmarshalBasicRecoveryPlanActionDetails(body []byte) (BasicRecoveryPlanActionDetails, error) {
17531	var m map[string]interface{}
17532	err := json.Unmarshal(body, &m)
17533	if err != nil {
17534		return nil, err
17535	}
17536
17537	switch m["instanceType"] {
17538	case string(InstanceTypeAutomationRunbookActionDetails):
17539		var rparad RecoveryPlanAutomationRunbookActionDetails
17540		err := json.Unmarshal(body, &rparad)
17541		return rparad, err
17542	case string(InstanceTypeManualActionDetails):
17543		var rpmad RecoveryPlanManualActionDetails
17544		err := json.Unmarshal(body, &rpmad)
17545		return rpmad, err
17546	case string(InstanceTypeScriptActionDetails):
17547		var rpsad RecoveryPlanScriptActionDetails
17548		err := json.Unmarshal(body, &rpsad)
17549		return rpsad, err
17550	default:
17551		var rpad RecoveryPlanActionDetails
17552		err := json.Unmarshal(body, &rpad)
17553		return rpad, err
17554	}
17555}
17556func unmarshalBasicRecoveryPlanActionDetailsArray(body []byte) ([]BasicRecoveryPlanActionDetails, error) {
17557	var rawMessages []*json.RawMessage
17558	err := json.Unmarshal(body, &rawMessages)
17559	if err != nil {
17560		return nil, err
17561	}
17562
17563	rpadArray := make([]BasicRecoveryPlanActionDetails, len(rawMessages))
17564
17565	for index, rawMessage := range rawMessages {
17566		rpad, err := unmarshalBasicRecoveryPlanActionDetails(*rawMessage)
17567		if err != nil {
17568			return nil, err
17569		}
17570		rpadArray[index] = rpad
17571	}
17572	return rpadArray, nil
17573}
17574
17575// MarshalJSON is the custom marshaler for RecoveryPlanActionDetails.
17576func (rpad RecoveryPlanActionDetails) MarshalJSON() ([]byte, error) {
17577	rpad.InstanceType = InstanceTypeRecoveryPlanActionDetails
17578	objectMap := make(map[string]interface{})
17579	if rpad.InstanceType != "" {
17580		objectMap["instanceType"] = rpad.InstanceType
17581	}
17582	return json.Marshal(objectMap)
17583}
17584
17585// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17586func (rpad RecoveryPlanActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
17587	return nil, false
17588}
17589
17590// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17591func (rpad RecoveryPlanActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
17592	return nil, false
17593}
17594
17595// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17596func (rpad RecoveryPlanActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
17597	return nil, false
17598}
17599
17600// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17601func (rpad RecoveryPlanActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
17602	return &rpad, true
17603}
17604
17605// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanActionDetails.
17606func (rpad RecoveryPlanActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
17607	return &rpad, true
17608}
17609
17610// RecoveryPlanAutomationRunbookActionDetails recovery plan Automation runbook action details.
17611type RecoveryPlanAutomationRunbookActionDetails struct {
17612	// RunbookID - The runbook ARM Id.
17613	RunbookID *string `json:"runbookId,omitempty"`
17614	// Timeout - The runbook timeout.
17615	Timeout *string `json:"timeout,omitempty"`
17616	// FabricLocation - The fabric location. Possible values include: 'Primary', 'Recovery'
17617	FabricLocation RecoveryPlanActionLocation `json:"fabricLocation,omitempty"`
17618	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
17619	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
17620}
17621
17622// MarshalJSON is the custom marshaler for RecoveryPlanAutomationRunbookActionDetails.
17623func (rparad RecoveryPlanAutomationRunbookActionDetails) MarshalJSON() ([]byte, error) {
17624	rparad.InstanceType = InstanceTypeAutomationRunbookActionDetails
17625	objectMap := make(map[string]interface{})
17626	if rparad.RunbookID != nil {
17627		objectMap["runbookId"] = rparad.RunbookID
17628	}
17629	if rparad.Timeout != nil {
17630		objectMap["timeout"] = rparad.Timeout
17631	}
17632	if rparad.FabricLocation != "" {
17633		objectMap["fabricLocation"] = rparad.FabricLocation
17634	}
17635	if rparad.InstanceType != "" {
17636		objectMap["instanceType"] = rparad.InstanceType
17637	}
17638	return json.Marshal(objectMap)
17639}
17640
17641// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17642func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
17643	return &rparad, true
17644}
17645
17646// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17647func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
17648	return nil, false
17649}
17650
17651// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17652func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
17653	return nil, false
17654}
17655
17656// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17657func (rparad RecoveryPlanAutomationRunbookActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
17658	return nil, false
17659}
17660
17661// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanAutomationRunbookActionDetails.
17662func (rparad RecoveryPlanAutomationRunbookActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
17663	return &rparad, true
17664}
17665
17666// RecoveryPlanCollection recovery plan collection details.
17667type RecoveryPlanCollection struct {
17668	autorest.Response `json:"-"`
17669	// Value - The list of recovery plans.
17670	Value *[]RecoveryPlan `json:"value,omitempty"`
17671	// NextLink - The value of next link.
17672	NextLink *string `json:"nextLink,omitempty"`
17673}
17674
17675// RecoveryPlanCollectionIterator provides access to a complete listing of RecoveryPlan values.
17676type RecoveryPlanCollectionIterator struct {
17677	i    int
17678	page RecoveryPlanCollectionPage
17679}
17680
17681// NextWithContext advances to the next value.  If there was an error making
17682// the request the iterator does not advance and the error is returned.
17683func (iter *RecoveryPlanCollectionIterator) NextWithContext(ctx context.Context) (err error) {
17684	if tracing.IsEnabled() {
17685		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPlanCollectionIterator.NextWithContext")
17686		defer func() {
17687			sc := -1
17688			if iter.Response().Response.Response != nil {
17689				sc = iter.Response().Response.Response.StatusCode
17690			}
17691			tracing.EndSpan(ctx, sc, err)
17692		}()
17693	}
17694	iter.i++
17695	if iter.i < len(iter.page.Values()) {
17696		return nil
17697	}
17698	err = iter.page.NextWithContext(ctx)
17699	if err != nil {
17700		iter.i--
17701		return err
17702	}
17703	iter.i = 0
17704	return nil
17705}
17706
17707// Next advances to the next value.  If there was an error making
17708// the request the iterator does not advance and the error is returned.
17709// Deprecated: Use NextWithContext() instead.
17710func (iter *RecoveryPlanCollectionIterator) Next() error {
17711	return iter.NextWithContext(context.Background())
17712}
17713
17714// NotDone returns true if the enumeration should be started or is not yet complete.
17715func (iter RecoveryPlanCollectionIterator) NotDone() bool {
17716	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17717}
17718
17719// Response returns the raw server response from the last page request.
17720func (iter RecoveryPlanCollectionIterator) Response() RecoveryPlanCollection {
17721	return iter.page.Response()
17722}
17723
17724// Value returns the current value or a zero-initialized value if the
17725// iterator has advanced beyond the end of the collection.
17726func (iter RecoveryPlanCollectionIterator) Value() RecoveryPlan {
17727	if !iter.page.NotDone() {
17728		return RecoveryPlan{}
17729	}
17730	return iter.page.Values()[iter.i]
17731}
17732
17733// Creates a new instance of the RecoveryPlanCollectionIterator type.
17734func NewRecoveryPlanCollectionIterator(page RecoveryPlanCollectionPage) RecoveryPlanCollectionIterator {
17735	return RecoveryPlanCollectionIterator{page: page}
17736}
17737
17738// IsEmpty returns true if the ListResult contains no values.
17739func (RPCVar RecoveryPlanCollection) IsEmpty() bool {
17740	return RPCVar.Value == nil || len(*RPCVar.Value) == 0
17741}
17742
17743// hasNextLink returns true if the NextLink is not empty.
17744func (RPCVar RecoveryPlanCollection) hasNextLink() bool {
17745	return RPCVar.NextLink != nil && len(*RPCVar.NextLink) != 0
17746}
17747
17748// recoveryPlanCollectionPreparer prepares a request to retrieve the next set of results.
17749// It returns nil if no more results exist.
17750func (RPCVar RecoveryPlanCollection) recoveryPlanCollectionPreparer(ctx context.Context) (*http.Request, error) {
17751	if !RPCVar.hasNextLink() {
17752		return nil, nil
17753	}
17754	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17755		autorest.AsJSON(),
17756		autorest.AsGet(),
17757		autorest.WithBaseURL(to.String(RPCVar.NextLink)))
17758}
17759
17760// RecoveryPlanCollectionPage contains a page of RecoveryPlan values.
17761type RecoveryPlanCollectionPage struct {
17762	fn     func(context.Context, RecoveryPlanCollection) (RecoveryPlanCollection, error)
17763	RPCVar RecoveryPlanCollection
17764}
17765
17766// NextWithContext advances to the next page of values.  If there was an error making
17767// the request the page does not advance and the error is returned.
17768func (page *RecoveryPlanCollectionPage) NextWithContext(ctx context.Context) (err error) {
17769	if tracing.IsEnabled() {
17770		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPlanCollectionPage.NextWithContext")
17771		defer func() {
17772			sc := -1
17773			if page.Response().Response.Response != nil {
17774				sc = page.Response().Response.Response.StatusCode
17775			}
17776			tracing.EndSpan(ctx, sc, err)
17777		}()
17778	}
17779	for {
17780		next, err := page.fn(ctx, page.RPCVar)
17781		if err != nil {
17782			return err
17783		}
17784		page.RPCVar = next
17785		if !next.hasNextLink() || !next.IsEmpty() {
17786			break
17787		}
17788	}
17789	return nil
17790}
17791
17792// Next advances to the next page of values.  If there was an error making
17793// the request the page does not advance and the error is returned.
17794// Deprecated: Use NextWithContext() instead.
17795func (page *RecoveryPlanCollectionPage) Next() error {
17796	return page.NextWithContext(context.Background())
17797}
17798
17799// NotDone returns true if the page enumeration should be started or is not yet complete.
17800func (page RecoveryPlanCollectionPage) NotDone() bool {
17801	return !page.RPCVar.IsEmpty()
17802}
17803
17804// Response returns the raw server response from the last page request.
17805func (page RecoveryPlanCollectionPage) Response() RecoveryPlanCollection {
17806	return page.RPCVar
17807}
17808
17809// Values returns the slice of values for the current page or nil if there are no values.
17810func (page RecoveryPlanCollectionPage) Values() []RecoveryPlan {
17811	if page.RPCVar.IsEmpty() {
17812		return nil
17813	}
17814	return *page.RPCVar.Value
17815}
17816
17817// Creates a new instance of the RecoveryPlanCollectionPage type.
17818func NewRecoveryPlanCollectionPage(cur RecoveryPlanCollection, getNextPage func(context.Context, RecoveryPlanCollection) (RecoveryPlanCollection, error)) RecoveryPlanCollectionPage {
17819	return RecoveryPlanCollectionPage{
17820		fn:     getNextPage,
17821		RPCVar: cur,
17822	}
17823}
17824
17825// RecoveryPlanGroup recovery plan group details.
17826type RecoveryPlanGroup struct {
17827	// GroupType - The group type. Possible values include: 'Shutdown', 'Boot', 'Failover'
17828	GroupType RecoveryPlanGroupType `json:"groupType,omitempty"`
17829	// ReplicationProtectedItems - The list of protected items.
17830	ReplicationProtectedItems *[]RecoveryPlanProtectedItem `json:"replicationProtectedItems,omitempty"`
17831	// StartGroupActions - The start group actions.
17832	StartGroupActions *[]RecoveryPlanAction `json:"startGroupActions,omitempty"`
17833	// EndGroupActions - The end group actions.
17834	EndGroupActions *[]RecoveryPlanAction `json:"endGroupActions,omitempty"`
17835}
17836
17837// RecoveryPlanGroupTaskDetails this class represents the recovery plan group task.
17838type RecoveryPlanGroupTaskDetails struct {
17839	// Name - The name.
17840	Name *string `json:"name,omitempty"`
17841	// GroupID - The group identifier.
17842	GroupID *string `json:"groupId,omitempty"`
17843	// RpGroupType - The group type.
17844	RpGroupType *string `json:"rpGroupType,omitempty"`
17845	// ChildTasks - The child tasks.
17846	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
17847	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
17848	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
17849}
17850
17851// MarshalJSON is the custom marshaler for RecoveryPlanGroupTaskDetails.
17852func (rpgtd RecoveryPlanGroupTaskDetails) MarshalJSON() ([]byte, error) {
17853	rpgtd.InstanceType = InstanceTypeRecoveryPlanGroupTaskDetails
17854	objectMap := make(map[string]interface{})
17855	if rpgtd.Name != nil {
17856		objectMap["name"] = rpgtd.Name
17857	}
17858	if rpgtd.GroupID != nil {
17859		objectMap["groupId"] = rpgtd.GroupID
17860	}
17861	if rpgtd.RpGroupType != nil {
17862		objectMap["rpGroupType"] = rpgtd.RpGroupType
17863	}
17864	if rpgtd.ChildTasks != nil {
17865		objectMap["childTasks"] = rpgtd.ChildTasks
17866	}
17867	if rpgtd.InstanceType != "" {
17868		objectMap["instanceType"] = rpgtd.InstanceType
17869	}
17870	return json.Marshal(objectMap)
17871}
17872
17873// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17874func (rpgtd RecoveryPlanGroupTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
17875	return nil, false
17876}
17877
17878// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17879func (rpgtd RecoveryPlanGroupTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
17880	return &rpgtd, true
17881}
17882
17883// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17884func (rpgtd RecoveryPlanGroupTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
17885	return nil, false
17886}
17887
17888// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17889func (rpgtd RecoveryPlanGroupTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
17890	return nil, false
17891}
17892
17893// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanGroupTaskDetails.
17894func (rpgtd RecoveryPlanGroupTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
17895	return &rpgtd, true
17896}
17897
17898// RecoveryPlanHyperVReplicaAzureFailbackInput recovery plan HVR Azure failback input.
17899type RecoveryPlanHyperVReplicaAzureFailbackInput struct {
17900	// DataSyncOption - The data sync option. Possible values include: 'ForDownTime', 'ForSynchronization'
17901	DataSyncOption DataSyncStatus `json:"dataSyncOption,omitempty"`
17902	// RecoveryVMCreationOption - The ALR option. Possible values include: 'CreateVMIfNotFound', 'NoAction'
17903	RecoveryVMCreationOption AlternateLocationRecoveryOption `json:"recoveryVmCreationOption,omitempty"`
17904	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
17905	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
17906}
17907
17908// MarshalJSON is the custom marshaler for RecoveryPlanHyperVReplicaAzureFailbackInput.
17909func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) MarshalJSON() ([]byte, error) {
17910	rphvrafi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback
17911	objectMap := make(map[string]interface{})
17912	if rphvrafi.DataSyncOption != "" {
17913		objectMap["dataSyncOption"] = rphvrafi.DataSyncOption
17914	}
17915	if rphvrafi.RecoveryVMCreationOption != "" {
17916		objectMap["recoveryVmCreationOption"] = rphvrafi.RecoveryVMCreationOption
17917	}
17918	if rphvrafi.InstanceType != "" {
17919		objectMap["instanceType"] = rphvrafi.InstanceType
17920	}
17921	return json.Marshal(objectMap)
17922}
17923
17924// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17925func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
17926	return nil, false
17927}
17928
17929// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17930func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
17931	return &rphvrafi, true
17932}
17933
17934// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17935func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
17936	return nil, false
17937}
17938
17939// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17940func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
17941	return nil, false
17942}
17943
17944// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17945func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
17946	return nil, false
17947}
17948
17949// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17950func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
17951	return nil, false
17952}
17953
17954// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17955func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
17956	return nil, false
17957}
17958
17959// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailbackInput.
17960func (rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
17961	return &rphvrafi, true
17962}
17963
17964// RecoveryPlanHyperVReplicaAzureFailoverInput recovery plan HVR Azure failover input.
17965type RecoveryPlanHyperVReplicaAzureFailoverInput struct {
17966	// VaultLocation - The vault location.
17967	VaultLocation *string `json:"vaultLocation,omitempty"`
17968	// PrimaryKekCertificatePfx - The primary KEK certificate PFX.
17969	PrimaryKekCertificatePfx *string `json:"primaryKekCertificatePfx,omitempty"`
17970	// SecondaryKekCertificatePfx - The secondary KEK certificate PFX.
17971	SecondaryKekCertificatePfx *string `json:"secondaryKekCertificatePfx,omitempty"`
17972	// RecoveryPointType - The recovery point type. Possible values include: 'HyperVReplicaAzureRpRecoveryPointTypeLatest', 'HyperVReplicaAzureRpRecoveryPointTypeLatestApplicationConsistent', 'HyperVReplicaAzureRpRecoveryPointTypeLatestProcessed'
17973	RecoveryPointType HyperVReplicaAzureRpRecoveryPointType `json:"recoveryPointType,omitempty"`
17974	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
17975	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
17976}
17977
17978// MarshalJSON is the custom marshaler for RecoveryPlanHyperVReplicaAzureFailoverInput.
17979func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) MarshalJSON() ([]byte, error) {
17980	rphvrafi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure
17981	objectMap := make(map[string]interface{})
17982	if rphvrafi.VaultLocation != nil {
17983		objectMap["vaultLocation"] = rphvrafi.VaultLocation
17984	}
17985	if rphvrafi.PrimaryKekCertificatePfx != nil {
17986		objectMap["primaryKekCertificatePfx"] = rphvrafi.PrimaryKekCertificatePfx
17987	}
17988	if rphvrafi.SecondaryKekCertificatePfx != nil {
17989		objectMap["secondaryKekCertificatePfx"] = rphvrafi.SecondaryKekCertificatePfx
17990	}
17991	if rphvrafi.RecoveryPointType != "" {
17992		objectMap["recoveryPointType"] = rphvrafi.RecoveryPointType
17993	}
17994	if rphvrafi.InstanceType != "" {
17995		objectMap["instanceType"] = rphvrafi.InstanceType
17996	}
17997	return json.Marshal(objectMap)
17998}
17999
18000// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18001func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18002	return nil, false
18003}
18004
18005// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18006func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18007	return nil, false
18008}
18009
18010// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18011func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18012	return &rphvrafi, true
18013}
18014
18015// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18016func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18017	return nil, false
18018}
18019
18020// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18021func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18022	return nil, false
18023}
18024
18025// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18026func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18027	return nil, false
18028}
18029
18030// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18031func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18032	return nil, false
18033}
18034
18035// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanHyperVReplicaAzureFailoverInput.
18036func (rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18037	return &rphvrafi, true
18038}
18039
18040// RecoveryPlanInMageAzureV2FailoverInput recovery plan InMageAzureV2 failover input.
18041type RecoveryPlanInMageAzureV2FailoverInput struct {
18042	// VaultLocation - The vault location.
18043	VaultLocation *string `json:"vaultLocation,omitempty"`
18044	// RecoveryPointType - The recovery point type. Possible values include: 'InMageV2RpRecoveryPointTypeLatest', 'InMageV2RpRecoveryPointTypeLatestApplicationConsistent', 'InMageV2RpRecoveryPointTypeLatestCrashConsistent', 'InMageV2RpRecoveryPointTypeLatestProcessed'
18045	RecoveryPointType InMageV2RpRecoveryPointType `json:"recoveryPointType,omitempty"`
18046	// UseMultiVMSyncPoint - A value indicating whether multi VM sync enabled VMs should use multi VM sync points for failover.
18047	UseMultiVMSyncPoint *string `json:"useMultiVmSyncPoint,omitempty"`
18048	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18049	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18050}
18051
18052// MarshalJSON is the custom marshaler for RecoveryPlanInMageAzureV2FailoverInput.
18053func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) MarshalJSON() ([]byte, error) {
18054	rpimavfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2
18055	objectMap := make(map[string]interface{})
18056	if rpimavfi.VaultLocation != nil {
18057		objectMap["vaultLocation"] = rpimavfi.VaultLocation
18058	}
18059	if rpimavfi.RecoveryPointType != "" {
18060		objectMap["recoveryPointType"] = rpimavfi.RecoveryPointType
18061	}
18062	if rpimavfi.UseMultiVMSyncPoint != nil {
18063		objectMap["useMultiVmSyncPoint"] = rpimavfi.UseMultiVMSyncPoint
18064	}
18065	if rpimavfi.InstanceType != "" {
18066		objectMap["instanceType"] = rpimavfi.InstanceType
18067	}
18068	return json.Marshal(objectMap)
18069}
18070
18071// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18072func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18073	return nil, false
18074}
18075
18076// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18077func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18078	return nil, false
18079}
18080
18081// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18082func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18083	return nil, false
18084}
18085
18086// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18087func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18088	return &rpimavfi, true
18089}
18090
18091// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18092func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18093	return nil, false
18094}
18095
18096// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18097func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18098	return nil, false
18099}
18100
18101// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18102func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18103	return nil, false
18104}
18105
18106// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageAzureV2FailoverInput.
18107func (rpimavfi RecoveryPlanInMageAzureV2FailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18108	return &rpimavfi, true
18109}
18110
18111// RecoveryPlanInMageFailoverInput recovery plan InMage failover input.
18112type RecoveryPlanInMageFailoverInput struct {
18113	// RecoveryPointType - The recovery point type. Possible values include: 'RpInMageRecoveryPointTypeLatestTime', 'RpInMageRecoveryPointTypeLatestTag', 'RpInMageRecoveryPointTypeCustom'
18114	RecoveryPointType RpInMageRecoveryPointType `json:"recoveryPointType,omitempty"`
18115	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18116	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18117}
18118
18119// MarshalJSON is the custom marshaler for RecoveryPlanInMageFailoverInput.
18120func (rpimfi RecoveryPlanInMageFailoverInput) MarshalJSON() ([]byte, error) {
18121	rpimfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage
18122	objectMap := make(map[string]interface{})
18123	if rpimfi.RecoveryPointType != "" {
18124		objectMap["recoveryPointType"] = rpimfi.RecoveryPointType
18125	}
18126	if rpimfi.InstanceType != "" {
18127		objectMap["instanceType"] = rpimfi.InstanceType
18128	}
18129	return json.Marshal(objectMap)
18130}
18131
18132// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18133func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18134	return nil, false
18135}
18136
18137// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18138func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18139	return nil, false
18140}
18141
18142// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18143func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18144	return nil, false
18145}
18146
18147// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18148func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18149	return nil, false
18150}
18151
18152// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18153func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18154	return &rpimfi, true
18155}
18156
18157// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18158func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18159	return nil, false
18160}
18161
18162// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18163func (rpimfi RecoveryPlanInMageFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18164	return nil, false
18165}
18166
18167// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageFailoverInput.
18168func (rpimfi RecoveryPlanInMageFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18169	return &rpimfi, true
18170}
18171
18172// RecoveryPlanInMageRcmFailoverInput recovery plan InMageRcm failover input.
18173type RecoveryPlanInMageRcmFailoverInput struct {
18174	// RecoveryPointType - The recovery point type. Possible values include: 'RecoveryPlanPointTypeLatest', 'RecoveryPlanPointTypeLatestApplicationConsistent', 'RecoveryPlanPointTypeLatestCrashConsistent', 'RecoveryPlanPointTypeLatestProcessed'
18175	RecoveryPointType RecoveryPlanPointType `json:"recoveryPointType,omitempty"`
18176	// UseMultiVMSyncPoint - A value indicating whether multi VM sync enabled VMs should use multi VM sync points for failover.
18177	UseMultiVMSyncPoint *string `json:"useMultiVmSyncPoint,omitempty"`
18178	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18179	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18180}
18181
18182// MarshalJSON is the custom marshaler for RecoveryPlanInMageRcmFailoverInput.
18183func (rpimrfi RecoveryPlanInMageRcmFailoverInput) MarshalJSON() ([]byte, error) {
18184	rpimrfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm
18185	objectMap := make(map[string]interface{})
18186	if rpimrfi.RecoveryPointType != "" {
18187		objectMap["recoveryPointType"] = rpimrfi.RecoveryPointType
18188	}
18189	if rpimrfi.UseMultiVMSyncPoint != nil {
18190		objectMap["useMultiVmSyncPoint"] = rpimrfi.UseMultiVMSyncPoint
18191	}
18192	if rpimrfi.InstanceType != "" {
18193		objectMap["instanceType"] = rpimrfi.InstanceType
18194	}
18195	return json.Marshal(objectMap)
18196}
18197
18198// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18199func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18200	return nil, false
18201}
18202
18203// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18204func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18205	return nil, false
18206}
18207
18208// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18209func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18210	return nil, false
18211}
18212
18213// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18214func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18215	return nil, false
18216}
18217
18218// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18219func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18220	return nil, false
18221}
18222
18223// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18224func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18225	return &rpimrfi, true
18226}
18227
18228// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18229func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18230	return nil, false
18231}
18232
18233// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanInMageRcmFailoverInput.
18234func (rpimrfi RecoveryPlanInMageRcmFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18235	return &rpimrfi, true
18236}
18237
18238// RecoveryPlanManualActionDetails recovery plan manual action details.
18239type RecoveryPlanManualActionDetails struct {
18240	// Description - The manual action description.
18241	Description *string `json:"description,omitempty"`
18242	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
18243	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
18244}
18245
18246// MarshalJSON is the custom marshaler for RecoveryPlanManualActionDetails.
18247func (rpmad RecoveryPlanManualActionDetails) MarshalJSON() ([]byte, error) {
18248	rpmad.InstanceType = InstanceTypeManualActionDetails
18249	objectMap := make(map[string]interface{})
18250	if rpmad.Description != nil {
18251		objectMap["description"] = rpmad.Description
18252	}
18253	if rpmad.InstanceType != "" {
18254		objectMap["instanceType"] = rpmad.InstanceType
18255	}
18256	return json.Marshal(objectMap)
18257}
18258
18259// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18260func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
18261	return nil, false
18262}
18263
18264// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18265func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
18266	return &rpmad, true
18267}
18268
18269// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18270func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
18271	return nil, false
18272}
18273
18274// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18275func (rpmad RecoveryPlanManualActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
18276	return nil, false
18277}
18278
18279// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanManualActionDetails.
18280func (rpmad RecoveryPlanManualActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
18281	return &rpmad, true
18282}
18283
18284// RecoveryPlanPlannedFailoverInput recovery plan planned failover input.
18285type RecoveryPlanPlannedFailoverInput struct {
18286	// Properties - The recovery plan planned failover input properties.
18287	Properties *RecoveryPlanPlannedFailoverInputProperties `json:"properties,omitempty"`
18288}
18289
18290// RecoveryPlanPlannedFailoverInputProperties recovery plan planned failover input properties.
18291type RecoveryPlanPlannedFailoverInputProperties struct {
18292	// FailoverDirection - The failover direction. Possible values include: 'PrimaryToRecovery', 'RecoveryToPrimary'
18293	FailoverDirection PossibleOperationsDirections `json:"failoverDirection,omitempty"`
18294	// ProviderSpecificDetails - The provider specific properties.
18295	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
18296}
18297
18298// UnmarshalJSON is the custom unmarshaler for RecoveryPlanPlannedFailoverInputProperties struct.
18299func (rppfip *RecoveryPlanPlannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
18300	var m map[string]*json.RawMessage
18301	err := json.Unmarshal(body, &m)
18302	if err != nil {
18303		return err
18304	}
18305	for k, v := range m {
18306		switch k {
18307		case "failoverDirection":
18308			if v != nil {
18309				var failoverDirection PossibleOperationsDirections
18310				err = json.Unmarshal(*v, &failoverDirection)
18311				if err != nil {
18312					return err
18313				}
18314				rppfip.FailoverDirection = failoverDirection
18315			}
18316		case "providerSpecificDetails":
18317			if v != nil {
18318				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(*v)
18319				if err != nil {
18320					return err
18321				}
18322				rppfip.ProviderSpecificDetails = &providerSpecificDetails
18323			}
18324		}
18325	}
18326
18327	return nil
18328}
18329
18330// RecoveryPlanProperties recovery plan custom details.
18331type RecoveryPlanProperties struct {
18332	// FriendlyName - The friendly name.
18333	FriendlyName *string `json:"friendlyName,omitempty"`
18334	// PrimaryFabricID - The primary fabric Id.
18335	PrimaryFabricID *string `json:"primaryFabricId,omitempty"`
18336	// PrimaryFabricFriendlyName - The primary fabric friendly name.
18337	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
18338	// RecoveryFabricID - The recovery fabric Id.
18339	RecoveryFabricID *string `json:"recoveryFabricId,omitempty"`
18340	// RecoveryFabricFriendlyName - The recovery fabric friendly name.
18341	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
18342	// FailoverDeploymentModel - The failover deployment model.
18343	FailoverDeploymentModel *string `json:"failoverDeploymentModel,omitempty"`
18344	// ReplicationProviders - The list of replication providers.
18345	ReplicationProviders *[]string `json:"replicationProviders,omitempty"`
18346	// AllowedOperations - The list of allowed operations.
18347	AllowedOperations *[]string `json:"allowedOperations,omitempty"`
18348	// LastPlannedFailoverTime - The start time of the last planned failover.
18349	LastPlannedFailoverTime *date.Time `json:"lastPlannedFailoverTime,omitempty"`
18350	// LastUnplannedFailoverTime - The start time of the last unplanned failover.
18351	LastUnplannedFailoverTime *date.Time `json:"lastUnplannedFailoverTime,omitempty"`
18352	// LastTestFailoverTime - The start time of the last test failover.
18353	LastTestFailoverTime *date.Time `json:"lastTestFailoverTime,omitempty"`
18354	// CurrentScenario - The current scenario details.
18355	CurrentScenario *CurrentScenarioDetails `json:"currentScenario,omitempty"`
18356	// CurrentScenarioStatus - The recovery plan status.
18357	CurrentScenarioStatus *string `json:"currentScenarioStatus,omitempty"`
18358	// CurrentScenarioStatusDescription - The recovery plan status description.
18359	CurrentScenarioStatusDescription *string `json:"currentScenarioStatusDescription,omitempty"`
18360	// Groups - The recovery plan groups.
18361	Groups *[]RecoveryPlanGroup `json:"groups,omitempty"`
18362	// ProviderSpecificDetails - READ-ONLY; The provider id and provider specific details.
18363	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificDetails `json:"providerSpecificDetails,omitempty"`
18364}
18365
18366// MarshalJSON is the custom marshaler for RecoveryPlanProperties.
18367func (rpp RecoveryPlanProperties) MarshalJSON() ([]byte, error) {
18368	objectMap := make(map[string]interface{})
18369	if rpp.FriendlyName != nil {
18370		objectMap["friendlyName"] = rpp.FriendlyName
18371	}
18372	if rpp.PrimaryFabricID != nil {
18373		objectMap["primaryFabricId"] = rpp.PrimaryFabricID
18374	}
18375	if rpp.PrimaryFabricFriendlyName != nil {
18376		objectMap["primaryFabricFriendlyName"] = rpp.PrimaryFabricFriendlyName
18377	}
18378	if rpp.RecoveryFabricID != nil {
18379		objectMap["recoveryFabricId"] = rpp.RecoveryFabricID
18380	}
18381	if rpp.RecoveryFabricFriendlyName != nil {
18382		objectMap["recoveryFabricFriendlyName"] = rpp.RecoveryFabricFriendlyName
18383	}
18384	if rpp.FailoverDeploymentModel != nil {
18385		objectMap["failoverDeploymentModel"] = rpp.FailoverDeploymentModel
18386	}
18387	if rpp.ReplicationProviders != nil {
18388		objectMap["replicationProviders"] = rpp.ReplicationProviders
18389	}
18390	if rpp.AllowedOperations != nil {
18391		objectMap["allowedOperations"] = rpp.AllowedOperations
18392	}
18393	if rpp.LastPlannedFailoverTime != nil {
18394		objectMap["lastPlannedFailoverTime"] = rpp.LastPlannedFailoverTime
18395	}
18396	if rpp.LastUnplannedFailoverTime != nil {
18397		objectMap["lastUnplannedFailoverTime"] = rpp.LastUnplannedFailoverTime
18398	}
18399	if rpp.LastTestFailoverTime != nil {
18400		objectMap["lastTestFailoverTime"] = rpp.LastTestFailoverTime
18401	}
18402	if rpp.CurrentScenario != nil {
18403		objectMap["currentScenario"] = rpp.CurrentScenario
18404	}
18405	if rpp.CurrentScenarioStatus != nil {
18406		objectMap["currentScenarioStatus"] = rpp.CurrentScenarioStatus
18407	}
18408	if rpp.CurrentScenarioStatusDescription != nil {
18409		objectMap["currentScenarioStatusDescription"] = rpp.CurrentScenarioStatusDescription
18410	}
18411	if rpp.Groups != nil {
18412		objectMap["groups"] = rpp.Groups
18413	}
18414	return json.Marshal(objectMap)
18415}
18416
18417// UnmarshalJSON is the custom unmarshaler for RecoveryPlanProperties struct.
18418func (rpp *RecoveryPlanProperties) UnmarshalJSON(body []byte) error {
18419	var m map[string]*json.RawMessage
18420	err := json.Unmarshal(body, &m)
18421	if err != nil {
18422		return err
18423	}
18424	for k, v := range m {
18425		switch k {
18426		case "friendlyName":
18427			if v != nil {
18428				var friendlyName string
18429				err = json.Unmarshal(*v, &friendlyName)
18430				if err != nil {
18431					return err
18432				}
18433				rpp.FriendlyName = &friendlyName
18434			}
18435		case "primaryFabricId":
18436			if v != nil {
18437				var primaryFabricID string
18438				err = json.Unmarshal(*v, &primaryFabricID)
18439				if err != nil {
18440					return err
18441				}
18442				rpp.PrimaryFabricID = &primaryFabricID
18443			}
18444		case "primaryFabricFriendlyName":
18445			if v != nil {
18446				var primaryFabricFriendlyName string
18447				err = json.Unmarshal(*v, &primaryFabricFriendlyName)
18448				if err != nil {
18449					return err
18450				}
18451				rpp.PrimaryFabricFriendlyName = &primaryFabricFriendlyName
18452			}
18453		case "recoveryFabricId":
18454			if v != nil {
18455				var recoveryFabricID string
18456				err = json.Unmarshal(*v, &recoveryFabricID)
18457				if err != nil {
18458					return err
18459				}
18460				rpp.RecoveryFabricID = &recoveryFabricID
18461			}
18462		case "recoveryFabricFriendlyName":
18463			if v != nil {
18464				var recoveryFabricFriendlyName string
18465				err = json.Unmarshal(*v, &recoveryFabricFriendlyName)
18466				if err != nil {
18467					return err
18468				}
18469				rpp.RecoveryFabricFriendlyName = &recoveryFabricFriendlyName
18470			}
18471		case "failoverDeploymentModel":
18472			if v != nil {
18473				var failoverDeploymentModel string
18474				err = json.Unmarshal(*v, &failoverDeploymentModel)
18475				if err != nil {
18476					return err
18477				}
18478				rpp.FailoverDeploymentModel = &failoverDeploymentModel
18479			}
18480		case "replicationProviders":
18481			if v != nil {
18482				var replicationProviders []string
18483				err = json.Unmarshal(*v, &replicationProviders)
18484				if err != nil {
18485					return err
18486				}
18487				rpp.ReplicationProviders = &replicationProviders
18488			}
18489		case "allowedOperations":
18490			if v != nil {
18491				var allowedOperations []string
18492				err = json.Unmarshal(*v, &allowedOperations)
18493				if err != nil {
18494					return err
18495				}
18496				rpp.AllowedOperations = &allowedOperations
18497			}
18498		case "lastPlannedFailoverTime":
18499			if v != nil {
18500				var lastPlannedFailoverTime date.Time
18501				err = json.Unmarshal(*v, &lastPlannedFailoverTime)
18502				if err != nil {
18503					return err
18504				}
18505				rpp.LastPlannedFailoverTime = &lastPlannedFailoverTime
18506			}
18507		case "lastUnplannedFailoverTime":
18508			if v != nil {
18509				var lastUnplannedFailoverTime date.Time
18510				err = json.Unmarshal(*v, &lastUnplannedFailoverTime)
18511				if err != nil {
18512					return err
18513				}
18514				rpp.LastUnplannedFailoverTime = &lastUnplannedFailoverTime
18515			}
18516		case "lastTestFailoverTime":
18517			if v != nil {
18518				var lastTestFailoverTime date.Time
18519				err = json.Unmarshal(*v, &lastTestFailoverTime)
18520				if err != nil {
18521					return err
18522				}
18523				rpp.LastTestFailoverTime = &lastTestFailoverTime
18524			}
18525		case "currentScenario":
18526			if v != nil {
18527				var currentScenario CurrentScenarioDetails
18528				err = json.Unmarshal(*v, &currentScenario)
18529				if err != nil {
18530					return err
18531				}
18532				rpp.CurrentScenario = &currentScenario
18533			}
18534		case "currentScenarioStatus":
18535			if v != nil {
18536				var currentScenarioStatus string
18537				err = json.Unmarshal(*v, &currentScenarioStatus)
18538				if err != nil {
18539					return err
18540				}
18541				rpp.CurrentScenarioStatus = &currentScenarioStatus
18542			}
18543		case "currentScenarioStatusDescription":
18544			if v != nil {
18545				var currentScenarioStatusDescription string
18546				err = json.Unmarshal(*v, &currentScenarioStatusDescription)
18547				if err != nil {
18548					return err
18549				}
18550				rpp.CurrentScenarioStatusDescription = &currentScenarioStatusDescription
18551			}
18552		case "groups":
18553			if v != nil {
18554				var groups []RecoveryPlanGroup
18555				err = json.Unmarshal(*v, &groups)
18556				if err != nil {
18557					return err
18558				}
18559				rpp.Groups = &groups
18560			}
18561		case "providerSpecificDetails":
18562			if v != nil {
18563				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificDetailsArray(*v)
18564				if err != nil {
18565					return err
18566				}
18567				rpp.ProviderSpecificDetails = &providerSpecificDetails
18568			}
18569		}
18570	}
18571
18572	return nil
18573}
18574
18575// RecoveryPlanProtectedItem recovery plan protected item.
18576type RecoveryPlanProtectedItem struct {
18577	// ID - The ARM Id of the recovery plan protected item.
18578	ID *string `json:"id,omitempty"`
18579	// VirtualMachineID - The virtual machine Id.
18580	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
18581}
18582
18583// BasicRecoveryPlanProviderSpecificDetails recovery plan provider specific details.
18584type BasicRecoveryPlanProviderSpecificDetails interface {
18585	AsRecoveryPlanA2ADetails() (*RecoveryPlanA2ADetails, bool)
18586	AsRecoveryPlanProviderSpecificDetails() (*RecoveryPlanProviderSpecificDetails, bool)
18587}
18588
18589// RecoveryPlanProviderSpecificDetails recovery plan provider specific details.
18590type RecoveryPlanProviderSpecificDetails struct {
18591	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeRecoveryPlanProviderSpecificDetails', 'InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A'
18592	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificDetails `json:"instanceType,omitempty"`
18593}
18594
18595func unmarshalBasicRecoveryPlanProviderSpecificDetails(body []byte) (BasicRecoveryPlanProviderSpecificDetails, error) {
18596	var m map[string]interface{}
18597	err := json.Unmarshal(body, &m)
18598	if err != nil {
18599		return nil, err
18600	}
18601
18602	switch m["instanceType"] {
18603	case string(InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeA2A):
18604		var rpad RecoveryPlanA2ADetails
18605		err := json.Unmarshal(body, &rpad)
18606		return rpad, err
18607	default:
18608		var rppsd RecoveryPlanProviderSpecificDetails
18609		err := json.Unmarshal(body, &rppsd)
18610		return rppsd, err
18611	}
18612}
18613func unmarshalBasicRecoveryPlanProviderSpecificDetailsArray(body []byte) ([]BasicRecoveryPlanProviderSpecificDetails, error) {
18614	var rawMessages []*json.RawMessage
18615	err := json.Unmarshal(body, &rawMessages)
18616	if err != nil {
18617		return nil, err
18618	}
18619
18620	rppsdArray := make([]BasicRecoveryPlanProviderSpecificDetails, len(rawMessages))
18621
18622	for index, rawMessage := range rawMessages {
18623		rppsd, err := unmarshalBasicRecoveryPlanProviderSpecificDetails(*rawMessage)
18624		if err != nil {
18625			return nil, err
18626		}
18627		rppsdArray[index] = rppsd
18628	}
18629	return rppsdArray, nil
18630}
18631
18632// MarshalJSON is the custom marshaler for RecoveryPlanProviderSpecificDetails.
18633func (rppsd RecoveryPlanProviderSpecificDetails) MarshalJSON() ([]byte, error) {
18634	rppsd.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificDetailsInstanceTypeRecoveryPlanProviderSpecificDetails
18635	objectMap := make(map[string]interface{})
18636	if rppsd.InstanceType != "" {
18637		objectMap["instanceType"] = rppsd.InstanceType
18638	}
18639	return json.Marshal(objectMap)
18640}
18641
18642// AsRecoveryPlanA2ADetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanProviderSpecificDetails.
18643func (rppsd RecoveryPlanProviderSpecificDetails) AsRecoveryPlanA2ADetails() (*RecoveryPlanA2ADetails, bool) {
18644	return nil, false
18645}
18646
18647// AsRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanProviderSpecificDetails.
18648func (rppsd RecoveryPlanProviderSpecificDetails) AsRecoveryPlanProviderSpecificDetails() (*RecoveryPlanProviderSpecificDetails, bool) {
18649	return &rppsd, true
18650}
18651
18652// AsBasicRecoveryPlanProviderSpecificDetails is the BasicRecoveryPlanProviderSpecificDetails implementation for RecoveryPlanProviderSpecificDetails.
18653func (rppsd RecoveryPlanProviderSpecificDetails) AsBasicRecoveryPlanProviderSpecificDetails() (BasicRecoveryPlanProviderSpecificDetails, bool) {
18654	return &rppsd, true
18655}
18656
18657// BasicRecoveryPlanProviderSpecificFailoverInput recovery plan provider specific failover input base class.
18658type BasicRecoveryPlanProviderSpecificFailoverInput interface {
18659	AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool)
18660	AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool)
18661	AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool)
18662	AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool)
18663	AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool)
18664	AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool)
18665	AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool)
18666}
18667
18668// RecoveryPlanProviderSpecificFailoverInput recovery plan provider specific failover input base class.
18669type RecoveryPlanProviderSpecificFailoverInput struct {
18670	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage', 'InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm'
18671	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInput `json:"instanceType,omitempty"`
18672}
18673
18674func unmarshalBasicRecoveryPlanProviderSpecificFailoverInput(body []byte) (BasicRecoveryPlanProviderSpecificFailoverInput, error) {
18675	var m map[string]interface{}
18676	err := json.Unmarshal(body, &m)
18677	if err != nil {
18678		return nil, err
18679	}
18680
18681	switch m["instanceType"] {
18682	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeA2A):
18683		var rpafi RecoveryPlanA2AFailoverInput
18684		err := json.Unmarshal(body, &rpafi)
18685		return rpafi, err
18686	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzureFailback):
18687		var rphvrafi RecoveryPlanHyperVReplicaAzureFailbackInput
18688		err := json.Unmarshal(body, &rphvrafi)
18689		return rphvrafi, err
18690	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeHyperVReplicaAzure):
18691		var rphvrafi RecoveryPlanHyperVReplicaAzureFailoverInput
18692		err := json.Unmarshal(body, &rphvrafi)
18693		return rphvrafi, err
18694	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageAzureV2):
18695		var rpimavfi RecoveryPlanInMageAzureV2FailoverInput
18696		err := json.Unmarshal(body, &rpimavfi)
18697		return rpimavfi, err
18698	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMage):
18699		var rpimfi RecoveryPlanInMageFailoverInput
18700		err := json.Unmarshal(body, &rpimfi)
18701		return rpimfi, err
18702	case string(InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeInMageRcm):
18703		var rpimrfi RecoveryPlanInMageRcmFailoverInput
18704		err := json.Unmarshal(body, &rpimrfi)
18705		return rpimrfi, err
18706	default:
18707		var rppsfi RecoveryPlanProviderSpecificFailoverInput
18708		err := json.Unmarshal(body, &rppsfi)
18709		return rppsfi, err
18710	}
18711}
18712func unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(body []byte) ([]BasicRecoveryPlanProviderSpecificFailoverInput, error) {
18713	var rawMessages []*json.RawMessage
18714	err := json.Unmarshal(body, &rawMessages)
18715	if err != nil {
18716		return nil, err
18717	}
18718
18719	rppsfiArray := make([]BasicRecoveryPlanProviderSpecificFailoverInput, len(rawMessages))
18720
18721	for index, rawMessage := range rawMessages {
18722		rppsfi, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInput(*rawMessage)
18723		if err != nil {
18724			return nil, err
18725		}
18726		rppsfiArray[index] = rppsfi
18727	}
18728	return rppsfiArray, nil
18729}
18730
18731// MarshalJSON is the custom marshaler for RecoveryPlanProviderSpecificFailoverInput.
18732func (rppsfi RecoveryPlanProviderSpecificFailoverInput) MarshalJSON() ([]byte, error) {
18733	rppsfi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificFailoverInputInstanceTypeRecoveryPlanProviderSpecificFailoverInput
18734	objectMap := make(map[string]interface{})
18735	if rppsfi.InstanceType != "" {
18736		objectMap["instanceType"] = rppsfi.InstanceType
18737	}
18738	return json.Marshal(objectMap)
18739}
18740
18741// AsRecoveryPlanA2AFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18742func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanA2AFailoverInput() (*RecoveryPlanA2AFailoverInput, bool) {
18743	return nil, false
18744}
18745
18746// AsRecoveryPlanHyperVReplicaAzureFailbackInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18747func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailbackInput() (*RecoveryPlanHyperVReplicaAzureFailbackInput, bool) {
18748	return nil, false
18749}
18750
18751// AsRecoveryPlanHyperVReplicaAzureFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18752func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanHyperVReplicaAzureFailoverInput() (*RecoveryPlanHyperVReplicaAzureFailoverInput, bool) {
18753	return nil, false
18754}
18755
18756// AsRecoveryPlanInMageAzureV2FailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18757func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanInMageAzureV2FailoverInput() (*RecoveryPlanInMageAzureV2FailoverInput, bool) {
18758	return nil, false
18759}
18760
18761// AsRecoveryPlanInMageFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18762func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanInMageFailoverInput() (*RecoveryPlanInMageFailoverInput, bool) {
18763	return nil, false
18764}
18765
18766// AsRecoveryPlanInMageRcmFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18767func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanInMageRcmFailoverInput() (*RecoveryPlanInMageRcmFailoverInput, bool) {
18768	return nil, false
18769}
18770
18771// AsRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18772func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsRecoveryPlanProviderSpecificFailoverInput() (*RecoveryPlanProviderSpecificFailoverInput, bool) {
18773	return &rppsfi, true
18774}
18775
18776// AsBasicRecoveryPlanProviderSpecificFailoverInput is the BasicRecoveryPlanProviderSpecificFailoverInput implementation for RecoveryPlanProviderSpecificFailoverInput.
18777func (rppsfi RecoveryPlanProviderSpecificFailoverInput) AsBasicRecoveryPlanProviderSpecificFailoverInput() (BasicRecoveryPlanProviderSpecificFailoverInput, bool) {
18778	return &rppsfi, true
18779}
18780
18781// BasicRecoveryPlanProviderSpecificInput recovery plan provider specific input base class.
18782type BasicRecoveryPlanProviderSpecificInput interface {
18783	AsRecoveryPlanA2AInput() (*RecoveryPlanA2AInput, bool)
18784	AsRecoveryPlanProviderSpecificInput() (*RecoveryPlanProviderSpecificInput, bool)
18785}
18786
18787// RecoveryPlanProviderSpecificInput recovery plan provider specific input base class.
18788type RecoveryPlanProviderSpecificInput struct {
18789	// InstanceType - Possible values include: 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeRecoveryPlanProviderSpecificInput', 'InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A'
18790	InstanceType InstanceTypeBasicRecoveryPlanProviderSpecificInput `json:"instanceType,omitempty"`
18791}
18792
18793func unmarshalBasicRecoveryPlanProviderSpecificInput(body []byte) (BasicRecoveryPlanProviderSpecificInput, error) {
18794	var m map[string]interface{}
18795	err := json.Unmarshal(body, &m)
18796	if err != nil {
18797		return nil, err
18798	}
18799
18800	switch m["instanceType"] {
18801	case string(InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeA2A):
18802		var rpai RecoveryPlanA2AInput
18803		err := json.Unmarshal(body, &rpai)
18804		return rpai, err
18805	default:
18806		var rppsi RecoveryPlanProviderSpecificInput
18807		err := json.Unmarshal(body, &rppsi)
18808		return rppsi, err
18809	}
18810}
18811func unmarshalBasicRecoveryPlanProviderSpecificInputArray(body []byte) ([]BasicRecoveryPlanProviderSpecificInput, error) {
18812	var rawMessages []*json.RawMessage
18813	err := json.Unmarshal(body, &rawMessages)
18814	if err != nil {
18815		return nil, err
18816	}
18817
18818	rppsiArray := make([]BasicRecoveryPlanProviderSpecificInput, len(rawMessages))
18819
18820	for index, rawMessage := range rawMessages {
18821		rppsi, err := unmarshalBasicRecoveryPlanProviderSpecificInput(*rawMessage)
18822		if err != nil {
18823			return nil, err
18824		}
18825		rppsiArray[index] = rppsi
18826	}
18827	return rppsiArray, nil
18828}
18829
18830// MarshalJSON is the custom marshaler for RecoveryPlanProviderSpecificInput.
18831func (rppsi RecoveryPlanProviderSpecificInput) MarshalJSON() ([]byte, error) {
18832	rppsi.InstanceType = InstanceTypeBasicRecoveryPlanProviderSpecificInputInstanceTypeRecoveryPlanProviderSpecificInput
18833	objectMap := make(map[string]interface{})
18834	if rppsi.InstanceType != "" {
18835		objectMap["instanceType"] = rppsi.InstanceType
18836	}
18837	return json.Marshal(objectMap)
18838}
18839
18840// AsRecoveryPlanA2AInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanProviderSpecificInput.
18841func (rppsi RecoveryPlanProviderSpecificInput) AsRecoveryPlanA2AInput() (*RecoveryPlanA2AInput, bool) {
18842	return nil, false
18843}
18844
18845// AsRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanProviderSpecificInput.
18846func (rppsi RecoveryPlanProviderSpecificInput) AsRecoveryPlanProviderSpecificInput() (*RecoveryPlanProviderSpecificInput, bool) {
18847	return &rppsi, true
18848}
18849
18850// AsBasicRecoveryPlanProviderSpecificInput is the BasicRecoveryPlanProviderSpecificInput implementation for RecoveryPlanProviderSpecificInput.
18851func (rppsi RecoveryPlanProviderSpecificInput) AsBasicRecoveryPlanProviderSpecificInput() (BasicRecoveryPlanProviderSpecificInput, bool) {
18852	return &rppsi, true
18853}
18854
18855// RecoveryPlanScriptActionDetails recovery plan script action details.
18856type RecoveryPlanScriptActionDetails struct {
18857	// Path - The script path.
18858	Path *string `json:"path,omitempty"`
18859	// Timeout - The script timeout.
18860	Timeout *string `json:"timeout,omitempty"`
18861	// FabricLocation - The fabric location. Possible values include: 'Primary', 'Recovery'
18862	FabricLocation RecoveryPlanActionLocation `json:"fabricLocation,omitempty"`
18863	// InstanceType - Possible values include: 'InstanceTypeRecoveryPlanActionDetails', 'InstanceTypeAutomationRunbookActionDetails', 'InstanceTypeManualActionDetails', 'InstanceTypeScriptActionDetails'
18864	InstanceType InstanceTypeBasicRecoveryPlanActionDetails `json:"instanceType,omitempty"`
18865}
18866
18867// MarshalJSON is the custom marshaler for RecoveryPlanScriptActionDetails.
18868func (rpsad RecoveryPlanScriptActionDetails) MarshalJSON() ([]byte, error) {
18869	rpsad.InstanceType = InstanceTypeScriptActionDetails
18870	objectMap := make(map[string]interface{})
18871	if rpsad.Path != nil {
18872		objectMap["path"] = rpsad.Path
18873	}
18874	if rpsad.Timeout != nil {
18875		objectMap["timeout"] = rpsad.Timeout
18876	}
18877	if rpsad.FabricLocation != "" {
18878		objectMap["fabricLocation"] = rpsad.FabricLocation
18879	}
18880	if rpsad.InstanceType != "" {
18881		objectMap["instanceType"] = rpsad.InstanceType
18882	}
18883	return json.Marshal(objectMap)
18884}
18885
18886// AsRecoveryPlanAutomationRunbookActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18887func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanAutomationRunbookActionDetails() (*RecoveryPlanAutomationRunbookActionDetails, bool) {
18888	return nil, false
18889}
18890
18891// AsRecoveryPlanManualActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18892func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanManualActionDetails() (*RecoveryPlanManualActionDetails, bool) {
18893	return nil, false
18894}
18895
18896// AsRecoveryPlanScriptActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18897func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanScriptActionDetails() (*RecoveryPlanScriptActionDetails, bool) {
18898	return &rpsad, true
18899}
18900
18901// AsRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18902func (rpsad RecoveryPlanScriptActionDetails) AsRecoveryPlanActionDetails() (*RecoveryPlanActionDetails, bool) {
18903	return nil, false
18904}
18905
18906// AsBasicRecoveryPlanActionDetails is the BasicRecoveryPlanActionDetails implementation for RecoveryPlanScriptActionDetails.
18907func (rpsad RecoveryPlanScriptActionDetails) AsBasicRecoveryPlanActionDetails() (BasicRecoveryPlanActionDetails, bool) {
18908	return &rpsad, true
18909}
18910
18911// RecoveryPlanShutdownGroupTaskDetails this class represents the recovery plan shutdown group task
18912// details.
18913type RecoveryPlanShutdownGroupTaskDetails struct {
18914	// Name - The name.
18915	Name *string `json:"name,omitempty"`
18916	// GroupID - The group identifier.
18917	GroupID *string `json:"groupId,omitempty"`
18918	// RpGroupType - The group type.
18919	RpGroupType *string `json:"rpGroupType,omitempty"`
18920	// ChildTasks - The child tasks.
18921	ChildTasks *[]ASRTask `json:"childTasks,omitempty"`
18922	// InstanceType - Possible values include: 'InstanceTypeGroupTaskDetails', 'InstanceTypeInlineWorkflowTaskDetails', 'InstanceTypeRecoveryPlanGroupTaskDetails', 'InstanceTypeRecoveryPlanShutdownGroupTaskDetails'
18923	InstanceType InstanceTypeBasicGroupTaskDetails `json:"instanceType,omitempty"`
18924}
18925
18926// MarshalJSON is the custom marshaler for RecoveryPlanShutdownGroupTaskDetails.
18927func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) MarshalJSON() ([]byte, error) {
18928	rpsgtd.InstanceType = InstanceTypeRecoveryPlanShutdownGroupTaskDetails
18929	objectMap := make(map[string]interface{})
18930	if rpsgtd.Name != nil {
18931		objectMap["name"] = rpsgtd.Name
18932	}
18933	if rpsgtd.GroupID != nil {
18934		objectMap["groupId"] = rpsgtd.GroupID
18935	}
18936	if rpsgtd.RpGroupType != nil {
18937		objectMap["rpGroupType"] = rpsgtd.RpGroupType
18938	}
18939	if rpsgtd.ChildTasks != nil {
18940		objectMap["childTasks"] = rpsgtd.ChildTasks
18941	}
18942	if rpsgtd.InstanceType != "" {
18943		objectMap["instanceType"] = rpsgtd.InstanceType
18944	}
18945	return json.Marshal(objectMap)
18946}
18947
18948// AsInlineWorkflowTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
18949func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsInlineWorkflowTaskDetails() (*InlineWorkflowTaskDetails, bool) {
18950	return nil, false
18951}
18952
18953// AsRecoveryPlanGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
18954func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsRecoveryPlanGroupTaskDetails() (*RecoveryPlanGroupTaskDetails, bool) {
18955	return nil, false
18956}
18957
18958// AsRecoveryPlanShutdownGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
18959func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsRecoveryPlanShutdownGroupTaskDetails() (*RecoveryPlanShutdownGroupTaskDetails, bool) {
18960	return &rpsgtd, true
18961}
18962
18963// AsGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
18964func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsGroupTaskDetails() (*GroupTaskDetails, bool) {
18965	return nil, false
18966}
18967
18968// AsBasicGroupTaskDetails is the BasicGroupTaskDetails implementation for RecoveryPlanShutdownGroupTaskDetails.
18969func (rpsgtd RecoveryPlanShutdownGroupTaskDetails) AsBasicGroupTaskDetails() (BasicGroupTaskDetails, bool) {
18970	return &rpsgtd, true
18971}
18972
18973// RecoveryPlanTestFailoverCleanupInput recovery plan test failover cleanup input.
18974type RecoveryPlanTestFailoverCleanupInput struct {
18975	// Properties - The recovery plan test failover cleanup input properties.
18976	Properties *RecoveryPlanTestFailoverCleanupInputProperties `json:"properties,omitempty"`
18977}
18978
18979// RecoveryPlanTestFailoverCleanupInputProperties recovery plan test failover cleanup input properties.
18980type RecoveryPlanTestFailoverCleanupInputProperties struct {
18981	// Comments - The test failover cleanup comments.
18982	Comments *string `json:"comments,omitempty"`
18983}
18984
18985// RecoveryPlanTestFailoverInput recovery plan test failover input.
18986type RecoveryPlanTestFailoverInput struct {
18987	// Properties - The recovery plan test failover input properties.
18988	Properties *RecoveryPlanTestFailoverInputProperties `json:"properties,omitempty"`
18989}
18990
18991// RecoveryPlanTestFailoverInputProperties recovery plan test failover input properties.
18992type RecoveryPlanTestFailoverInputProperties struct {
18993	// FailoverDirection - The failover direction. Possible values include: 'PrimaryToRecovery', 'RecoveryToPrimary'
18994	FailoverDirection PossibleOperationsDirections `json:"failoverDirection,omitempty"`
18995	// NetworkType - The network type to be used for test failover.
18996	NetworkType *string `json:"networkType,omitempty"`
18997	// NetworkID - The Id of the network to be used for test failover.
18998	NetworkID *string `json:"networkId,omitempty"`
18999	// SkipTestFailoverCleanup - A value indicating whether the test failover cleanup is to be skipped.
19000	SkipTestFailoverCleanup *string `json:"skipTestFailoverCleanup,omitempty"`
19001	// ProviderSpecificDetails - The provider specific properties.
19002	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
19003}
19004
19005// UnmarshalJSON is the custom unmarshaler for RecoveryPlanTestFailoverInputProperties struct.
19006func (rptfip *RecoveryPlanTestFailoverInputProperties) UnmarshalJSON(body []byte) error {
19007	var m map[string]*json.RawMessage
19008	err := json.Unmarshal(body, &m)
19009	if err != nil {
19010		return err
19011	}
19012	for k, v := range m {
19013		switch k {
19014		case "failoverDirection":
19015			if v != nil {
19016				var failoverDirection PossibleOperationsDirections
19017				err = json.Unmarshal(*v, &failoverDirection)
19018				if err != nil {
19019					return err
19020				}
19021				rptfip.FailoverDirection = failoverDirection
19022			}
19023		case "networkType":
19024			if v != nil {
19025				var networkType string
19026				err = json.Unmarshal(*v, &networkType)
19027				if err != nil {
19028					return err
19029				}
19030				rptfip.NetworkType = &networkType
19031			}
19032		case "networkId":
19033			if v != nil {
19034				var networkID string
19035				err = json.Unmarshal(*v, &networkID)
19036				if err != nil {
19037					return err
19038				}
19039				rptfip.NetworkID = &networkID
19040			}
19041		case "skipTestFailoverCleanup":
19042			if v != nil {
19043				var skipTestFailoverCleanup string
19044				err = json.Unmarshal(*v, &skipTestFailoverCleanup)
19045				if err != nil {
19046					return err
19047				}
19048				rptfip.SkipTestFailoverCleanup = &skipTestFailoverCleanup
19049			}
19050		case "providerSpecificDetails":
19051			if v != nil {
19052				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(*v)
19053				if err != nil {
19054					return err
19055				}
19056				rptfip.ProviderSpecificDetails = &providerSpecificDetails
19057			}
19058		}
19059	}
19060
19061	return nil
19062}
19063
19064// RecoveryPlanUnplannedFailoverInput recovery plan unplanned failover input.
19065type RecoveryPlanUnplannedFailoverInput struct {
19066	// Properties - The recovery plan unplanned failover input properties.
19067	Properties *RecoveryPlanUnplannedFailoverInputProperties `json:"properties,omitempty"`
19068}
19069
19070// RecoveryPlanUnplannedFailoverInputProperties recovery plan unplanned failover input properties.
19071type RecoveryPlanUnplannedFailoverInputProperties struct {
19072	// FailoverDirection - The failover direction. Possible values include: 'PrimaryToRecovery', 'RecoveryToPrimary'
19073	FailoverDirection PossibleOperationsDirections `json:"failoverDirection,omitempty"`
19074	// SourceSiteOperations - A value indicating whether source site operations are required. Possible values include: 'Required', 'NotRequired'
19075	SourceSiteOperations SourceSiteOperations `json:"sourceSiteOperations,omitempty"`
19076	// ProviderSpecificDetails - The provider specific properties.
19077	ProviderSpecificDetails *[]BasicRecoveryPlanProviderSpecificFailoverInput `json:"providerSpecificDetails,omitempty"`
19078}
19079
19080// UnmarshalJSON is the custom unmarshaler for RecoveryPlanUnplannedFailoverInputProperties struct.
19081func (rpufip *RecoveryPlanUnplannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
19082	var m map[string]*json.RawMessage
19083	err := json.Unmarshal(body, &m)
19084	if err != nil {
19085		return err
19086	}
19087	for k, v := range m {
19088		switch k {
19089		case "failoverDirection":
19090			if v != nil {
19091				var failoverDirection PossibleOperationsDirections
19092				err = json.Unmarshal(*v, &failoverDirection)
19093				if err != nil {
19094					return err
19095				}
19096				rpufip.FailoverDirection = failoverDirection
19097			}
19098		case "sourceSiteOperations":
19099			if v != nil {
19100				var sourceSiteOperations SourceSiteOperations
19101				err = json.Unmarshal(*v, &sourceSiteOperations)
19102				if err != nil {
19103					return err
19104				}
19105				rpufip.SourceSiteOperations = sourceSiteOperations
19106			}
19107		case "providerSpecificDetails":
19108			if v != nil {
19109				providerSpecificDetails, err := unmarshalBasicRecoveryPlanProviderSpecificFailoverInputArray(*v)
19110				if err != nil {
19111					return err
19112				}
19113				rpufip.ProviderSpecificDetails = &providerSpecificDetails
19114			}
19115		}
19116	}
19117
19118	return nil
19119}
19120
19121// RecoveryPoint base class representing a recovery point.
19122type RecoveryPoint struct {
19123	autorest.Response `json:"-"`
19124	// Properties - Recovery point related data.
19125	Properties *RecoveryPointProperties `json:"properties,omitempty"`
19126	// ID - READ-ONLY; Resource Id
19127	ID *string `json:"id,omitempty"`
19128	// Name - READ-ONLY; Resource Name
19129	Name *string `json:"name,omitempty"`
19130	// Type - READ-ONLY; Resource Type
19131	Type *string `json:"type,omitempty"`
19132	// Location - Resource Location
19133	Location *string `json:"location,omitempty"`
19134}
19135
19136// MarshalJSON is the custom marshaler for RecoveryPoint.
19137func (rp RecoveryPoint) MarshalJSON() ([]byte, error) {
19138	objectMap := make(map[string]interface{})
19139	if rp.Properties != nil {
19140		objectMap["properties"] = rp.Properties
19141	}
19142	if rp.Location != nil {
19143		objectMap["location"] = rp.Location
19144	}
19145	return json.Marshal(objectMap)
19146}
19147
19148// RecoveryPointCollection collection of recovery point details.
19149type RecoveryPointCollection struct {
19150	autorest.Response `json:"-"`
19151	// Value - The recovery point details.
19152	Value *[]RecoveryPoint `json:"value,omitempty"`
19153	// NextLink - The value of next link.
19154	NextLink *string `json:"nextLink,omitempty"`
19155}
19156
19157// RecoveryPointCollectionIterator provides access to a complete listing of RecoveryPoint values.
19158type RecoveryPointCollectionIterator struct {
19159	i    int
19160	page RecoveryPointCollectionPage
19161}
19162
19163// NextWithContext advances to the next value.  If there was an error making
19164// the request the iterator does not advance and the error is returned.
19165func (iter *RecoveryPointCollectionIterator) NextWithContext(ctx context.Context) (err error) {
19166	if tracing.IsEnabled() {
19167		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointCollectionIterator.NextWithContext")
19168		defer func() {
19169			sc := -1
19170			if iter.Response().Response.Response != nil {
19171				sc = iter.Response().Response.Response.StatusCode
19172			}
19173			tracing.EndSpan(ctx, sc, err)
19174		}()
19175	}
19176	iter.i++
19177	if iter.i < len(iter.page.Values()) {
19178		return nil
19179	}
19180	err = iter.page.NextWithContext(ctx)
19181	if err != nil {
19182		iter.i--
19183		return err
19184	}
19185	iter.i = 0
19186	return nil
19187}
19188
19189// Next advances to the next value.  If there was an error making
19190// the request the iterator does not advance and the error is returned.
19191// Deprecated: Use NextWithContext() instead.
19192func (iter *RecoveryPointCollectionIterator) Next() error {
19193	return iter.NextWithContext(context.Background())
19194}
19195
19196// NotDone returns true if the enumeration should be started or is not yet complete.
19197func (iter RecoveryPointCollectionIterator) NotDone() bool {
19198	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19199}
19200
19201// Response returns the raw server response from the last page request.
19202func (iter RecoveryPointCollectionIterator) Response() RecoveryPointCollection {
19203	return iter.page.Response()
19204}
19205
19206// Value returns the current value or a zero-initialized value if the
19207// iterator has advanced beyond the end of the collection.
19208func (iter RecoveryPointCollectionIterator) Value() RecoveryPoint {
19209	if !iter.page.NotDone() {
19210		return RecoveryPoint{}
19211	}
19212	return iter.page.Values()[iter.i]
19213}
19214
19215// Creates a new instance of the RecoveryPointCollectionIterator type.
19216func NewRecoveryPointCollectionIterator(page RecoveryPointCollectionPage) RecoveryPointCollectionIterator {
19217	return RecoveryPointCollectionIterator{page: page}
19218}
19219
19220// IsEmpty returns true if the ListResult contains no values.
19221func (RPCVar RecoveryPointCollection) IsEmpty() bool {
19222	return RPCVar.Value == nil || len(*RPCVar.Value) == 0
19223}
19224
19225// hasNextLink returns true if the NextLink is not empty.
19226func (RPCVar RecoveryPointCollection) hasNextLink() bool {
19227	return RPCVar.NextLink != nil && len(*RPCVar.NextLink) != 0
19228}
19229
19230// recoveryPointCollectionPreparer prepares a request to retrieve the next set of results.
19231// It returns nil if no more results exist.
19232func (RPCVar RecoveryPointCollection) recoveryPointCollectionPreparer(ctx context.Context) (*http.Request, error) {
19233	if !RPCVar.hasNextLink() {
19234		return nil, nil
19235	}
19236	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19237		autorest.AsJSON(),
19238		autorest.AsGet(),
19239		autorest.WithBaseURL(to.String(RPCVar.NextLink)))
19240}
19241
19242// RecoveryPointCollectionPage contains a page of RecoveryPoint values.
19243type RecoveryPointCollectionPage struct {
19244	fn     func(context.Context, RecoveryPointCollection) (RecoveryPointCollection, error)
19245	RPCVar RecoveryPointCollection
19246}
19247
19248// NextWithContext advances to the next page of values.  If there was an error making
19249// the request the page does not advance and the error is returned.
19250func (page *RecoveryPointCollectionPage) NextWithContext(ctx context.Context) (err error) {
19251	if tracing.IsEnabled() {
19252		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointCollectionPage.NextWithContext")
19253		defer func() {
19254			sc := -1
19255			if page.Response().Response.Response != nil {
19256				sc = page.Response().Response.Response.StatusCode
19257			}
19258			tracing.EndSpan(ctx, sc, err)
19259		}()
19260	}
19261	for {
19262		next, err := page.fn(ctx, page.RPCVar)
19263		if err != nil {
19264			return err
19265		}
19266		page.RPCVar = next
19267		if !next.hasNextLink() || !next.IsEmpty() {
19268			break
19269		}
19270	}
19271	return nil
19272}
19273
19274// Next advances to the next page of values.  If there was an error making
19275// the request the page does not advance and the error is returned.
19276// Deprecated: Use NextWithContext() instead.
19277func (page *RecoveryPointCollectionPage) Next() error {
19278	return page.NextWithContext(context.Background())
19279}
19280
19281// NotDone returns true if the page enumeration should be started or is not yet complete.
19282func (page RecoveryPointCollectionPage) NotDone() bool {
19283	return !page.RPCVar.IsEmpty()
19284}
19285
19286// Response returns the raw server response from the last page request.
19287func (page RecoveryPointCollectionPage) Response() RecoveryPointCollection {
19288	return page.RPCVar
19289}
19290
19291// Values returns the slice of values for the current page or nil if there are no values.
19292func (page RecoveryPointCollectionPage) Values() []RecoveryPoint {
19293	if page.RPCVar.IsEmpty() {
19294		return nil
19295	}
19296	return *page.RPCVar.Value
19297}
19298
19299// Creates a new instance of the RecoveryPointCollectionPage type.
19300func NewRecoveryPointCollectionPage(cur RecoveryPointCollection, getNextPage func(context.Context, RecoveryPointCollection) (RecoveryPointCollection, error)) RecoveryPointCollectionPage {
19301	return RecoveryPointCollectionPage{
19302		fn:     getNextPage,
19303		RPCVar: cur,
19304	}
19305}
19306
19307// RecoveryPointProperties recovery point properties.
19308type RecoveryPointProperties struct {
19309	// RecoveryPointTime - The recovery point time.
19310	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
19311	// RecoveryPointType - The recovery point type: ApplicationConsistent, CrashConsistent.
19312	RecoveryPointType *string `json:"recoveryPointType,omitempty"`
19313	// ProviderSpecificDetails - The provider specific details for the recovery point.
19314	ProviderSpecificDetails BasicProviderSpecificRecoveryPointDetails `json:"providerSpecificDetails,omitempty"`
19315}
19316
19317// UnmarshalJSON is the custom unmarshaler for RecoveryPointProperties struct.
19318func (rpp *RecoveryPointProperties) UnmarshalJSON(body []byte) error {
19319	var m map[string]*json.RawMessage
19320	err := json.Unmarshal(body, &m)
19321	if err != nil {
19322		return err
19323	}
19324	for k, v := range m {
19325		switch k {
19326		case "recoveryPointTime":
19327			if v != nil {
19328				var recoveryPointTime date.Time
19329				err = json.Unmarshal(*v, &recoveryPointTime)
19330				if err != nil {
19331					return err
19332				}
19333				rpp.RecoveryPointTime = &recoveryPointTime
19334			}
19335		case "recoveryPointType":
19336			if v != nil {
19337				var recoveryPointType string
19338				err = json.Unmarshal(*v, &recoveryPointType)
19339				if err != nil {
19340					return err
19341				}
19342				rpp.RecoveryPointType = &recoveryPointType
19343			}
19344		case "providerSpecificDetails":
19345			if v != nil {
19346				providerSpecificDetails, err := unmarshalBasicProviderSpecificRecoveryPointDetails(*v)
19347				if err != nil {
19348					return err
19349				}
19350				rpp.ProviderSpecificDetails = providerSpecificDetails
19351			}
19352		}
19353	}
19354
19355	return nil
19356}
19357
19358// BasicRecoveryProximityPlacementGroupCustomDetails recovery Proximity placement group custom input.
19359type BasicRecoveryProximityPlacementGroupCustomDetails interface {
19360	AsExistingRecoveryProximityPlacementGroup() (*ExistingRecoveryProximityPlacementGroup, bool)
19361	AsRecoveryProximityPlacementGroupCustomDetails() (*RecoveryProximityPlacementGroupCustomDetails, bool)
19362}
19363
19364// RecoveryProximityPlacementGroupCustomDetails recovery Proximity placement group custom input.
19365type RecoveryProximityPlacementGroupCustomDetails struct {
19366	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeRecoveryProximityPlacementGroupCustomDetails', 'ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting'
19367	ResourceType ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetails `json:"resourceType,omitempty"`
19368}
19369
19370func unmarshalBasicRecoveryProximityPlacementGroupCustomDetails(body []byte) (BasicRecoveryProximityPlacementGroupCustomDetails, error) {
19371	var m map[string]interface{}
19372	err := json.Unmarshal(body, &m)
19373	if err != nil {
19374		return nil, err
19375	}
19376
19377	switch m["resourceType"] {
19378	case string(ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeExisting):
19379		var erppg ExistingRecoveryProximityPlacementGroup
19380		err := json.Unmarshal(body, &erppg)
19381		return erppg, err
19382	default:
19383		var rppgcd RecoveryProximityPlacementGroupCustomDetails
19384		err := json.Unmarshal(body, &rppgcd)
19385		return rppgcd, err
19386	}
19387}
19388func unmarshalBasicRecoveryProximityPlacementGroupCustomDetailsArray(body []byte) ([]BasicRecoveryProximityPlacementGroupCustomDetails, error) {
19389	var rawMessages []*json.RawMessage
19390	err := json.Unmarshal(body, &rawMessages)
19391	if err != nil {
19392		return nil, err
19393	}
19394
19395	rppgcdArray := make([]BasicRecoveryProximityPlacementGroupCustomDetails, len(rawMessages))
19396
19397	for index, rawMessage := range rawMessages {
19398		rppgcd, err := unmarshalBasicRecoveryProximityPlacementGroupCustomDetails(*rawMessage)
19399		if err != nil {
19400			return nil, err
19401		}
19402		rppgcdArray[index] = rppgcd
19403	}
19404	return rppgcdArray, nil
19405}
19406
19407// MarshalJSON is the custom marshaler for RecoveryProximityPlacementGroupCustomDetails.
19408func (rppgcd RecoveryProximityPlacementGroupCustomDetails) MarshalJSON() ([]byte, error) {
19409	rppgcd.ResourceType = ResourceTypeBasicRecoveryProximityPlacementGroupCustomDetailsResourceTypeRecoveryProximityPlacementGroupCustomDetails
19410	objectMap := make(map[string]interface{})
19411	if rppgcd.ResourceType != "" {
19412		objectMap["resourceType"] = rppgcd.ResourceType
19413	}
19414	return json.Marshal(objectMap)
19415}
19416
19417// AsExistingRecoveryProximityPlacementGroup is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for RecoveryProximityPlacementGroupCustomDetails.
19418func (rppgcd RecoveryProximityPlacementGroupCustomDetails) AsExistingRecoveryProximityPlacementGroup() (*ExistingRecoveryProximityPlacementGroup, bool) {
19419	return nil, false
19420}
19421
19422// AsRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for RecoveryProximityPlacementGroupCustomDetails.
19423func (rppgcd RecoveryProximityPlacementGroupCustomDetails) AsRecoveryProximityPlacementGroupCustomDetails() (*RecoveryProximityPlacementGroupCustomDetails, bool) {
19424	return &rppgcd, true
19425}
19426
19427// AsBasicRecoveryProximityPlacementGroupCustomDetails is the BasicRecoveryProximityPlacementGroupCustomDetails implementation for RecoveryProximityPlacementGroupCustomDetails.
19428func (rppgcd RecoveryProximityPlacementGroupCustomDetails) AsBasicRecoveryProximityPlacementGroupCustomDetails() (BasicRecoveryProximityPlacementGroupCustomDetails, bool) {
19429	return &rppgcd, true
19430}
19431
19432// BasicRecoveryResourceGroupCustomDetails recovery Resource Group custom input.
19433type BasicRecoveryResourceGroupCustomDetails interface {
19434	AsExistingRecoveryRecoveryResourceGroup() (*ExistingRecoveryRecoveryResourceGroup, bool)
19435	AsRecoveryResourceGroupCustomDetails() (*RecoveryResourceGroupCustomDetails, bool)
19436}
19437
19438// RecoveryResourceGroupCustomDetails recovery Resource Group custom input.
19439type RecoveryResourceGroupCustomDetails struct {
19440	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeRecoveryResourceGroupCustomDetails', 'ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting'
19441	ResourceType ResourceTypeBasicRecoveryResourceGroupCustomDetails `json:"resourceType,omitempty"`
19442}
19443
19444func unmarshalBasicRecoveryResourceGroupCustomDetails(body []byte) (BasicRecoveryResourceGroupCustomDetails, error) {
19445	var m map[string]interface{}
19446	err := json.Unmarshal(body, &m)
19447	if err != nil {
19448		return nil, err
19449	}
19450
19451	switch m["resourceType"] {
19452	case string(ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeExisting):
19453		var errrg ExistingRecoveryRecoveryResourceGroup
19454		err := json.Unmarshal(body, &errrg)
19455		return errrg, err
19456	default:
19457		var rrgcd RecoveryResourceGroupCustomDetails
19458		err := json.Unmarshal(body, &rrgcd)
19459		return rrgcd, err
19460	}
19461}
19462func unmarshalBasicRecoveryResourceGroupCustomDetailsArray(body []byte) ([]BasicRecoveryResourceGroupCustomDetails, error) {
19463	var rawMessages []*json.RawMessage
19464	err := json.Unmarshal(body, &rawMessages)
19465	if err != nil {
19466		return nil, err
19467	}
19468
19469	rrgcdArray := make([]BasicRecoveryResourceGroupCustomDetails, len(rawMessages))
19470
19471	for index, rawMessage := range rawMessages {
19472		rrgcd, err := unmarshalBasicRecoveryResourceGroupCustomDetails(*rawMessage)
19473		if err != nil {
19474			return nil, err
19475		}
19476		rrgcdArray[index] = rrgcd
19477	}
19478	return rrgcdArray, nil
19479}
19480
19481// MarshalJSON is the custom marshaler for RecoveryResourceGroupCustomDetails.
19482func (rrgcd RecoveryResourceGroupCustomDetails) MarshalJSON() ([]byte, error) {
19483	rrgcd.ResourceType = ResourceTypeBasicRecoveryResourceGroupCustomDetailsResourceTypeRecoveryResourceGroupCustomDetails
19484	objectMap := make(map[string]interface{})
19485	if rrgcd.ResourceType != "" {
19486		objectMap["resourceType"] = rrgcd.ResourceType
19487	}
19488	return json.Marshal(objectMap)
19489}
19490
19491// AsExistingRecoveryRecoveryResourceGroup is the BasicRecoveryResourceGroupCustomDetails implementation for RecoveryResourceGroupCustomDetails.
19492func (rrgcd RecoveryResourceGroupCustomDetails) AsExistingRecoveryRecoveryResourceGroup() (*ExistingRecoveryRecoveryResourceGroup, bool) {
19493	return nil, false
19494}
19495
19496// AsRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for RecoveryResourceGroupCustomDetails.
19497func (rrgcd RecoveryResourceGroupCustomDetails) AsRecoveryResourceGroupCustomDetails() (*RecoveryResourceGroupCustomDetails, bool) {
19498	return &rrgcd, true
19499}
19500
19501// AsBasicRecoveryResourceGroupCustomDetails is the BasicRecoveryResourceGroupCustomDetails implementation for RecoveryResourceGroupCustomDetails.
19502func (rrgcd RecoveryResourceGroupCustomDetails) AsBasicRecoveryResourceGroupCustomDetails() (BasicRecoveryResourceGroupCustomDetails, bool) {
19503	return &rrgcd, true
19504}
19505
19506// RecoveryServicesProvider provider details.
19507type RecoveryServicesProvider struct {
19508	autorest.Response `json:"-"`
19509	// Properties - Provider properties.
19510	Properties *RecoveryServicesProviderProperties `json:"properties,omitempty"`
19511	// ID - READ-ONLY; Resource Id
19512	ID *string `json:"id,omitempty"`
19513	// Name - READ-ONLY; Resource Name
19514	Name *string `json:"name,omitempty"`
19515	// Type - READ-ONLY; Resource Type
19516	Type *string `json:"type,omitempty"`
19517	// Location - Resource Location
19518	Location *string `json:"location,omitempty"`
19519}
19520
19521// MarshalJSON is the custom marshaler for RecoveryServicesProvider.
19522func (rsp RecoveryServicesProvider) MarshalJSON() ([]byte, error) {
19523	objectMap := make(map[string]interface{})
19524	if rsp.Properties != nil {
19525		objectMap["properties"] = rsp.Properties
19526	}
19527	if rsp.Location != nil {
19528		objectMap["location"] = rsp.Location
19529	}
19530	return json.Marshal(objectMap)
19531}
19532
19533// RecoveryServicesProviderCollection collection of providers.
19534type RecoveryServicesProviderCollection struct {
19535	autorest.Response `json:"-"`
19536	// Value - The Servers details.
19537	Value *[]RecoveryServicesProvider `json:"value,omitempty"`
19538	// NextLink - The value of next link.
19539	NextLink *string `json:"nextLink,omitempty"`
19540}
19541
19542// RecoveryServicesProviderCollectionIterator provides access to a complete listing of
19543// RecoveryServicesProvider values.
19544type RecoveryServicesProviderCollectionIterator struct {
19545	i    int
19546	page RecoveryServicesProviderCollectionPage
19547}
19548
19549// NextWithContext advances to the next value.  If there was an error making
19550// the request the iterator does not advance and the error is returned.
19551func (iter *RecoveryServicesProviderCollectionIterator) NextWithContext(ctx context.Context) (err error) {
19552	if tracing.IsEnabled() {
19553		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryServicesProviderCollectionIterator.NextWithContext")
19554		defer func() {
19555			sc := -1
19556			if iter.Response().Response.Response != nil {
19557				sc = iter.Response().Response.Response.StatusCode
19558			}
19559			tracing.EndSpan(ctx, sc, err)
19560		}()
19561	}
19562	iter.i++
19563	if iter.i < len(iter.page.Values()) {
19564		return nil
19565	}
19566	err = iter.page.NextWithContext(ctx)
19567	if err != nil {
19568		iter.i--
19569		return err
19570	}
19571	iter.i = 0
19572	return nil
19573}
19574
19575// Next advances to the next value.  If there was an error making
19576// the request the iterator does not advance and the error is returned.
19577// Deprecated: Use NextWithContext() instead.
19578func (iter *RecoveryServicesProviderCollectionIterator) Next() error {
19579	return iter.NextWithContext(context.Background())
19580}
19581
19582// NotDone returns true if the enumeration should be started or is not yet complete.
19583func (iter RecoveryServicesProviderCollectionIterator) NotDone() bool {
19584	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19585}
19586
19587// Response returns the raw server response from the last page request.
19588func (iter RecoveryServicesProviderCollectionIterator) Response() RecoveryServicesProviderCollection {
19589	return iter.page.Response()
19590}
19591
19592// Value returns the current value or a zero-initialized value if the
19593// iterator has advanced beyond the end of the collection.
19594func (iter RecoveryServicesProviderCollectionIterator) Value() RecoveryServicesProvider {
19595	if !iter.page.NotDone() {
19596		return RecoveryServicesProvider{}
19597	}
19598	return iter.page.Values()[iter.i]
19599}
19600
19601// Creates a new instance of the RecoveryServicesProviderCollectionIterator type.
19602func NewRecoveryServicesProviderCollectionIterator(page RecoveryServicesProviderCollectionPage) RecoveryServicesProviderCollectionIterator {
19603	return RecoveryServicesProviderCollectionIterator{page: page}
19604}
19605
19606// IsEmpty returns true if the ListResult contains no values.
19607func (rspc RecoveryServicesProviderCollection) IsEmpty() bool {
19608	return rspc.Value == nil || len(*rspc.Value) == 0
19609}
19610
19611// hasNextLink returns true if the NextLink is not empty.
19612func (rspc RecoveryServicesProviderCollection) hasNextLink() bool {
19613	return rspc.NextLink != nil && len(*rspc.NextLink) != 0
19614}
19615
19616// recoveryServicesProviderCollectionPreparer prepares a request to retrieve the next set of results.
19617// It returns nil if no more results exist.
19618func (rspc RecoveryServicesProviderCollection) recoveryServicesProviderCollectionPreparer(ctx context.Context) (*http.Request, error) {
19619	if !rspc.hasNextLink() {
19620		return nil, nil
19621	}
19622	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19623		autorest.AsJSON(),
19624		autorest.AsGet(),
19625		autorest.WithBaseURL(to.String(rspc.NextLink)))
19626}
19627
19628// RecoveryServicesProviderCollectionPage contains a page of RecoveryServicesProvider values.
19629type RecoveryServicesProviderCollectionPage struct {
19630	fn   func(context.Context, RecoveryServicesProviderCollection) (RecoveryServicesProviderCollection, error)
19631	rspc RecoveryServicesProviderCollection
19632}
19633
19634// NextWithContext advances to the next page of values.  If there was an error making
19635// the request the page does not advance and the error is returned.
19636func (page *RecoveryServicesProviderCollectionPage) NextWithContext(ctx context.Context) (err error) {
19637	if tracing.IsEnabled() {
19638		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryServicesProviderCollectionPage.NextWithContext")
19639		defer func() {
19640			sc := -1
19641			if page.Response().Response.Response != nil {
19642				sc = page.Response().Response.Response.StatusCode
19643			}
19644			tracing.EndSpan(ctx, sc, err)
19645		}()
19646	}
19647	for {
19648		next, err := page.fn(ctx, page.rspc)
19649		if err != nil {
19650			return err
19651		}
19652		page.rspc = next
19653		if !next.hasNextLink() || !next.IsEmpty() {
19654			break
19655		}
19656	}
19657	return nil
19658}
19659
19660// Next advances to the next page of values.  If there was an error making
19661// the request the page does not advance and the error is returned.
19662// Deprecated: Use NextWithContext() instead.
19663func (page *RecoveryServicesProviderCollectionPage) Next() error {
19664	return page.NextWithContext(context.Background())
19665}
19666
19667// NotDone returns true if the page enumeration should be started or is not yet complete.
19668func (page RecoveryServicesProviderCollectionPage) NotDone() bool {
19669	return !page.rspc.IsEmpty()
19670}
19671
19672// Response returns the raw server response from the last page request.
19673func (page RecoveryServicesProviderCollectionPage) Response() RecoveryServicesProviderCollection {
19674	return page.rspc
19675}
19676
19677// Values returns the slice of values for the current page or nil if there are no values.
19678func (page RecoveryServicesProviderCollectionPage) Values() []RecoveryServicesProvider {
19679	if page.rspc.IsEmpty() {
19680		return nil
19681	}
19682	return *page.rspc.Value
19683}
19684
19685// Creates a new instance of the RecoveryServicesProviderCollectionPage type.
19686func NewRecoveryServicesProviderCollectionPage(cur RecoveryServicesProviderCollection, getNextPage func(context.Context, RecoveryServicesProviderCollection) (RecoveryServicesProviderCollection, error)) RecoveryServicesProviderCollectionPage {
19687	return RecoveryServicesProviderCollectionPage{
19688		fn:   getNextPage,
19689		rspc: cur,
19690	}
19691}
19692
19693// RecoveryServicesProviderProperties recovery services provider properties.
19694type RecoveryServicesProviderProperties struct {
19695	// FabricType - Type of the site.
19696	FabricType *string `json:"fabricType,omitempty"`
19697	// FriendlyName - Friendly name of the DRA.
19698	FriendlyName *string `json:"friendlyName,omitempty"`
19699	// ProviderVersion - The provider version.
19700	ProviderVersion *string `json:"providerVersion,omitempty"`
19701	// ServerVersion - The fabric provider.
19702	ServerVersion *string `json:"serverVersion,omitempty"`
19703	// ProviderVersionState - DRA version status.
19704	ProviderVersionState *string `json:"providerVersionState,omitempty"`
19705	// ProviderVersionExpiryDate - Expiry date of the version.
19706	ProviderVersionExpiryDate *date.Time `json:"providerVersionExpiryDate,omitempty"`
19707	// FabricFriendlyName - The fabric friendly name.
19708	FabricFriendlyName *string `json:"fabricFriendlyName,omitempty"`
19709	// LastHeartBeat - Time when last heartbeat was sent by the DRA.
19710	LastHeartBeat *date.Time `json:"lastHeartBeat,omitempty"`
19711	// ConnectionStatus - A value indicating whether DRA is responsive.
19712	ConnectionStatus *string `json:"connectionStatus,omitempty"`
19713	// ProtectedItemCount - Number of protected VMs currently managed by the DRA.
19714	ProtectedItemCount *int32 `json:"protectedItemCount,omitempty"`
19715	// AllowedScenarios - The scenarios allowed on this provider.
19716	AllowedScenarios *[]string `json:"allowedScenarios,omitempty"`
19717	// HealthErrorDetails - The recovery services provider health error details.
19718	HealthErrorDetails *[]HealthError `json:"healthErrorDetails,omitempty"`
19719	// DraIdentifier - The DRA Id.
19720	DraIdentifier *string `json:"draIdentifier,omitempty"`
19721	// AuthenticationIdentityDetails - The authentication identity details.
19722	AuthenticationIdentityDetails *IdentityProviderDetails `json:"authenticationIdentityDetails,omitempty"`
19723	// ResourceAccessIdentityDetails - The resource access identity details.
19724	ResourceAccessIdentityDetails *IdentityProviderDetails `json:"resourceAccessIdentityDetails,omitempty"`
19725	// ProviderVersionDetails - The provider version details.
19726	ProviderVersionDetails *VersionDetails `json:"providerVersionDetails,omitempty"`
19727}
19728
19729// BasicRecoveryVirtualNetworkCustomDetails recovery Virtual network custom input.
19730type BasicRecoveryVirtualNetworkCustomDetails interface {
19731	AsExistingRecoveryVirtualNetwork() (*ExistingRecoveryVirtualNetwork, bool)
19732	AsRecoveryVirtualNetworkCustomDetails() (*RecoveryVirtualNetworkCustomDetails, bool)
19733}
19734
19735// RecoveryVirtualNetworkCustomDetails recovery Virtual network custom input.
19736type RecoveryVirtualNetworkCustomDetails struct {
19737	// ResourceType - Possible values include: 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeRecoveryVirtualNetworkCustomDetails', 'ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting'
19738	ResourceType ResourceTypeBasicRecoveryVirtualNetworkCustomDetails `json:"resourceType,omitempty"`
19739}
19740
19741func unmarshalBasicRecoveryVirtualNetworkCustomDetails(body []byte) (BasicRecoveryVirtualNetworkCustomDetails, error) {
19742	var m map[string]interface{}
19743	err := json.Unmarshal(body, &m)
19744	if err != nil {
19745		return nil, err
19746	}
19747
19748	switch m["resourceType"] {
19749	case string(ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeExisting):
19750		var ervn ExistingRecoveryVirtualNetwork
19751		err := json.Unmarshal(body, &ervn)
19752		return ervn, err
19753	default:
19754		var rvncd RecoveryVirtualNetworkCustomDetails
19755		err := json.Unmarshal(body, &rvncd)
19756		return rvncd, err
19757	}
19758}
19759func unmarshalBasicRecoveryVirtualNetworkCustomDetailsArray(body []byte) ([]BasicRecoveryVirtualNetworkCustomDetails, error) {
19760	var rawMessages []*json.RawMessage
19761	err := json.Unmarshal(body, &rawMessages)
19762	if err != nil {
19763		return nil, err
19764	}
19765
19766	rvncdArray := make([]BasicRecoveryVirtualNetworkCustomDetails, len(rawMessages))
19767
19768	for index, rawMessage := range rawMessages {
19769		rvncd, err := unmarshalBasicRecoveryVirtualNetworkCustomDetails(*rawMessage)
19770		if err != nil {
19771			return nil, err
19772		}
19773		rvncdArray[index] = rvncd
19774	}
19775	return rvncdArray, nil
19776}
19777
19778// MarshalJSON is the custom marshaler for RecoveryVirtualNetworkCustomDetails.
19779func (rvncd RecoveryVirtualNetworkCustomDetails) MarshalJSON() ([]byte, error) {
19780	rvncd.ResourceType = ResourceTypeBasicRecoveryVirtualNetworkCustomDetailsResourceTypeRecoveryVirtualNetworkCustomDetails
19781	objectMap := make(map[string]interface{})
19782	if rvncd.ResourceType != "" {
19783		objectMap["resourceType"] = rvncd.ResourceType
19784	}
19785	return json.Marshal(objectMap)
19786}
19787
19788// AsExistingRecoveryVirtualNetwork is the BasicRecoveryVirtualNetworkCustomDetails implementation for RecoveryVirtualNetworkCustomDetails.
19789func (rvncd RecoveryVirtualNetworkCustomDetails) AsExistingRecoveryVirtualNetwork() (*ExistingRecoveryVirtualNetwork, bool) {
19790	return nil, false
19791}
19792
19793// AsRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for RecoveryVirtualNetworkCustomDetails.
19794func (rvncd RecoveryVirtualNetworkCustomDetails) AsRecoveryVirtualNetworkCustomDetails() (*RecoveryVirtualNetworkCustomDetails, bool) {
19795	return &rvncd, true
19796}
19797
19798// AsBasicRecoveryVirtualNetworkCustomDetails is the BasicRecoveryVirtualNetworkCustomDetails implementation for RecoveryVirtualNetworkCustomDetails.
19799func (rvncd RecoveryVirtualNetworkCustomDetails) AsBasicRecoveryVirtualNetworkCustomDetails() (BasicRecoveryVirtualNetworkCustomDetails, bool) {
19800	return &rvncd, true
19801}
19802
19803// RemoveDisksInput input for remove disk(s) operation.
19804type RemoveDisksInput struct {
19805	// Properties - Remove disk input properties.
19806	Properties *RemoveDisksInputProperties `json:"properties,omitempty"`
19807}
19808
19809// RemoveDisksInputProperties remove Disk input properties.
19810type RemoveDisksInputProperties struct {
19811	// 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.
19812	ProviderSpecificDetails BasicRemoveDisksProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
19813}
19814
19815// UnmarshalJSON is the custom unmarshaler for RemoveDisksInputProperties struct.
19816func (rdip *RemoveDisksInputProperties) UnmarshalJSON(body []byte) error {
19817	var m map[string]*json.RawMessage
19818	err := json.Unmarshal(body, &m)
19819	if err != nil {
19820		return err
19821	}
19822	for k, v := range m {
19823		switch k {
19824		case "providerSpecificDetails":
19825			if v != nil {
19826				providerSpecificDetails, err := unmarshalBasicRemoveDisksProviderSpecificInput(*v)
19827				if err != nil {
19828					return err
19829				}
19830				rdip.ProviderSpecificDetails = providerSpecificDetails
19831			}
19832		}
19833	}
19834
19835	return nil
19836}
19837
19838// BasicRemoveDisksProviderSpecificInput remove Disk provider specific input.
19839type BasicRemoveDisksProviderSpecificInput interface {
19840	AsA2ARemoveDisksInput() (*A2ARemoveDisksInput, bool)
19841	AsRemoveDisksProviderSpecificInput() (*RemoveDisksProviderSpecificInput, bool)
19842}
19843
19844// RemoveDisksProviderSpecificInput remove Disk provider specific input.
19845type RemoveDisksProviderSpecificInput struct {
19846	// InstanceType - Possible values include: 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeRemoveDisksProviderSpecificInput', 'InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A'
19847	InstanceType InstanceTypeBasicRemoveDisksProviderSpecificInput `json:"instanceType,omitempty"`
19848}
19849
19850func unmarshalBasicRemoveDisksProviderSpecificInput(body []byte) (BasicRemoveDisksProviderSpecificInput, error) {
19851	var m map[string]interface{}
19852	err := json.Unmarshal(body, &m)
19853	if err != nil {
19854		return nil, err
19855	}
19856
19857	switch m["instanceType"] {
19858	case string(InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeA2A):
19859		var ardi A2ARemoveDisksInput
19860		err := json.Unmarshal(body, &ardi)
19861		return ardi, err
19862	default:
19863		var rdpsi RemoveDisksProviderSpecificInput
19864		err := json.Unmarshal(body, &rdpsi)
19865		return rdpsi, err
19866	}
19867}
19868func unmarshalBasicRemoveDisksProviderSpecificInputArray(body []byte) ([]BasicRemoveDisksProviderSpecificInput, error) {
19869	var rawMessages []*json.RawMessage
19870	err := json.Unmarshal(body, &rawMessages)
19871	if err != nil {
19872		return nil, err
19873	}
19874
19875	rdpsiArray := make([]BasicRemoveDisksProviderSpecificInput, len(rawMessages))
19876
19877	for index, rawMessage := range rawMessages {
19878		rdpsi, err := unmarshalBasicRemoveDisksProviderSpecificInput(*rawMessage)
19879		if err != nil {
19880			return nil, err
19881		}
19882		rdpsiArray[index] = rdpsi
19883	}
19884	return rdpsiArray, nil
19885}
19886
19887// MarshalJSON is the custom marshaler for RemoveDisksProviderSpecificInput.
19888func (rdpsi RemoveDisksProviderSpecificInput) MarshalJSON() ([]byte, error) {
19889	rdpsi.InstanceType = InstanceTypeBasicRemoveDisksProviderSpecificInputInstanceTypeRemoveDisksProviderSpecificInput
19890	objectMap := make(map[string]interface{})
19891	if rdpsi.InstanceType != "" {
19892		objectMap["instanceType"] = rdpsi.InstanceType
19893	}
19894	return json.Marshal(objectMap)
19895}
19896
19897// AsA2ARemoveDisksInput is the BasicRemoveDisksProviderSpecificInput implementation for RemoveDisksProviderSpecificInput.
19898func (rdpsi RemoveDisksProviderSpecificInput) AsA2ARemoveDisksInput() (*A2ARemoveDisksInput, bool) {
19899	return nil, false
19900}
19901
19902// AsRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for RemoveDisksProviderSpecificInput.
19903func (rdpsi RemoveDisksProviderSpecificInput) AsRemoveDisksProviderSpecificInput() (*RemoveDisksProviderSpecificInput, bool) {
19904	return &rdpsi, true
19905}
19906
19907// AsBasicRemoveDisksProviderSpecificInput is the BasicRemoveDisksProviderSpecificInput implementation for RemoveDisksProviderSpecificInput.
19908func (rdpsi RemoveDisksProviderSpecificInput) AsBasicRemoveDisksProviderSpecificInput() (BasicRemoveDisksProviderSpecificInput, bool) {
19909	return &rdpsi, true
19910}
19911
19912// RemoveProtectionContainerMappingInput container unpairing input.
19913type RemoveProtectionContainerMappingInput struct {
19914	// Properties - Configure protection input properties.
19915	Properties *RemoveProtectionContainerMappingInputProperties `json:"properties,omitempty"`
19916}
19917
19918// RemoveProtectionContainerMappingInputProperties unpairing input properties.
19919type RemoveProtectionContainerMappingInputProperties struct {
19920	// ProviderSpecificInput - Provider specific input for unpairing.
19921	ProviderSpecificInput *ReplicationProviderContainerUnmappingInput `json:"providerSpecificInput,omitempty"`
19922}
19923
19924// RenewCertificateInput certificate renewal input.
19925type RenewCertificateInput struct {
19926	// Properties - Renew certificate input properties.
19927	Properties *RenewCertificateInputProperties `json:"properties,omitempty"`
19928}
19929
19930// RenewCertificateInputProperties renew Certificate input properties.
19931type RenewCertificateInputProperties struct {
19932	// RenewCertificateType - Renew certificate type.
19933	RenewCertificateType *string `json:"renewCertificateType,omitempty"`
19934}
19935
19936// ReplicationAgentDetails replication agent details.
19937type ReplicationAgentDetails struct {
19938	// ID - READ-ONLY; The replication agent Id.
19939	ID *string `json:"id,omitempty"`
19940	// Name - READ-ONLY; The replication agent name.
19941	Name *string `json:"name,omitempty"`
19942	// Version - READ-ONLY; The replication agent version.
19943	Version *string `json:"version,omitempty"`
19944	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the replication agent.
19945	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
19946	// Health - READ-ONLY; The health of the replication agent. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
19947	Health ProtectionHealth `json:"health,omitempty"`
19948	// HealthErrors - READ-ONLY; The health errors.
19949	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
19950}
19951
19952// ReplicationEligibilityResults replication eligibility results response model.
19953type ReplicationEligibilityResults struct {
19954	autorest.Response `json:"-"`
19955	// Name - READ-ONLY; Gets the name of this object.
19956	Name *string `json:"name,omitempty"`
19957	// Type - READ-ONLY; Gets the object type.
19958	Type *string `json:"type,omitempty"`
19959	// ID - READ-ONLY; Gets Unique ARM identifier for this object.
19960	ID *string `json:"id,omitempty"`
19961	// Properties - READ-ONLY; Gets properties model for replication eligibility results API.
19962	Properties *ReplicationEligibilityResultsProperties `json:"properties,omitempty"`
19963}
19964
19965// ReplicationEligibilityResultsCollection replication eligibility results collection response model.
19966type ReplicationEligibilityResultsCollection struct {
19967	autorest.Response `json:"-"`
19968	// Value - The replication eligibility results details.
19969	Value *[]ReplicationEligibilityResults `json:"value,omitempty"`
19970}
19971
19972// ReplicationEligibilityResultsErrorInfo error model that can be exposed to the user.
19973type ReplicationEligibilityResultsErrorInfo struct {
19974	// Code - READ-ONLY; The error code.
19975	Code *string `json:"code,omitempty"`
19976	// Message - READ-ONLY; The error message.
19977	Message *string `json:"message,omitempty"`
19978	// PossibleCauses - READ-ONLY; The possible causes.
19979	PossibleCauses *string `json:"possibleCauses,omitempty"`
19980	// RecommendedAction - READ-ONLY; The recommended action.
19981	RecommendedAction *string `json:"recommendedAction,omitempty"`
19982	// Status - READ-ONLY; The error status.
19983	Status *string `json:"status,omitempty"`
19984}
19985
19986// ReplicationEligibilityResultsProperties properties model for replication eligibility results API.
19987type ReplicationEligibilityResultsProperties struct {
19988	// ClientRequestID - READ-ONLY; The client request Id.
19989	ClientRequestID *string `json:"clientRequestId,omitempty"`
19990	// Errors - The error details.
19991	Errors *[]ReplicationEligibilityResultsErrorInfo `json:"errors,omitempty"`
19992}
19993
19994// MarshalJSON is the custom marshaler for ReplicationEligibilityResultsProperties.
19995func (rerp ReplicationEligibilityResultsProperties) MarshalJSON() ([]byte, error) {
19996	objectMap := make(map[string]interface{})
19997	if rerp.Errors != nil {
19998		objectMap["errors"] = rerp.Errors
19999	}
20000	return json.Marshal(objectMap)
20001}
20002
20003// ReplicationFabricsCheckConsistencyFuture an abstraction for monitoring and retrieving the results of a
20004// long-running operation.
20005type ReplicationFabricsCheckConsistencyFuture struct {
20006	azure.FutureAPI
20007	// Result returns the result of the asynchronous operation.
20008	// If the operation has not completed it will return an error.
20009	Result func(ReplicationFabricsClient) (Fabric, error)
20010}
20011
20012// ReplicationFabricsCreateFuture an abstraction for monitoring and retrieving the results of a
20013// long-running operation.
20014type ReplicationFabricsCreateFuture struct {
20015	azure.FutureAPI
20016	// Result returns the result of the asynchronous operation.
20017	// If the operation has not completed it will return an error.
20018	Result func(ReplicationFabricsClient) (Fabric, error)
20019}
20020
20021// ReplicationFabricsDeleteFuture an abstraction for monitoring and retrieving the results of a
20022// long-running operation.
20023type ReplicationFabricsDeleteFuture struct {
20024	azure.FutureAPI
20025	// Result returns the result of the asynchronous operation.
20026	// If the operation has not completed it will return an error.
20027	Result func(ReplicationFabricsClient) (autorest.Response, error)
20028}
20029
20030// ReplicationFabricsMigrateToAadFuture an abstraction for monitoring and retrieving the results of a
20031// long-running operation.
20032type ReplicationFabricsMigrateToAadFuture struct {
20033	azure.FutureAPI
20034	// Result returns the result of the asynchronous operation.
20035	// If the operation has not completed it will return an error.
20036	Result func(ReplicationFabricsClient) (autorest.Response, error)
20037}
20038
20039// ReplicationFabricsPurgeFuture an abstraction for monitoring and retrieving the results of a long-running
20040// operation.
20041type ReplicationFabricsPurgeFuture struct {
20042	azure.FutureAPI
20043	// Result returns the result of the asynchronous operation.
20044	// If the operation has not completed it will return an error.
20045	Result func(ReplicationFabricsClient) (autorest.Response, error)
20046}
20047
20048// ReplicationFabricsReassociateGatewayFuture an abstraction for monitoring and retrieving the results of a
20049// long-running operation.
20050type ReplicationFabricsReassociateGatewayFuture struct {
20051	azure.FutureAPI
20052	// Result returns the result of the asynchronous operation.
20053	// If the operation has not completed it will return an error.
20054	Result func(ReplicationFabricsClient) (Fabric, error)
20055}
20056
20057// ReplicationFabricsRenewCertificateFuture an abstraction for monitoring and retrieving the results of a
20058// long-running operation.
20059type ReplicationFabricsRenewCertificateFuture struct {
20060	azure.FutureAPI
20061	// Result returns the result of the asynchronous operation.
20062	// If the operation has not completed it will return an error.
20063	Result func(ReplicationFabricsClient) (Fabric, error)
20064}
20065
20066// ReplicationGroupDetails replication group details. This will be used in case of San and Wvr.
20067type ReplicationGroupDetails struct {
20068	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
20069	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
20070}
20071
20072// MarshalJSON is the custom marshaler for ReplicationGroupDetails.
20073func (rgd ReplicationGroupDetails) MarshalJSON() ([]byte, error) {
20074	rgd.InstanceType = InstanceTypeReplicationGroupDetails
20075	objectMap := make(map[string]interface{})
20076	if rgd.InstanceType != "" {
20077		objectMap["instanceType"] = rgd.InstanceType
20078	}
20079	return json.Marshal(objectMap)
20080}
20081
20082// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20083func (rgd ReplicationGroupDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
20084	return nil, false
20085}
20086
20087// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20088func (rgd ReplicationGroupDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
20089	return &rgd, true
20090}
20091
20092// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20093func (rgd ReplicationGroupDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
20094	return nil, false
20095}
20096
20097// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20098func (rgd ReplicationGroupDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
20099	return nil, false
20100}
20101
20102// AsConfigurationSettings is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20103func (rgd ReplicationGroupDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
20104	return nil, false
20105}
20106
20107// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for ReplicationGroupDetails.
20108func (rgd ReplicationGroupDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
20109	return &rgd, true
20110}
20111
20112// ReplicationJobsCancelFuture an abstraction for monitoring and retrieving the results of a long-running
20113// operation.
20114type ReplicationJobsCancelFuture struct {
20115	azure.FutureAPI
20116	// Result returns the result of the asynchronous operation.
20117	// If the operation has not completed it will return an error.
20118	Result func(ReplicationJobsClient) (Job, error)
20119}
20120
20121// ReplicationJobsExportFuture an abstraction for monitoring and retrieving the results of a long-running
20122// operation.
20123type ReplicationJobsExportFuture struct {
20124	azure.FutureAPI
20125	// Result returns the result of the asynchronous operation.
20126	// If the operation has not completed it will return an error.
20127	Result func(ReplicationJobsClient) (Job, error)
20128}
20129
20130// ReplicationJobsRestartFuture an abstraction for monitoring and retrieving the results of a long-running
20131// operation.
20132type ReplicationJobsRestartFuture struct {
20133	azure.FutureAPI
20134	// Result returns the result of the asynchronous operation.
20135	// If the operation has not completed it will return an error.
20136	Result func(ReplicationJobsClient) (Job, error)
20137}
20138
20139// ReplicationJobsResumeFuture an abstraction for monitoring and retrieving the results of a long-running
20140// operation.
20141type ReplicationJobsResumeFuture struct {
20142	azure.FutureAPI
20143	// Result returns the result of the asynchronous operation.
20144	// If the operation has not completed it will return an error.
20145	Result func(ReplicationJobsClient) (Job, error)
20146}
20147
20148// ReplicationMigrationItemsCreateFuture an abstraction for monitoring and retrieving the results of a
20149// long-running operation.
20150type ReplicationMigrationItemsCreateFuture struct {
20151	azure.FutureAPI
20152	// Result returns the result of the asynchronous operation.
20153	// If the operation has not completed it will return an error.
20154	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20155}
20156
20157// ReplicationMigrationItemsDeleteFuture an abstraction for monitoring and retrieving the results of a
20158// long-running operation.
20159type ReplicationMigrationItemsDeleteFuture struct {
20160	azure.FutureAPI
20161	// Result returns the result of the asynchronous operation.
20162	// If the operation has not completed it will return an error.
20163	Result func(ReplicationMigrationItemsClient) (autorest.Response, error)
20164}
20165
20166// ReplicationMigrationItemsMigrateFuture an abstraction for monitoring and retrieving the results of a
20167// long-running operation.
20168type ReplicationMigrationItemsMigrateFuture struct {
20169	azure.FutureAPI
20170	// Result returns the result of the asynchronous operation.
20171	// If the operation has not completed it will return an error.
20172	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20173}
20174
20175// ReplicationMigrationItemsTestMigrateCleanupFuture an abstraction for monitoring and retrieving the
20176// results of a long-running operation.
20177type ReplicationMigrationItemsTestMigrateCleanupFuture struct {
20178	azure.FutureAPI
20179	// Result returns the result of the asynchronous operation.
20180	// If the operation has not completed it will return an error.
20181	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20182}
20183
20184// ReplicationMigrationItemsTestMigrateFuture an abstraction for monitoring and retrieving the results of a
20185// long-running operation.
20186type ReplicationMigrationItemsTestMigrateFuture struct {
20187	azure.FutureAPI
20188	// Result returns the result of the asynchronous operation.
20189	// If the operation has not completed it will return an error.
20190	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20191}
20192
20193// ReplicationMigrationItemsUpdateFuture an abstraction for monitoring and retrieving the results of a
20194// long-running operation.
20195type ReplicationMigrationItemsUpdateFuture struct {
20196	azure.FutureAPI
20197	// Result returns the result of the asynchronous operation.
20198	// If the operation has not completed it will return an error.
20199	Result func(ReplicationMigrationItemsClient) (MigrationItem, error)
20200}
20201
20202// ReplicationNetworkMappingsCreateFuture an abstraction for monitoring and retrieving the results of a
20203// long-running operation.
20204type ReplicationNetworkMappingsCreateFuture struct {
20205	azure.FutureAPI
20206	// Result returns the result of the asynchronous operation.
20207	// If the operation has not completed it will return an error.
20208	Result func(ReplicationNetworkMappingsClient) (NetworkMapping, error)
20209}
20210
20211// ReplicationNetworkMappingsDeleteFuture an abstraction for monitoring and retrieving the results of a
20212// long-running operation.
20213type ReplicationNetworkMappingsDeleteFuture struct {
20214	azure.FutureAPI
20215	// Result returns the result of the asynchronous operation.
20216	// If the operation has not completed it will return an error.
20217	Result func(ReplicationNetworkMappingsClient) (autorest.Response, error)
20218}
20219
20220// ReplicationNetworkMappingsUpdateFuture an abstraction for monitoring and retrieving the results of a
20221// long-running operation.
20222type ReplicationNetworkMappingsUpdateFuture struct {
20223	azure.FutureAPI
20224	// Result returns the result of the asynchronous operation.
20225	// If the operation has not completed it will return an error.
20226	Result func(ReplicationNetworkMappingsClient) (NetworkMapping, error)
20227}
20228
20229// ReplicationPoliciesCreateFuture an abstraction for monitoring and retrieving the results of a
20230// long-running operation.
20231type ReplicationPoliciesCreateFuture struct {
20232	azure.FutureAPI
20233	// Result returns the result of the asynchronous operation.
20234	// If the operation has not completed it will return an error.
20235	Result func(ReplicationPoliciesClient) (Policy, error)
20236}
20237
20238// ReplicationPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
20239// long-running operation.
20240type ReplicationPoliciesDeleteFuture struct {
20241	azure.FutureAPI
20242	// Result returns the result of the asynchronous operation.
20243	// If the operation has not completed it will return an error.
20244	Result func(ReplicationPoliciesClient) (autorest.Response, error)
20245}
20246
20247// ReplicationPoliciesUpdateFuture an abstraction for monitoring and retrieving the results of a
20248// long-running operation.
20249type ReplicationPoliciesUpdateFuture struct {
20250	azure.FutureAPI
20251	// Result returns the result of the asynchronous operation.
20252	// If the operation has not completed it will return an error.
20253	Result func(ReplicationPoliciesClient) (Policy, error)
20254}
20255
20256// ReplicationProtectedItem replication protected item.
20257type ReplicationProtectedItem struct {
20258	autorest.Response `json:"-"`
20259	// Properties - The custom data.
20260	Properties *ReplicationProtectedItemProperties `json:"properties,omitempty"`
20261	// ID - READ-ONLY; Resource Id
20262	ID *string `json:"id,omitempty"`
20263	// Name - READ-ONLY; Resource Name
20264	Name *string `json:"name,omitempty"`
20265	// Type - READ-ONLY; Resource Type
20266	Type *string `json:"type,omitempty"`
20267	// Location - Resource Location
20268	Location *string `json:"location,omitempty"`
20269}
20270
20271// MarshalJSON is the custom marshaler for ReplicationProtectedItem.
20272func (rpi ReplicationProtectedItem) MarshalJSON() ([]byte, error) {
20273	objectMap := make(map[string]interface{})
20274	if rpi.Properties != nil {
20275		objectMap["properties"] = rpi.Properties
20276	}
20277	if rpi.Location != nil {
20278		objectMap["location"] = rpi.Location
20279	}
20280	return json.Marshal(objectMap)
20281}
20282
20283// ReplicationProtectedItemCollection replication protected item collection.
20284type ReplicationProtectedItemCollection struct {
20285	autorest.Response `json:"-"`
20286	// Value - The Replication protected item details.
20287	Value *[]ReplicationProtectedItem `json:"value,omitempty"`
20288	// NextLink - The value of next link.
20289	NextLink *string `json:"nextLink,omitempty"`
20290}
20291
20292// ReplicationProtectedItemCollectionIterator provides access to a complete listing of
20293// ReplicationProtectedItem values.
20294type ReplicationProtectedItemCollectionIterator struct {
20295	i    int
20296	page ReplicationProtectedItemCollectionPage
20297}
20298
20299// NextWithContext advances to the next value.  If there was an error making
20300// the request the iterator does not advance and the error is returned.
20301func (iter *ReplicationProtectedItemCollectionIterator) NextWithContext(ctx context.Context) (err error) {
20302	if tracing.IsEnabled() {
20303		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectedItemCollectionIterator.NextWithContext")
20304		defer func() {
20305			sc := -1
20306			if iter.Response().Response.Response != nil {
20307				sc = iter.Response().Response.Response.StatusCode
20308			}
20309			tracing.EndSpan(ctx, sc, err)
20310		}()
20311	}
20312	iter.i++
20313	if iter.i < len(iter.page.Values()) {
20314		return nil
20315	}
20316	err = iter.page.NextWithContext(ctx)
20317	if err != nil {
20318		iter.i--
20319		return err
20320	}
20321	iter.i = 0
20322	return nil
20323}
20324
20325// Next advances to the next value.  If there was an error making
20326// the request the iterator does not advance and the error is returned.
20327// Deprecated: Use NextWithContext() instead.
20328func (iter *ReplicationProtectedItemCollectionIterator) Next() error {
20329	return iter.NextWithContext(context.Background())
20330}
20331
20332// NotDone returns true if the enumeration should be started or is not yet complete.
20333func (iter ReplicationProtectedItemCollectionIterator) NotDone() bool {
20334	return iter.page.NotDone() && iter.i < len(iter.page.Values())
20335}
20336
20337// Response returns the raw server response from the last page request.
20338func (iter ReplicationProtectedItemCollectionIterator) Response() ReplicationProtectedItemCollection {
20339	return iter.page.Response()
20340}
20341
20342// Value returns the current value or a zero-initialized value if the
20343// iterator has advanced beyond the end of the collection.
20344func (iter ReplicationProtectedItemCollectionIterator) Value() ReplicationProtectedItem {
20345	if !iter.page.NotDone() {
20346		return ReplicationProtectedItem{}
20347	}
20348	return iter.page.Values()[iter.i]
20349}
20350
20351// Creates a new instance of the ReplicationProtectedItemCollectionIterator type.
20352func NewReplicationProtectedItemCollectionIterator(page ReplicationProtectedItemCollectionPage) ReplicationProtectedItemCollectionIterator {
20353	return ReplicationProtectedItemCollectionIterator{page: page}
20354}
20355
20356// IsEmpty returns true if the ListResult contains no values.
20357func (rpic ReplicationProtectedItemCollection) IsEmpty() bool {
20358	return rpic.Value == nil || len(*rpic.Value) == 0
20359}
20360
20361// hasNextLink returns true if the NextLink is not empty.
20362func (rpic ReplicationProtectedItemCollection) hasNextLink() bool {
20363	return rpic.NextLink != nil && len(*rpic.NextLink) != 0
20364}
20365
20366// replicationProtectedItemCollectionPreparer prepares a request to retrieve the next set of results.
20367// It returns nil if no more results exist.
20368func (rpic ReplicationProtectedItemCollection) replicationProtectedItemCollectionPreparer(ctx context.Context) (*http.Request, error) {
20369	if !rpic.hasNextLink() {
20370		return nil, nil
20371	}
20372	return autorest.Prepare((&http.Request{}).WithContext(ctx),
20373		autorest.AsJSON(),
20374		autorest.AsGet(),
20375		autorest.WithBaseURL(to.String(rpic.NextLink)))
20376}
20377
20378// ReplicationProtectedItemCollectionPage contains a page of ReplicationProtectedItem values.
20379type ReplicationProtectedItemCollectionPage struct {
20380	fn   func(context.Context, ReplicationProtectedItemCollection) (ReplicationProtectedItemCollection, error)
20381	rpic ReplicationProtectedItemCollection
20382}
20383
20384// NextWithContext advances to the next page of values.  If there was an error making
20385// the request the page does not advance and the error is returned.
20386func (page *ReplicationProtectedItemCollectionPage) NextWithContext(ctx context.Context) (err error) {
20387	if tracing.IsEnabled() {
20388		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectedItemCollectionPage.NextWithContext")
20389		defer func() {
20390			sc := -1
20391			if page.Response().Response.Response != nil {
20392				sc = page.Response().Response.Response.StatusCode
20393			}
20394			tracing.EndSpan(ctx, sc, err)
20395		}()
20396	}
20397	for {
20398		next, err := page.fn(ctx, page.rpic)
20399		if err != nil {
20400			return err
20401		}
20402		page.rpic = next
20403		if !next.hasNextLink() || !next.IsEmpty() {
20404			break
20405		}
20406	}
20407	return nil
20408}
20409
20410// Next advances to the next page of values.  If there was an error making
20411// the request the page does not advance and the error is returned.
20412// Deprecated: Use NextWithContext() instead.
20413func (page *ReplicationProtectedItemCollectionPage) Next() error {
20414	return page.NextWithContext(context.Background())
20415}
20416
20417// NotDone returns true if the page enumeration should be started or is not yet complete.
20418func (page ReplicationProtectedItemCollectionPage) NotDone() bool {
20419	return !page.rpic.IsEmpty()
20420}
20421
20422// Response returns the raw server response from the last page request.
20423func (page ReplicationProtectedItemCollectionPage) Response() ReplicationProtectedItemCollection {
20424	return page.rpic
20425}
20426
20427// Values returns the slice of values for the current page or nil if there are no values.
20428func (page ReplicationProtectedItemCollectionPage) Values() []ReplicationProtectedItem {
20429	if page.rpic.IsEmpty() {
20430		return nil
20431	}
20432	return *page.rpic.Value
20433}
20434
20435// Creates a new instance of the ReplicationProtectedItemCollectionPage type.
20436func NewReplicationProtectedItemCollectionPage(cur ReplicationProtectedItemCollection, getNextPage func(context.Context, ReplicationProtectedItemCollection) (ReplicationProtectedItemCollection, error)) ReplicationProtectedItemCollectionPage {
20437	return ReplicationProtectedItemCollectionPage{
20438		fn:   getNextPage,
20439		rpic: cur,
20440	}
20441}
20442
20443// ReplicationProtectedItemProperties replication protected item custom data details.
20444type ReplicationProtectedItemProperties struct {
20445	// FriendlyName - The name.
20446	FriendlyName *string `json:"friendlyName,omitempty"`
20447	// ProtectedItemType - The type of protected item type.
20448	ProtectedItemType *string `json:"protectedItemType,omitempty"`
20449	// ProtectableItemID - The protected item ARM Id.
20450	ProtectableItemID *string `json:"protectableItemId,omitempty"`
20451	// RecoveryServicesProviderID - The recovery provider ARM Id.
20452	RecoveryServicesProviderID *string `json:"recoveryServicesProviderId,omitempty"`
20453	// PrimaryFabricFriendlyName - The friendly name of the primary fabric.
20454	PrimaryFabricFriendlyName *string `json:"primaryFabricFriendlyName,omitempty"`
20455	// PrimaryFabricProvider - The fabric provider of the primary fabric.
20456	PrimaryFabricProvider *string `json:"primaryFabricProvider,omitempty"`
20457	// RecoveryFabricFriendlyName - The friendly name of recovery fabric.
20458	RecoveryFabricFriendlyName *string `json:"recoveryFabricFriendlyName,omitempty"`
20459	// RecoveryFabricID - The Arm Id of recovery fabric.
20460	RecoveryFabricID *string `json:"recoveryFabricId,omitempty"`
20461	// PrimaryProtectionContainerFriendlyName - The name of primary protection container friendly name.
20462	PrimaryProtectionContainerFriendlyName *string `json:"primaryProtectionContainerFriendlyName,omitempty"`
20463	// RecoveryProtectionContainerFriendlyName - The name of recovery container friendly name.
20464	RecoveryProtectionContainerFriendlyName *string `json:"recoveryProtectionContainerFriendlyName,omitempty"`
20465	// ProtectionState - The protection status.
20466	ProtectionState *string `json:"protectionState,omitempty"`
20467	// ProtectionStateDescription - The protection state description.
20468	ProtectionStateDescription *string `json:"protectionStateDescription,omitempty"`
20469	// ActiveLocation - The Current active location of the PE.
20470	ActiveLocation *string `json:"activeLocation,omitempty"`
20471	// TestFailoverState - The Test failover state.
20472	TestFailoverState *string `json:"testFailoverState,omitempty"`
20473	// TestFailoverStateDescription - The Test failover state description.
20474	TestFailoverStateDescription *string `json:"testFailoverStateDescription,omitempty"`
20475	// AllowedOperations - The allowed operations on the Replication protected item.
20476	AllowedOperations *[]string `json:"allowedOperations,omitempty"`
20477	// 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.
20478	ReplicationHealth *string `json:"replicationHealth,omitempty"`
20479	// FailoverHealth - The consolidated failover health for the VM.
20480	FailoverHealth *string `json:"failoverHealth,omitempty"`
20481	// HealthErrors - List of health errors.
20482	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
20483	// PolicyID - The ID of Policy governing this PE.
20484	PolicyID *string `json:"policyId,omitempty"`
20485	// PolicyFriendlyName - The name of Policy governing this PE.
20486	PolicyFriendlyName *string `json:"policyFriendlyName,omitempty"`
20487	// LastSuccessfulFailoverTime - The Last successful failover time.
20488	LastSuccessfulFailoverTime *date.Time `json:"lastSuccessfulFailoverTime,omitempty"`
20489	// LastSuccessfulTestFailoverTime - The Last successful test failover time.
20490	LastSuccessfulTestFailoverTime *date.Time `json:"lastSuccessfulTestFailoverTime,omitempty"`
20491	// CurrentScenario - The current scenario.
20492	CurrentScenario *CurrentScenarioDetails `json:"currentScenario,omitempty"`
20493	// FailoverRecoveryPointID - The recovery point ARM Id to which the Vm was failed over.
20494	FailoverRecoveryPointID *string `json:"failoverRecoveryPointId,omitempty"`
20495	// ProviderSpecificDetails - The Replication provider custom settings.
20496	ProviderSpecificDetails BasicReplicationProviderSpecificSettings `json:"providerSpecificDetails,omitempty"`
20497	// RecoveryContainerID - The recovery container Id.
20498	RecoveryContainerID *string `json:"recoveryContainerId,omitempty"`
20499}
20500
20501// UnmarshalJSON is the custom unmarshaler for ReplicationProtectedItemProperties struct.
20502func (rpip *ReplicationProtectedItemProperties) UnmarshalJSON(body []byte) error {
20503	var m map[string]*json.RawMessage
20504	err := json.Unmarshal(body, &m)
20505	if err != nil {
20506		return err
20507	}
20508	for k, v := range m {
20509		switch k {
20510		case "friendlyName":
20511			if v != nil {
20512				var friendlyName string
20513				err = json.Unmarshal(*v, &friendlyName)
20514				if err != nil {
20515					return err
20516				}
20517				rpip.FriendlyName = &friendlyName
20518			}
20519		case "protectedItemType":
20520			if v != nil {
20521				var protectedItemType string
20522				err = json.Unmarshal(*v, &protectedItemType)
20523				if err != nil {
20524					return err
20525				}
20526				rpip.ProtectedItemType = &protectedItemType
20527			}
20528		case "protectableItemId":
20529			if v != nil {
20530				var protectableItemID string
20531				err = json.Unmarshal(*v, &protectableItemID)
20532				if err != nil {
20533					return err
20534				}
20535				rpip.ProtectableItemID = &protectableItemID
20536			}
20537		case "recoveryServicesProviderId":
20538			if v != nil {
20539				var recoveryServicesProviderID string
20540				err = json.Unmarshal(*v, &recoveryServicesProviderID)
20541				if err != nil {
20542					return err
20543				}
20544				rpip.RecoveryServicesProviderID = &recoveryServicesProviderID
20545			}
20546		case "primaryFabricFriendlyName":
20547			if v != nil {
20548				var primaryFabricFriendlyName string
20549				err = json.Unmarshal(*v, &primaryFabricFriendlyName)
20550				if err != nil {
20551					return err
20552				}
20553				rpip.PrimaryFabricFriendlyName = &primaryFabricFriendlyName
20554			}
20555		case "primaryFabricProvider":
20556			if v != nil {
20557				var primaryFabricProvider string
20558				err = json.Unmarshal(*v, &primaryFabricProvider)
20559				if err != nil {
20560					return err
20561				}
20562				rpip.PrimaryFabricProvider = &primaryFabricProvider
20563			}
20564		case "recoveryFabricFriendlyName":
20565			if v != nil {
20566				var recoveryFabricFriendlyName string
20567				err = json.Unmarshal(*v, &recoveryFabricFriendlyName)
20568				if err != nil {
20569					return err
20570				}
20571				rpip.RecoveryFabricFriendlyName = &recoveryFabricFriendlyName
20572			}
20573		case "recoveryFabricId":
20574			if v != nil {
20575				var recoveryFabricID string
20576				err = json.Unmarshal(*v, &recoveryFabricID)
20577				if err != nil {
20578					return err
20579				}
20580				rpip.RecoveryFabricID = &recoveryFabricID
20581			}
20582		case "primaryProtectionContainerFriendlyName":
20583			if v != nil {
20584				var primaryProtectionContainerFriendlyName string
20585				err = json.Unmarshal(*v, &primaryProtectionContainerFriendlyName)
20586				if err != nil {
20587					return err
20588				}
20589				rpip.PrimaryProtectionContainerFriendlyName = &primaryProtectionContainerFriendlyName
20590			}
20591		case "recoveryProtectionContainerFriendlyName":
20592			if v != nil {
20593				var recoveryProtectionContainerFriendlyName string
20594				err = json.Unmarshal(*v, &recoveryProtectionContainerFriendlyName)
20595				if err != nil {
20596					return err
20597				}
20598				rpip.RecoveryProtectionContainerFriendlyName = &recoveryProtectionContainerFriendlyName
20599			}
20600		case "protectionState":
20601			if v != nil {
20602				var protectionState string
20603				err = json.Unmarshal(*v, &protectionState)
20604				if err != nil {
20605					return err
20606				}
20607				rpip.ProtectionState = &protectionState
20608			}
20609		case "protectionStateDescription":
20610			if v != nil {
20611				var protectionStateDescription string
20612				err = json.Unmarshal(*v, &protectionStateDescription)
20613				if err != nil {
20614					return err
20615				}
20616				rpip.ProtectionStateDescription = &protectionStateDescription
20617			}
20618		case "activeLocation":
20619			if v != nil {
20620				var activeLocation string
20621				err = json.Unmarshal(*v, &activeLocation)
20622				if err != nil {
20623					return err
20624				}
20625				rpip.ActiveLocation = &activeLocation
20626			}
20627		case "testFailoverState":
20628			if v != nil {
20629				var testFailoverState string
20630				err = json.Unmarshal(*v, &testFailoverState)
20631				if err != nil {
20632					return err
20633				}
20634				rpip.TestFailoverState = &testFailoverState
20635			}
20636		case "testFailoverStateDescription":
20637			if v != nil {
20638				var testFailoverStateDescription string
20639				err = json.Unmarshal(*v, &testFailoverStateDescription)
20640				if err != nil {
20641					return err
20642				}
20643				rpip.TestFailoverStateDescription = &testFailoverStateDescription
20644			}
20645		case "allowedOperations":
20646			if v != nil {
20647				var allowedOperations []string
20648				err = json.Unmarshal(*v, &allowedOperations)
20649				if err != nil {
20650					return err
20651				}
20652				rpip.AllowedOperations = &allowedOperations
20653			}
20654		case "replicationHealth":
20655			if v != nil {
20656				var replicationHealth string
20657				err = json.Unmarshal(*v, &replicationHealth)
20658				if err != nil {
20659					return err
20660				}
20661				rpip.ReplicationHealth = &replicationHealth
20662			}
20663		case "failoverHealth":
20664			if v != nil {
20665				var failoverHealth string
20666				err = json.Unmarshal(*v, &failoverHealth)
20667				if err != nil {
20668					return err
20669				}
20670				rpip.FailoverHealth = &failoverHealth
20671			}
20672		case "healthErrors":
20673			if v != nil {
20674				var healthErrors []HealthError
20675				err = json.Unmarshal(*v, &healthErrors)
20676				if err != nil {
20677					return err
20678				}
20679				rpip.HealthErrors = &healthErrors
20680			}
20681		case "policyId":
20682			if v != nil {
20683				var policyID string
20684				err = json.Unmarshal(*v, &policyID)
20685				if err != nil {
20686					return err
20687				}
20688				rpip.PolicyID = &policyID
20689			}
20690		case "policyFriendlyName":
20691			if v != nil {
20692				var policyFriendlyName string
20693				err = json.Unmarshal(*v, &policyFriendlyName)
20694				if err != nil {
20695					return err
20696				}
20697				rpip.PolicyFriendlyName = &policyFriendlyName
20698			}
20699		case "lastSuccessfulFailoverTime":
20700			if v != nil {
20701				var lastSuccessfulFailoverTime date.Time
20702				err = json.Unmarshal(*v, &lastSuccessfulFailoverTime)
20703				if err != nil {
20704					return err
20705				}
20706				rpip.LastSuccessfulFailoverTime = &lastSuccessfulFailoverTime
20707			}
20708		case "lastSuccessfulTestFailoverTime":
20709			if v != nil {
20710				var lastSuccessfulTestFailoverTime date.Time
20711				err = json.Unmarshal(*v, &lastSuccessfulTestFailoverTime)
20712				if err != nil {
20713					return err
20714				}
20715				rpip.LastSuccessfulTestFailoverTime = &lastSuccessfulTestFailoverTime
20716			}
20717		case "currentScenario":
20718			if v != nil {
20719				var currentScenario CurrentScenarioDetails
20720				err = json.Unmarshal(*v, &currentScenario)
20721				if err != nil {
20722					return err
20723				}
20724				rpip.CurrentScenario = &currentScenario
20725			}
20726		case "failoverRecoveryPointId":
20727			if v != nil {
20728				var failoverRecoveryPointID string
20729				err = json.Unmarshal(*v, &failoverRecoveryPointID)
20730				if err != nil {
20731					return err
20732				}
20733				rpip.FailoverRecoveryPointID = &failoverRecoveryPointID
20734			}
20735		case "providerSpecificDetails":
20736			if v != nil {
20737				providerSpecificDetails, err := unmarshalBasicReplicationProviderSpecificSettings(*v)
20738				if err != nil {
20739					return err
20740				}
20741				rpip.ProviderSpecificDetails = providerSpecificDetails
20742			}
20743		case "recoveryContainerId":
20744			if v != nil {
20745				var recoveryContainerID string
20746				err = json.Unmarshal(*v, &recoveryContainerID)
20747				if err != nil {
20748					return err
20749				}
20750				rpip.RecoveryContainerID = &recoveryContainerID
20751			}
20752		}
20753	}
20754
20755	return nil
20756}
20757
20758// ReplicationProtectedItemsAddDisksFuture an abstraction for monitoring and retrieving the results of a
20759// long-running operation.
20760type ReplicationProtectedItemsAddDisksFuture struct {
20761	azure.FutureAPI
20762	// Result returns the result of the asynchronous operation.
20763	// If the operation has not completed it will return an error.
20764	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20765}
20766
20767// ReplicationProtectedItemsApplyRecoveryPointFuture an abstraction for monitoring and retrieving the
20768// results of a long-running operation.
20769type ReplicationProtectedItemsApplyRecoveryPointFuture struct {
20770	azure.FutureAPI
20771	// Result returns the result of the asynchronous operation.
20772	// If the operation has not completed it will return an error.
20773	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20774}
20775
20776// ReplicationProtectedItemsCreateFuture an abstraction for monitoring and retrieving the results of a
20777// long-running operation.
20778type ReplicationProtectedItemsCreateFuture struct {
20779	azure.FutureAPI
20780	// Result returns the result of the asynchronous operation.
20781	// If the operation has not completed it will return an error.
20782	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20783}
20784
20785// ReplicationProtectedItemsDeleteFuture an abstraction for monitoring and retrieving the results of a
20786// long-running operation.
20787type ReplicationProtectedItemsDeleteFuture struct {
20788	azure.FutureAPI
20789	// Result returns the result of the asynchronous operation.
20790	// If the operation has not completed it will return an error.
20791	Result func(ReplicationProtectedItemsClient) (autorest.Response, error)
20792}
20793
20794// ReplicationProtectedItemsFailoverCommitFuture an abstraction for monitoring and retrieving the results
20795// of a long-running operation.
20796type ReplicationProtectedItemsFailoverCommitFuture struct {
20797	azure.FutureAPI
20798	// Result returns the result of the asynchronous operation.
20799	// If the operation has not completed it will return an error.
20800	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20801}
20802
20803// ReplicationProtectedItemsPlannedFailoverFuture an abstraction for monitoring and retrieving the results
20804// of a long-running operation.
20805type ReplicationProtectedItemsPlannedFailoverFuture struct {
20806	azure.FutureAPI
20807	// Result returns the result of the asynchronous operation.
20808	// If the operation has not completed it will return an error.
20809	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20810}
20811
20812// ReplicationProtectedItemsPurgeFuture an abstraction for monitoring and retrieving the results of a
20813// long-running operation.
20814type ReplicationProtectedItemsPurgeFuture struct {
20815	azure.FutureAPI
20816	// Result returns the result of the asynchronous operation.
20817	// If the operation has not completed it will return an error.
20818	Result func(ReplicationProtectedItemsClient) (autorest.Response, error)
20819}
20820
20821// ReplicationProtectedItemsRemoveDisksFuture an abstraction for monitoring and retrieving the results of a
20822// long-running operation.
20823type ReplicationProtectedItemsRemoveDisksFuture struct {
20824	azure.FutureAPI
20825	// Result returns the result of the asynchronous operation.
20826	// If the operation has not completed it will return an error.
20827	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20828}
20829
20830// ReplicationProtectedItemsRepairReplicationFuture an abstraction for monitoring and retrieving the
20831// results of a long-running operation.
20832type ReplicationProtectedItemsRepairReplicationFuture struct {
20833	azure.FutureAPI
20834	// Result returns the result of the asynchronous operation.
20835	// If the operation has not completed it will return an error.
20836	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20837}
20838
20839// ReplicationProtectedItemsReprotectFuture an abstraction for monitoring and retrieving the results of a
20840// long-running operation.
20841type ReplicationProtectedItemsReprotectFuture struct {
20842	azure.FutureAPI
20843	// Result returns the result of the asynchronous operation.
20844	// If the operation has not completed it will return an error.
20845	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20846}
20847
20848// ReplicationProtectedItemsResolveHealthErrorsFuture an abstraction for monitoring and retrieving the
20849// results of a long-running operation.
20850type ReplicationProtectedItemsResolveHealthErrorsFuture struct {
20851	azure.FutureAPI
20852	// Result returns the result of the asynchronous operation.
20853	// If the operation has not completed it will return an error.
20854	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20855}
20856
20857// ReplicationProtectedItemsTestFailoverCleanupFuture an abstraction for monitoring and retrieving the
20858// results of a long-running operation.
20859type ReplicationProtectedItemsTestFailoverCleanupFuture struct {
20860	azure.FutureAPI
20861	// Result returns the result of the asynchronous operation.
20862	// If the operation has not completed it will return an error.
20863	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20864}
20865
20866// ReplicationProtectedItemsTestFailoverFuture an abstraction for monitoring and retrieving the results of
20867// a long-running operation.
20868type ReplicationProtectedItemsTestFailoverFuture struct {
20869	azure.FutureAPI
20870	// Result returns the result of the asynchronous operation.
20871	// If the operation has not completed it will return an error.
20872	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20873}
20874
20875// ReplicationProtectedItemsUnplannedFailoverFuture an abstraction for monitoring and retrieving the
20876// results of a long-running operation.
20877type ReplicationProtectedItemsUnplannedFailoverFuture struct {
20878	azure.FutureAPI
20879	// Result returns the result of the asynchronous operation.
20880	// If the operation has not completed it will return an error.
20881	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20882}
20883
20884// ReplicationProtectedItemsUpdateFuture an abstraction for monitoring and retrieving the results of a
20885// long-running operation.
20886type ReplicationProtectedItemsUpdateFuture struct {
20887	azure.FutureAPI
20888	// Result returns the result of the asynchronous operation.
20889	// If the operation has not completed it will return an error.
20890	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20891}
20892
20893// ReplicationProtectedItemsUpdateMobilityServiceFuture an abstraction for monitoring and retrieving the
20894// results of a long-running operation.
20895type ReplicationProtectedItemsUpdateMobilityServiceFuture struct {
20896	azure.FutureAPI
20897	// Result returns the result of the asynchronous operation.
20898	// If the operation has not completed it will return an error.
20899	Result func(ReplicationProtectedItemsClient) (ReplicationProtectedItem, error)
20900}
20901
20902// ReplicationProtectionContainerMappingsCreateFuture an abstraction for monitoring and retrieving the
20903// results of a long-running operation.
20904type ReplicationProtectionContainerMappingsCreateFuture struct {
20905	azure.FutureAPI
20906	// Result returns the result of the asynchronous operation.
20907	// If the operation has not completed it will return an error.
20908	Result func(ReplicationProtectionContainerMappingsClient) (ProtectionContainerMapping, error)
20909}
20910
20911// ReplicationProtectionContainerMappingsDeleteFuture an abstraction for monitoring and retrieving the
20912// results of a long-running operation.
20913type ReplicationProtectionContainerMappingsDeleteFuture struct {
20914	azure.FutureAPI
20915	// Result returns the result of the asynchronous operation.
20916	// If the operation has not completed it will return an error.
20917	Result func(ReplicationProtectionContainerMappingsClient) (autorest.Response, error)
20918}
20919
20920// ReplicationProtectionContainerMappingsPurgeFuture an abstraction for monitoring and retrieving the
20921// results of a long-running operation.
20922type ReplicationProtectionContainerMappingsPurgeFuture struct {
20923	azure.FutureAPI
20924	// Result returns the result of the asynchronous operation.
20925	// If the operation has not completed it will return an error.
20926	Result func(ReplicationProtectionContainerMappingsClient) (autorest.Response, error)
20927}
20928
20929// ReplicationProtectionContainerMappingsUpdateFuture an abstraction for monitoring and retrieving the
20930// results of a long-running operation.
20931type ReplicationProtectionContainerMappingsUpdateFuture struct {
20932	azure.FutureAPI
20933	// Result returns the result of the asynchronous operation.
20934	// If the operation has not completed it will return an error.
20935	Result func(ReplicationProtectionContainerMappingsClient) (ProtectionContainerMapping, error)
20936}
20937
20938// ReplicationProtectionContainersCreateFuture an abstraction for monitoring and retrieving the results of
20939// a long-running operation.
20940type ReplicationProtectionContainersCreateFuture struct {
20941	azure.FutureAPI
20942	// Result returns the result of the asynchronous operation.
20943	// If the operation has not completed it will return an error.
20944	Result func(ReplicationProtectionContainersClient) (ProtectionContainer, error)
20945}
20946
20947// ReplicationProtectionContainersDeleteFuture an abstraction for monitoring and retrieving the results of
20948// a long-running operation.
20949type ReplicationProtectionContainersDeleteFuture struct {
20950	azure.FutureAPI
20951	// Result returns the result of the asynchronous operation.
20952	// If the operation has not completed it will return an error.
20953	Result func(ReplicationProtectionContainersClient) (autorest.Response, error)
20954}
20955
20956// ReplicationProtectionContainersDiscoverProtectableItemFuture an abstraction for monitoring and
20957// retrieving the results of a long-running operation.
20958type ReplicationProtectionContainersDiscoverProtectableItemFuture struct {
20959	azure.FutureAPI
20960	// Result returns the result of the asynchronous operation.
20961	// If the operation has not completed it will return an error.
20962	Result func(ReplicationProtectionContainersClient) (ProtectionContainer, error)
20963}
20964
20965// ReplicationProtectionContainersSwitchProtectionFuture an abstraction for monitoring and retrieving the
20966// results of a long-running operation.
20967type ReplicationProtectionContainersSwitchProtectionFuture struct {
20968	azure.FutureAPI
20969	// Result returns the result of the asynchronous operation.
20970	// If the operation has not completed it will return an error.
20971	Result func(ReplicationProtectionContainersClient) (ProtectionContainer, error)
20972}
20973
20974// ReplicationProtectionIntent replication protection intent.
20975type ReplicationProtectionIntent struct {
20976	autorest.Response `json:"-"`
20977	// Properties - The custom data.
20978	Properties *ReplicationProtectionIntentProperties `json:"properties,omitempty"`
20979	// ID - READ-ONLY; Resource Id
20980	ID *string `json:"id,omitempty"`
20981	// Name - READ-ONLY; Resource Name
20982	Name *string `json:"name,omitempty"`
20983	// Type - READ-ONLY; Resource Type
20984	Type *string `json:"type,omitempty"`
20985	// Location - Resource Location
20986	Location *string `json:"location,omitempty"`
20987}
20988
20989// MarshalJSON is the custom marshaler for ReplicationProtectionIntent.
20990func (rpi ReplicationProtectionIntent) MarshalJSON() ([]byte, error) {
20991	objectMap := make(map[string]interface{})
20992	if rpi.Properties != nil {
20993		objectMap["properties"] = rpi.Properties
20994	}
20995	if rpi.Location != nil {
20996		objectMap["location"] = rpi.Location
20997	}
20998	return json.Marshal(objectMap)
20999}
21000
21001// ReplicationProtectionIntentCollection replication protection intent objects collection.
21002type ReplicationProtectionIntentCollection struct {
21003	autorest.Response `json:"-"`
21004	// Value - The Replication protection intent details.
21005	Value *[]ReplicationProtectionIntent `json:"value,omitempty"`
21006	// NextLink - The value of next link.
21007	NextLink *string `json:"nextLink,omitempty"`
21008}
21009
21010// ReplicationProtectionIntentCollectionIterator provides access to a complete listing of
21011// ReplicationProtectionIntent values.
21012type ReplicationProtectionIntentCollectionIterator struct {
21013	i    int
21014	page ReplicationProtectionIntentCollectionPage
21015}
21016
21017// NextWithContext advances to the next value.  If there was an error making
21018// the request the iterator does not advance and the error is returned.
21019func (iter *ReplicationProtectionIntentCollectionIterator) NextWithContext(ctx context.Context) (err error) {
21020	if tracing.IsEnabled() {
21021		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectionIntentCollectionIterator.NextWithContext")
21022		defer func() {
21023			sc := -1
21024			if iter.Response().Response.Response != nil {
21025				sc = iter.Response().Response.Response.StatusCode
21026			}
21027			tracing.EndSpan(ctx, sc, err)
21028		}()
21029	}
21030	iter.i++
21031	if iter.i < len(iter.page.Values()) {
21032		return nil
21033	}
21034	err = iter.page.NextWithContext(ctx)
21035	if err != nil {
21036		iter.i--
21037		return err
21038	}
21039	iter.i = 0
21040	return nil
21041}
21042
21043// Next advances to the next value.  If there was an error making
21044// the request the iterator does not advance and the error is returned.
21045// Deprecated: Use NextWithContext() instead.
21046func (iter *ReplicationProtectionIntentCollectionIterator) Next() error {
21047	return iter.NextWithContext(context.Background())
21048}
21049
21050// NotDone returns true if the enumeration should be started or is not yet complete.
21051func (iter ReplicationProtectionIntentCollectionIterator) NotDone() bool {
21052	return iter.page.NotDone() && iter.i < len(iter.page.Values())
21053}
21054
21055// Response returns the raw server response from the last page request.
21056func (iter ReplicationProtectionIntentCollectionIterator) Response() ReplicationProtectionIntentCollection {
21057	return iter.page.Response()
21058}
21059
21060// Value returns the current value or a zero-initialized value if the
21061// iterator has advanced beyond the end of the collection.
21062func (iter ReplicationProtectionIntentCollectionIterator) Value() ReplicationProtectionIntent {
21063	if !iter.page.NotDone() {
21064		return ReplicationProtectionIntent{}
21065	}
21066	return iter.page.Values()[iter.i]
21067}
21068
21069// Creates a new instance of the ReplicationProtectionIntentCollectionIterator type.
21070func NewReplicationProtectionIntentCollectionIterator(page ReplicationProtectionIntentCollectionPage) ReplicationProtectionIntentCollectionIterator {
21071	return ReplicationProtectionIntentCollectionIterator{page: page}
21072}
21073
21074// IsEmpty returns true if the ListResult contains no values.
21075func (rpic ReplicationProtectionIntentCollection) IsEmpty() bool {
21076	return rpic.Value == nil || len(*rpic.Value) == 0
21077}
21078
21079// hasNextLink returns true if the NextLink is not empty.
21080func (rpic ReplicationProtectionIntentCollection) hasNextLink() bool {
21081	return rpic.NextLink != nil && len(*rpic.NextLink) != 0
21082}
21083
21084// replicationProtectionIntentCollectionPreparer prepares a request to retrieve the next set of results.
21085// It returns nil if no more results exist.
21086func (rpic ReplicationProtectionIntentCollection) replicationProtectionIntentCollectionPreparer(ctx context.Context) (*http.Request, error) {
21087	if !rpic.hasNextLink() {
21088		return nil, nil
21089	}
21090	return autorest.Prepare((&http.Request{}).WithContext(ctx),
21091		autorest.AsJSON(),
21092		autorest.AsGet(),
21093		autorest.WithBaseURL(to.String(rpic.NextLink)))
21094}
21095
21096// ReplicationProtectionIntentCollectionPage contains a page of ReplicationProtectionIntent values.
21097type ReplicationProtectionIntentCollectionPage struct {
21098	fn   func(context.Context, ReplicationProtectionIntentCollection) (ReplicationProtectionIntentCollection, error)
21099	rpic ReplicationProtectionIntentCollection
21100}
21101
21102// NextWithContext advances to the next page of values.  If there was an error making
21103// the request the page does not advance and the error is returned.
21104func (page *ReplicationProtectionIntentCollectionPage) NextWithContext(ctx context.Context) (err error) {
21105	if tracing.IsEnabled() {
21106		ctx = tracing.StartSpan(ctx, fqdn+"/ReplicationProtectionIntentCollectionPage.NextWithContext")
21107		defer func() {
21108			sc := -1
21109			if page.Response().Response.Response != nil {
21110				sc = page.Response().Response.Response.StatusCode
21111			}
21112			tracing.EndSpan(ctx, sc, err)
21113		}()
21114	}
21115	for {
21116		next, err := page.fn(ctx, page.rpic)
21117		if err != nil {
21118			return err
21119		}
21120		page.rpic = next
21121		if !next.hasNextLink() || !next.IsEmpty() {
21122			break
21123		}
21124	}
21125	return nil
21126}
21127
21128// Next advances to the next page of values.  If there was an error making
21129// the request the page does not advance and the error is returned.
21130// Deprecated: Use NextWithContext() instead.
21131func (page *ReplicationProtectionIntentCollectionPage) Next() error {
21132	return page.NextWithContext(context.Background())
21133}
21134
21135// NotDone returns true if the page enumeration should be started or is not yet complete.
21136func (page ReplicationProtectionIntentCollectionPage) NotDone() bool {
21137	return !page.rpic.IsEmpty()
21138}
21139
21140// Response returns the raw server response from the last page request.
21141func (page ReplicationProtectionIntentCollectionPage) Response() ReplicationProtectionIntentCollection {
21142	return page.rpic
21143}
21144
21145// Values returns the slice of values for the current page or nil if there are no values.
21146func (page ReplicationProtectionIntentCollectionPage) Values() []ReplicationProtectionIntent {
21147	if page.rpic.IsEmpty() {
21148		return nil
21149	}
21150	return *page.rpic.Value
21151}
21152
21153// Creates a new instance of the ReplicationProtectionIntentCollectionPage type.
21154func NewReplicationProtectionIntentCollectionPage(cur ReplicationProtectionIntentCollection, getNextPage func(context.Context, ReplicationProtectionIntentCollection) (ReplicationProtectionIntentCollection, error)) ReplicationProtectionIntentCollectionPage {
21155	return ReplicationProtectionIntentCollectionPage{
21156		fn:   getNextPage,
21157		rpic: cur,
21158	}
21159}
21160
21161// ReplicationProtectionIntentProperties replication protection intent custom data details.
21162type ReplicationProtectionIntentProperties struct {
21163	// FriendlyName - The name.
21164	FriendlyName *string `json:"friendlyName,omitempty"`
21165	// JobID - READ-ONLY; The job Id.
21166	JobID *string `json:"jobId,omitempty"`
21167	// JobState - READ-ONLY; The job state.
21168	JobState *string `json:"jobState,omitempty"`
21169	// IsActive - READ-ONLY; A value indicating whether the intent object is active.
21170	IsActive *bool `json:"isActive,omitempty"`
21171	// CreationTimeUTC - READ-ONLY; The creation time in UTC.
21172	CreationTimeUTC *string `json:"creationTimeUTC,omitempty"`
21173	// ProviderSpecificDetails - The Replication provider custom settings.
21174	ProviderSpecificDetails BasicReplicationProtectionIntentProviderSpecificSettings `json:"providerSpecificDetails,omitempty"`
21175}
21176
21177// MarshalJSON is the custom marshaler for ReplicationProtectionIntentProperties.
21178func (rpip ReplicationProtectionIntentProperties) MarshalJSON() ([]byte, error) {
21179	objectMap := make(map[string]interface{})
21180	if rpip.FriendlyName != nil {
21181		objectMap["friendlyName"] = rpip.FriendlyName
21182	}
21183	objectMap["providerSpecificDetails"] = rpip.ProviderSpecificDetails
21184	return json.Marshal(objectMap)
21185}
21186
21187// UnmarshalJSON is the custom unmarshaler for ReplicationProtectionIntentProperties struct.
21188func (rpip *ReplicationProtectionIntentProperties) UnmarshalJSON(body []byte) error {
21189	var m map[string]*json.RawMessage
21190	err := json.Unmarshal(body, &m)
21191	if err != nil {
21192		return err
21193	}
21194	for k, v := range m {
21195		switch k {
21196		case "friendlyName":
21197			if v != nil {
21198				var friendlyName string
21199				err = json.Unmarshal(*v, &friendlyName)
21200				if err != nil {
21201					return err
21202				}
21203				rpip.FriendlyName = &friendlyName
21204			}
21205		case "jobId":
21206			if v != nil {
21207				var jobID string
21208				err = json.Unmarshal(*v, &jobID)
21209				if err != nil {
21210					return err
21211				}
21212				rpip.JobID = &jobID
21213			}
21214		case "jobState":
21215			if v != nil {
21216				var jobState string
21217				err = json.Unmarshal(*v, &jobState)
21218				if err != nil {
21219					return err
21220				}
21221				rpip.JobState = &jobState
21222			}
21223		case "isActive":
21224			if v != nil {
21225				var isActive bool
21226				err = json.Unmarshal(*v, &isActive)
21227				if err != nil {
21228					return err
21229				}
21230				rpip.IsActive = &isActive
21231			}
21232		case "creationTimeUTC":
21233			if v != nil {
21234				var creationTimeUTC string
21235				err = json.Unmarshal(*v, &creationTimeUTC)
21236				if err != nil {
21237					return err
21238				}
21239				rpip.CreationTimeUTC = &creationTimeUTC
21240			}
21241		case "providerSpecificDetails":
21242			if v != nil {
21243				providerSpecificDetails, err := unmarshalBasicReplicationProtectionIntentProviderSpecificSettings(*v)
21244				if err != nil {
21245					return err
21246				}
21247				rpip.ProviderSpecificDetails = providerSpecificDetails
21248			}
21249		}
21250	}
21251
21252	return nil
21253}
21254
21255// BasicReplicationProtectionIntentProviderSpecificSettings replication provider specific settings.
21256type BasicReplicationProtectionIntentProviderSpecificSettings interface {
21257	AsA2AReplicationIntentDetails() (*A2AReplicationIntentDetails, bool)
21258	AsReplicationProtectionIntentProviderSpecificSettings() (*ReplicationProtectionIntentProviderSpecificSettings, bool)
21259}
21260
21261// ReplicationProtectionIntentProviderSpecificSettings replication provider specific settings.
21262type ReplicationProtectionIntentProviderSpecificSettings struct {
21263	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeReplicationProtectionIntentProviderSpecificSettings', 'InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A'
21264	InstanceType InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettings `json:"instanceType,omitempty"`
21265}
21266
21267func unmarshalBasicReplicationProtectionIntentProviderSpecificSettings(body []byte) (BasicReplicationProtectionIntentProviderSpecificSettings, error) {
21268	var m map[string]interface{}
21269	err := json.Unmarshal(body, &m)
21270	if err != nil {
21271		return nil, err
21272	}
21273
21274	switch m["instanceType"] {
21275	case string(InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeA2A):
21276		var arid A2AReplicationIntentDetails
21277		err := json.Unmarshal(body, &arid)
21278		return arid, err
21279	default:
21280		var rpipss ReplicationProtectionIntentProviderSpecificSettings
21281		err := json.Unmarshal(body, &rpipss)
21282		return rpipss, err
21283	}
21284}
21285func unmarshalBasicReplicationProtectionIntentProviderSpecificSettingsArray(body []byte) ([]BasicReplicationProtectionIntentProviderSpecificSettings, error) {
21286	var rawMessages []*json.RawMessage
21287	err := json.Unmarshal(body, &rawMessages)
21288	if err != nil {
21289		return nil, err
21290	}
21291
21292	rpipssArray := make([]BasicReplicationProtectionIntentProviderSpecificSettings, len(rawMessages))
21293
21294	for index, rawMessage := range rawMessages {
21295		rpipss, err := unmarshalBasicReplicationProtectionIntentProviderSpecificSettings(*rawMessage)
21296		if err != nil {
21297			return nil, err
21298		}
21299		rpipssArray[index] = rpipss
21300	}
21301	return rpipssArray, nil
21302}
21303
21304// MarshalJSON is the custom marshaler for ReplicationProtectionIntentProviderSpecificSettings.
21305func (rpipss ReplicationProtectionIntentProviderSpecificSettings) MarshalJSON() ([]byte, error) {
21306	rpipss.InstanceType = InstanceTypeBasicReplicationProtectionIntentProviderSpecificSettingsInstanceTypeReplicationProtectionIntentProviderSpecificSettings
21307	objectMap := make(map[string]interface{})
21308	if rpipss.InstanceType != "" {
21309		objectMap["instanceType"] = rpipss.InstanceType
21310	}
21311	return json.Marshal(objectMap)
21312}
21313
21314// AsA2AReplicationIntentDetails is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for ReplicationProtectionIntentProviderSpecificSettings.
21315func (rpipss ReplicationProtectionIntentProviderSpecificSettings) AsA2AReplicationIntentDetails() (*A2AReplicationIntentDetails, bool) {
21316	return nil, false
21317}
21318
21319// AsReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for ReplicationProtectionIntentProviderSpecificSettings.
21320func (rpipss ReplicationProtectionIntentProviderSpecificSettings) AsReplicationProtectionIntentProviderSpecificSettings() (*ReplicationProtectionIntentProviderSpecificSettings, bool) {
21321	return &rpipss, true
21322}
21323
21324// AsBasicReplicationProtectionIntentProviderSpecificSettings is the BasicReplicationProtectionIntentProviderSpecificSettings implementation for ReplicationProtectionIntentProviderSpecificSettings.
21325func (rpipss ReplicationProtectionIntentProviderSpecificSettings) AsBasicReplicationProtectionIntentProviderSpecificSettings() (BasicReplicationProtectionIntentProviderSpecificSettings, bool) {
21326	return &rpipss, true
21327}
21328
21329// ReplicationProviderContainerUnmappingInput provider specific input for unpairing operations.
21330type ReplicationProviderContainerUnmappingInput struct {
21331	// InstanceType - The class type.
21332	InstanceType *string `json:"instanceType,omitempty"`
21333}
21334
21335// BasicReplicationProviderSpecificContainerCreationInput provider specific input for container creation operation.
21336type BasicReplicationProviderSpecificContainerCreationInput interface {
21337	AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool)
21338	AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool)
21339	AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool)
21340}
21341
21342// ReplicationProviderSpecificContainerCreationInput provider specific input for container creation operation.
21343type ReplicationProviderSpecificContainerCreationInput struct {
21344	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero'
21345	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerCreationInput `json:"instanceType,omitempty"`
21346}
21347
21348func unmarshalBasicReplicationProviderSpecificContainerCreationInput(body []byte) (BasicReplicationProviderSpecificContainerCreationInput, error) {
21349	var m map[string]interface{}
21350	err := json.Unmarshal(body, &m)
21351	if err != nil {
21352		return nil, err
21353	}
21354
21355	switch m["instanceType"] {
21356	case string(InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A):
21357		var acci A2AContainerCreationInput
21358		err := json.Unmarshal(body, &acci)
21359		return acci, err
21360	case string(InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero):
21361		var vmccci VMwareCbtContainerCreationInput
21362		err := json.Unmarshal(body, &vmccci)
21363		return vmccci, err
21364	default:
21365		var rpscci ReplicationProviderSpecificContainerCreationInput
21366		err := json.Unmarshal(body, &rpscci)
21367		return rpscci, err
21368	}
21369}
21370func unmarshalBasicReplicationProviderSpecificContainerCreationInputArray(body []byte) ([]BasicReplicationProviderSpecificContainerCreationInput, error) {
21371	var rawMessages []*json.RawMessage
21372	err := json.Unmarshal(body, &rawMessages)
21373	if err != nil {
21374		return nil, err
21375	}
21376
21377	rpscciArray := make([]BasicReplicationProviderSpecificContainerCreationInput, len(rawMessages))
21378
21379	for index, rawMessage := range rawMessages {
21380		rpscci, err := unmarshalBasicReplicationProviderSpecificContainerCreationInput(*rawMessage)
21381		if err != nil {
21382			return nil, err
21383		}
21384		rpscciArray[index] = rpscci
21385	}
21386	return rpscciArray, nil
21387}
21388
21389// MarshalJSON is the custom marshaler for ReplicationProviderSpecificContainerCreationInput.
21390func (rpscci ReplicationProviderSpecificContainerCreationInput) MarshalJSON() ([]byte, error) {
21391	rpscci.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput
21392	objectMap := make(map[string]interface{})
21393	if rpscci.InstanceType != "" {
21394		objectMap["instanceType"] = rpscci.InstanceType
21395	}
21396	return json.Marshal(objectMap)
21397}
21398
21399// AsA2AContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
21400func (rpscci ReplicationProviderSpecificContainerCreationInput) AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool) {
21401	return nil, false
21402}
21403
21404// AsVMwareCbtContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
21405func (rpscci ReplicationProviderSpecificContainerCreationInput) AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool) {
21406	return nil, false
21407}
21408
21409// AsReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
21410func (rpscci ReplicationProviderSpecificContainerCreationInput) AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool) {
21411	return &rpscci, true
21412}
21413
21414// AsBasicReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for ReplicationProviderSpecificContainerCreationInput.
21415func (rpscci ReplicationProviderSpecificContainerCreationInput) AsBasicReplicationProviderSpecificContainerCreationInput() (BasicReplicationProviderSpecificContainerCreationInput, bool) {
21416	return &rpscci, true
21417}
21418
21419// BasicReplicationProviderSpecificContainerMappingInput provider specific input for pairing operations.
21420type BasicReplicationProviderSpecificContainerMappingInput interface {
21421	AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool)
21422	AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool)
21423	AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool)
21424}
21425
21426// ReplicationProviderSpecificContainerMappingInput provider specific input for pairing operations.
21427type ReplicationProviderSpecificContainerMappingInput struct {
21428	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt'
21429	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerMappingInput `json:"instanceType,omitempty"`
21430}
21431
21432func unmarshalBasicReplicationProviderSpecificContainerMappingInput(body []byte) (BasicReplicationProviderSpecificContainerMappingInput, error) {
21433	var m map[string]interface{}
21434	err := json.Unmarshal(body, &m)
21435	if err != nil {
21436		return nil, err
21437	}
21438
21439	switch m["instanceType"] {
21440	case string(InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A):
21441		var acmi A2AContainerMappingInput
21442		err := json.Unmarshal(body, &acmi)
21443		return acmi, err
21444	case string(InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt):
21445		var vmccmi VMwareCbtContainerMappingInput
21446		err := json.Unmarshal(body, &vmccmi)
21447		return vmccmi, err
21448	default:
21449		var rpscmi ReplicationProviderSpecificContainerMappingInput
21450		err := json.Unmarshal(body, &rpscmi)
21451		return rpscmi, err
21452	}
21453}
21454func unmarshalBasicReplicationProviderSpecificContainerMappingInputArray(body []byte) ([]BasicReplicationProviderSpecificContainerMappingInput, error) {
21455	var rawMessages []*json.RawMessage
21456	err := json.Unmarshal(body, &rawMessages)
21457	if err != nil {
21458		return nil, err
21459	}
21460
21461	rpscmiArray := make([]BasicReplicationProviderSpecificContainerMappingInput, len(rawMessages))
21462
21463	for index, rawMessage := range rawMessages {
21464		rpscmi, err := unmarshalBasicReplicationProviderSpecificContainerMappingInput(*rawMessage)
21465		if err != nil {
21466			return nil, err
21467		}
21468		rpscmiArray[index] = rpscmi
21469	}
21470	return rpscmiArray, nil
21471}
21472
21473// MarshalJSON is the custom marshaler for ReplicationProviderSpecificContainerMappingInput.
21474func (rpscmi ReplicationProviderSpecificContainerMappingInput) MarshalJSON() ([]byte, error) {
21475	rpscmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput
21476	objectMap := make(map[string]interface{})
21477	if rpscmi.InstanceType != "" {
21478		objectMap["instanceType"] = rpscmi.InstanceType
21479	}
21480	return json.Marshal(objectMap)
21481}
21482
21483// AsA2AContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
21484func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool) {
21485	return nil, false
21486}
21487
21488// AsVMwareCbtContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
21489func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool) {
21490	return nil, false
21491}
21492
21493// AsReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
21494func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool) {
21495	return &rpscmi, true
21496}
21497
21498// AsBasicReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for ReplicationProviderSpecificContainerMappingInput.
21499func (rpscmi ReplicationProviderSpecificContainerMappingInput) AsBasicReplicationProviderSpecificContainerMappingInput() (BasicReplicationProviderSpecificContainerMappingInput, bool) {
21500	return &rpscmi, true
21501}
21502
21503// BasicReplicationProviderSpecificSettings replication provider specific settings.
21504type BasicReplicationProviderSpecificSettings interface {
21505	AsA2AReplicationDetails() (*A2AReplicationDetails, bool)
21506	AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool)
21507	AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool)
21508	AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool)
21509	AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool)
21510	AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool)
21511	AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool)
21512	AsInMageReplicationDetails() (*InMageReplicationDetails, bool)
21513	AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool)
21514}
21515
21516// ReplicationProviderSpecificSettings replication provider specific settings.
21517type ReplicationProviderSpecificSettings struct {
21518	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm', 'InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage'
21519	InstanceType InstanceTypeBasicReplicationProviderSpecificSettings `json:"instanceType,omitempty"`
21520}
21521
21522func unmarshalBasicReplicationProviderSpecificSettings(body []byte) (BasicReplicationProviderSpecificSettings, error) {
21523	var m map[string]interface{}
21524	err := json.Unmarshal(body, &m)
21525	if err != nil {
21526		return nil, err
21527	}
21528
21529	switch m["instanceType"] {
21530	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeA2A):
21531		var ard A2AReplicationDetails
21532		err := json.Unmarshal(body, &ard)
21533		return ard, err
21534	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaAzure):
21535		var hvrard HyperVReplicaAzureReplicationDetails
21536		err := json.Unmarshal(body, &hvrard)
21537		return hvrard, err
21538	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplicaBaseReplicationDetails):
21539		var hvrbrd HyperVReplicaBaseReplicationDetails
21540		err := json.Unmarshal(body, &hvrbrd)
21541		return hvrbrd, err
21542	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012R2):
21543		var hvrbrd HyperVReplicaBlueReplicationDetails
21544		err := json.Unmarshal(body, &hvrbrd)
21545		return hvrbrd, err
21546	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeHyperVReplica2012):
21547		var hvrrd HyperVReplicaReplicationDetails
21548		err := json.Unmarshal(body, &hvrrd)
21549		return hvrrd, err
21550	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageAzureV2):
21551		var imavrd InMageAzureV2ReplicationDetails
21552		err := json.Unmarshal(body, &imavrd)
21553		return imavrd, err
21554	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMageRcm):
21555		var imrrd InMageRcmReplicationDetails
21556		err := json.Unmarshal(body, &imrrd)
21557		return imrrd, err
21558	case string(InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeInMage):
21559		var imrd InMageReplicationDetails
21560		err := json.Unmarshal(body, &imrd)
21561		return imrd, err
21562	default:
21563		var rpss ReplicationProviderSpecificSettings
21564		err := json.Unmarshal(body, &rpss)
21565		return rpss, err
21566	}
21567}
21568func unmarshalBasicReplicationProviderSpecificSettingsArray(body []byte) ([]BasicReplicationProviderSpecificSettings, error) {
21569	var rawMessages []*json.RawMessage
21570	err := json.Unmarshal(body, &rawMessages)
21571	if err != nil {
21572		return nil, err
21573	}
21574
21575	rpssArray := make([]BasicReplicationProviderSpecificSettings, len(rawMessages))
21576
21577	for index, rawMessage := range rawMessages {
21578		rpss, err := unmarshalBasicReplicationProviderSpecificSettings(*rawMessage)
21579		if err != nil {
21580			return nil, err
21581		}
21582		rpssArray[index] = rpss
21583	}
21584	return rpssArray, nil
21585}
21586
21587// MarshalJSON is the custom marshaler for ReplicationProviderSpecificSettings.
21588func (rpss ReplicationProviderSpecificSettings) MarshalJSON() ([]byte, error) {
21589	rpss.InstanceType = InstanceTypeBasicReplicationProviderSpecificSettingsInstanceTypeReplicationProviderSpecificSettings
21590	objectMap := make(map[string]interface{})
21591	if rpss.InstanceType != "" {
21592		objectMap["instanceType"] = rpss.InstanceType
21593	}
21594	return json.Marshal(objectMap)
21595}
21596
21597// AsA2AReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21598func (rpss ReplicationProviderSpecificSettings) AsA2AReplicationDetails() (*A2AReplicationDetails, bool) {
21599	return nil, false
21600}
21601
21602// AsHyperVReplicaAzureReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21603func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaAzureReplicationDetails() (*HyperVReplicaAzureReplicationDetails, bool) {
21604	return nil, false
21605}
21606
21607// AsHyperVReplicaBaseReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21608func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaBaseReplicationDetails() (*HyperVReplicaBaseReplicationDetails, bool) {
21609	return nil, false
21610}
21611
21612// AsHyperVReplicaBlueReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21613func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaBlueReplicationDetails() (*HyperVReplicaBlueReplicationDetails, bool) {
21614	return nil, false
21615}
21616
21617// AsHyperVReplicaReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21618func (rpss ReplicationProviderSpecificSettings) AsHyperVReplicaReplicationDetails() (*HyperVReplicaReplicationDetails, bool) {
21619	return nil, false
21620}
21621
21622// AsInMageAzureV2ReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21623func (rpss ReplicationProviderSpecificSettings) AsInMageAzureV2ReplicationDetails() (*InMageAzureV2ReplicationDetails, bool) {
21624	return nil, false
21625}
21626
21627// AsInMageRcmReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21628func (rpss ReplicationProviderSpecificSettings) AsInMageRcmReplicationDetails() (*InMageRcmReplicationDetails, bool) {
21629	return nil, false
21630}
21631
21632// AsInMageReplicationDetails is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21633func (rpss ReplicationProviderSpecificSettings) AsInMageReplicationDetails() (*InMageReplicationDetails, bool) {
21634	return nil, false
21635}
21636
21637// AsReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21638func (rpss ReplicationProviderSpecificSettings) AsReplicationProviderSpecificSettings() (*ReplicationProviderSpecificSettings, bool) {
21639	return &rpss, true
21640}
21641
21642// AsBasicReplicationProviderSpecificSettings is the BasicReplicationProviderSpecificSettings implementation for ReplicationProviderSpecificSettings.
21643func (rpss ReplicationProviderSpecificSettings) AsBasicReplicationProviderSpecificSettings() (BasicReplicationProviderSpecificSettings, bool) {
21644	return &rpss, true
21645}
21646
21647// BasicReplicationProviderSpecificUpdateContainerMappingInput provider specific input for update pairing operations.
21648type BasicReplicationProviderSpecificUpdateContainerMappingInput interface {
21649	AsA2AUpdateContainerMappingInput() (*A2AUpdateContainerMappingInput, bool)
21650	AsReplicationProviderSpecificUpdateContainerMappingInput() (*ReplicationProviderSpecificUpdateContainerMappingInput, bool)
21651}
21652
21653// ReplicationProviderSpecificUpdateContainerMappingInput provider specific input for update pairing
21654// operations.
21655type ReplicationProviderSpecificUpdateContainerMappingInput struct {
21656	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeReplicationProviderSpecificUpdateContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A'
21657	InstanceType InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInput `json:"instanceType,omitempty"`
21658}
21659
21660func unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInput(body []byte) (BasicReplicationProviderSpecificUpdateContainerMappingInput, error) {
21661	var m map[string]interface{}
21662	err := json.Unmarshal(body, &m)
21663	if err != nil {
21664		return nil, err
21665	}
21666
21667	switch m["instanceType"] {
21668	case string(InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeA2A):
21669		var aucmi A2AUpdateContainerMappingInput
21670		err := json.Unmarshal(body, &aucmi)
21671		return aucmi, err
21672	default:
21673		var rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput
21674		err := json.Unmarshal(body, &rpsucmi)
21675		return rpsucmi, err
21676	}
21677}
21678func unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInputArray(body []byte) ([]BasicReplicationProviderSpecificUpdateContainerMappingInput, error) {
21679	var rawMessages []*json.RawMessage
21680	err := json.Unmarshal(body, &rawMessages)
21681	if err != nil {
21682		return nil, err
21683	}
21684
21685	rpsucmiArray := make([]BasicReplicationProviderSpecificUpdateContainerMappingInput, len(rawMessages))
21686
21687	for index, rawMessage := range rawMessages {
21688		rpsucmi, err := unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInput(*rawMessage)
21689		if err != nil {
21690			return nil, err
21691		}
21692		rpsucmiArray[index] = rpsucmi
21693	}
21694	return rpsucmiArray, nil
21695}
21696
21697// MarshalJSON is the custom marshaler for ReplicationProviderSpecificUpdateContainerMappingInput.
21698func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) MarshalJSON() ([]byte, error) {
21699	rpsucmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificUpdateContainerMappingInputInstanceTypeReplicationProviderSpecificUpdateContainerMappingInput
21700	objectMap := make(map[string]interface{})
21701	if rpsucmi.InstanceType != "" {
21702		objectMap["instanceType"] = rpsucmi.InstanceType
21703	}
21704	return json.Marshal(objectMap)
21705}
21706
21707// AsA2AUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for ReplicationProviderSpecificUpdateContainerMappingInput.
21708func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) AsA2AUpdateContainerMappingInput() (*A2AUpdateContainerMappingInput, bool) {
21709	return nil, false
21710}
21711
21712// AsReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for ReplicationProviderSpecificUpdateContainerMappingInput.
21713func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) AsReplicationProviderSpecificUpdateContainerMappingInput() (*ReplicationProviderSpecificUpdateContainerMappingInput, bool) {
21714	return &rpsucmi, true
21715}
21716
21717// AsBasicReplicationProviderSpecificUpdateContainerMappingInput is the BasicReplicationProviderSpecificUpdateContainerMappingInput implementation for ReplicationProviderSpecificUpdateContainerMappingInput.
21718func (rpsucmi ReplicationProviderSpecificUpdateContainerMappingInput) AsBasicReplicationProviderSpecificUpdateContainerMappingInput() (BasicReplicationProviderSpecificUpdateContainerMappingInput, bool) {
21719	return &rpsucmi, true
21720}
21721
21722// ReplicationRecoveryPlansCreateFuture an abstraction for monitoring and retrieving the results of a
21723// long-running operation.
21724type ReplicationRecoveryPlansCreateFuture struct {
21725	azure.FutureAPI
21726	// Result returns the result of the asynchronous operation.
21727	// If the operation has not completed it will return an error.
21728	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21729}
21730
21731// ReplicationRecoveryPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
21732// long-running operation.
21733type ReplicationRecoveryPlansDeleteFuture struct {
21734	azure.FutureAPI
21735	// Result returns the result of the asynchronous operation.
21736	// If the operation has not completed it will return an error.
21737	Result func(ReplicationRecoveryPlansClient) (autorest.Response, error)
21738}
21739
21740// ReplicationRecoveryPlansFailoverCommitFuture an abstraction for monitoring and retrieving the results of
21741// a long-running operation.
21742type ReplicationRecoveryPlansFailoverCommitFuture struct {
21743	azure.FutureAPI
21744	// Result returns the result of the asynchronous operation.
21745	// If the operation has not completed it will return an error.
21746	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21747}
21748
21749// ReplicationRecoveryPlansPlannedFailoverFuture an abstraction for monitoring and retrieving the results
21750// of a long-running operation.
21751type ReplicationRecoveryPlansPlannedFailoverFuture struct {
21752	azure.FutureAPI
21753	// Result returns the result of the asynchronous operation.
21754	// If the operation has not completed it will return an error.
21755	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21756}
21757
21758// ReplicationRecoveryPlansReprotectFuture an abstraction for monitoring and retrieving the results of a
21759// long-running operation.
21760type ReplicationRecoveryPlansReprotectFuture struct {
21761	azure.FutureAPI
21762	// Result returns the result of the asynchronous operation.
21763	// If the operation has not completed it will return an error.
21764	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21765}
21766
21767// ReplicationRecoveryPlansTestFailoverCleanupFuture an abstraction for monitoring and retrieving the
21768// results of a long-running operation.
21769type ReplicationRecoveryPlansTestFailoverCleanupFuture struct {
21770	azure.FutureAPI
21771	// Result returns the result of the asynchronous operation.
21772	// If the operation has not completed it will return an error.
21773	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21774}
21775
21776// ReplicationRecoveryPlansTestFailoverFuture an abstraction for monitoring and retrieving the results of a
21777// long-running operation.
21778type ReplicationRecoveryPlansTestFailoverFuture struct {
21779	azure.FutureAPI
21780	// Result returns the result of the asynchronous operation.
21781	// If the operation has not completed it will return an error.
21782	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21783}
21784
21785// ReplicationRecoveryPlansUnplannedFailoverFuture an abstraction for monitoring and retrieving the results
21786// of a long-running operation.
21787type ReplicationRecoveryPlansUnplannedFailoverFuture struct {
21788	azure.FutureAPI
21789	// Result returns the result of the asynchronous operation.
21790	// If the operation has not completed it will return an error.
21791	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21792}
21793
21794// ReplicationRecoveryPlansUpdateFuture an abstraction for monitoring and retrieving the results of a
21795// long-running operation.
21796type ReplicationRecoveryPlansUpdateFuture struct {
21797	azure.FutureAPI
21798	// Result returns the result of the asynchronous operation.
21799	// If the operation has not completed it will return an error.
21800	Result func(ReplicationRecoveryPlansClient) (RecoveryPlan, error)
21801}
21802
21803// ReplicationRecoveryServicesProvidersCreateFuture an abstraction for monitoring and retrieving the
21804// results of a long-running operation.
21805type ReplicationRecoveryServicesProvidersCreateFuture struct {
21806	azure.FutureAPI
21807	// Result returns the result of the asynchronous operation.
21808	// If the operation has not completed it will return an error.
21809	Result func(ReplicationRecoveryServicesProvidersClient) (RecoveryServicesProvider, error)
21810}
21811
21812// ReplicationRecoveryServicesProvidersDeleteFuture an abstraction for monitoring and retrieving the
21813// results of a long-running operation.
21814type ReplicationRecoveryServicesProvidersDeleteFuture struct {
21815	azure.FutureAPI
21816	// Result returns the result of the asynchronous operation.
21817	// If the operation has not completed it will return an error.
21818	Result func(ReplicationRecoveryServicesProvidersClient) (autorest.Response, error)
21819}
21820
21821// ReplicationRecoveryServicesProvidersPurgeFuture an abstraction for monitoring and retrieving the results
21822// of a long-running operation.
21823type ReplicationRecoveryServicesProvidersPurgeFuture struct {
21824	azure.FutureAPI
21825	// Result returns the result of the asynchronous operation.
21826	// If the operation has not completed it will return an error.
21827	Result func(ReplicationRecoveryServicesProvidersClient) (autorest.Response, error)
21828}
21829
21830// ReplicationRecoveryServicesProvidersRefreshProviderFuture an abstraction for monitoring and retrieving
21831// the results of a long-running operation.
21832type ReplicationRecoveryServicesProvidersRefreshProviderFuture struct {
21833	azure.FutureAPI
21834	// Result returns the result of the asynchronous operation.
21835	// If the operation has not completed it will return an error.
21836	Result func(ReplicationRecoveryServicesProvidersClient) (RecoveryServicesProvider, error)
21837}
21838
21839// ReplicationStorageClassificationMappingsCreateFuture an abstraction for monitoring and retrieving the
21840// results of a long-running operation.
21841type ReplicationStorageClassificationMappingsCreateFuture struct {
21842	azure.FutureAPI
21843	// Result returns the result of the asynchronous operation.
21844	// If the operation has not completed it will return an error.
21845	Result func(ReplicationStorageClassificationMappingsClient) (StorageClassificationMapping, error)
21846}
21847
21848// ReplicationStorageClassificationMappingsDeleteFuture an abstraction for monitoring and retrieving the
21849// results of a long-running operation.
21850type ReplicationStorageClassificationMappingsDeleteFuture struct {
21851	azure.FutureAPI
21852	// Result returns the result of the asynchronous operation.
21853	// If the operation has not completed it will return an error.
21854	Result func(ReplicationStorageClassificationMappingsClient) (autorest.Response, error)
21855}
21856
21857// ReplicationVaultHealthRefreshFuture an abstraction for monitoring and retrieving the results of a
21858// long-running operation.
21859type ReplicationVaultHealthRefreshFuture struct {
21860	azure.FutureAPI
21861	// Result returns the result of the asynchronous operation.
21862	// If the operation has not completed it will return an error.
21863	Result func(ReplicationVaultHealthClient) (VaultHealthDetails, error)
21864}
21865
21866// ReplicationvCentersCreateFuture an abstraction for monitoring and retrieving the results of a
21867// long-running operation.
21868type ReplicationvCentersCreateFuture 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(ReplicationvCentersClient) (VCenter, error)
21873}
21874
21875// ReplicationvCentersDeleteFuture an abstraction for monitoring and retrieving the results of a
21876// long-running operation.
21877type ReplicationvCentersDeleteFuture struct {
21878	azure.FutureAPI
21879	// Result returns the result of the asynchronous operation.
21880	// If the operation has not completed it will return an error.
21881	Result func(ReplicationvCentersClient) (autorest.Response, error)
21882}
21883
21884// ReplicationvCentersUpdateFuture an abstraction for monitoring and retrieving the results of a
21885// long-running operation.
21886type ReplicationvCentersUpdateFuture struct {
21887	azure.FutureAPI
21888	// Result returns the result of the asynchronous operation.
21889	// If the operation has not completed it will return an error.
21890	Result func(ReplicationvCentersClient) (VCenter, error)
21891}
21892
21893// ReprotectAgentDetails reprotect agent details.
21894type ReprotectAgentDetails struct {
21895	// ID - READ-ONLY; The reprotect agent Id.
21896	ID *string `json:"id,omitempty"`
21897	// Name - READ-ONLY; The reprotect agent name.
21898	Name *string `json:"name,omitempty"`
21899	// Version - READ-ONLY; The version.
21900	Version *string `json:"version,omitempty"`
21901	// LastHeartbeatUtc - READ-ONLY; The last heartbeat received from the reprotect agent.
21902	LastHeartbeatUtc *date.Time `json:"lastHeartbeatUtc,omitempty"`
21903	// Health - READ-ONLY; The health of the reprotect agent. Possible values include: 'ProtectionHealthNone', 'ProtectionHealthNormal', 'ProtectionHealthWarning', 'ProtectionHealthCritical'
21904	Health ProtectionHealth `json:"health,omitempty"`
21905	// HealthErrors - READ-ONLY; The health errors.
21906	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
21907}
21908
21909// ResolveHealthError resolve health errors input properties.
21910type ResolveHealthError struct {
21911	// HealthErrorID - Health error id.
21912	HealthErrorID *string `json:"healthErrorId,omitempty"`
21913}
21914
21915// ResolveHealthInput resolve health input.
21916type ResolveHealthInput struct {
21917	// Properties - Disable resolve health input properties.
21918	Properties *ResolveHealthInputProperties `json:"properties,omitempty"`
21919}
21920
21921// ResolveHealthInputProperties resolve health input properties.
21922type ResolveHealthInputProperties struct {
21923	// HealthErrors - Health errors.
21924	HealthErrors *[]ResolveHealthError `json:"healthErrors,omitempty"`
21925}
21926
21927// Resource azure resource.
21928type Resource struct {
21929	// ID - READ-ONLY; Resource Id
21930	ID *string `json:"id,omitempty"`
21931	// Name - READ-ONLY; Resource Name
21932	Name *string `json:"name,omitempty"`
21933	// Type - READ-ONLY; Resource Type
21934	Type *string `json:"type,omitempty"`
21935	// Location - Resource Location
21936	Location *string `json:"location,omitempty"`
21937}
21938
21939// MarshalJSON is the custom marshaler for Resource.
21940func (r Resource) MarshalJSON() ([]byte, error) {
21941	objectMap := make(map[string]interface{})
21942	if r.Location != nil {
21943		objectMap["location"] = r.Location
21944	}
21945	return json.Marshal(objectMap)
21946}
21947
21948// ResourceHealthSummary base class to define the health summary of the resources contained under an Arm
21949// resource.
21950type ResourceHealthSummary struct {
21951	// ResourceCount - The count of total resources under the container.
21952	ResourceCount *int32 `json:"resourceCount,omitempty"`
21953	// Issues - The list of summary of health errors across the resources under the container.
21954	Issues *[]HealthErrorSummary `json:"issues,omitempty"`
21955}
21956
21957// ResumeJobParams resume job params.
21958type ResumeJobParams struct {
21959	// Properties - Resume job properties.
21960	Properties *ResumeJobParamsProperties `json:"properties,omitempty"`
21961}
21962
21963// ResumeJobParamsProperties resume job properties.
21964type ResumeJobParamsProperties struct {
21965	// Comments - Resume job comments.
21966	Comments *string `json:"comments,omitempty"`
21967}
21968
21969// RetentionVolume the retention details of the MT.
21970type RetentionVolume struct {
21971	// VolumeName - The volume name.
21972	VolumeName *string `json:"volumeName,omitempty"`
21973	// CapacityInBytes - The volume capacity.
21974	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
21975	// FreeSpaceInBytes - The free space available in this volume.
21976	FreeSpaceInBytes *int64 `json:"freeSpaceInBytes,omitempty"`
21977	// ThresholdPercentage - The threshold percentage.
21978	ThresholdPercentage *int32 `json:"thresholdPercentage,omitempty"`
21979}
21980
21981// ReverseReplicationInput reverse replication input.
21982type ReverseReplicationInput struct {
21983	// Properties - Reverse replication properties
21984	Properties *ReverseReplicationInputProperties `json:"properties,omitempty"`
21985}
21986
21987// ReverseReplicationInputProperties reverse replication input properties.
21988type ReverseReplicationInputProperties struct {
21989	// FailoverDirection - Failover direction.
21990	FailoverDirection *string `json:"failoverDirection,omitempty"`
21991	// ProviderSpecificDetails - Provider specific reverse replication input.
21992	ProviderSpecificDetails BasicReverseReplicationProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
21993}
21994
21995// UnmarshalJSON is the custom unmarshaler for ReverseReplicationInputProperties struct.
21996func (rrip *ReverseReplicationInputProperties) UnmarshalJSON(body []byte) error {
21997	var m map[string]*json.RawMessage
21998	err := json.Unmarshal(body, &m)
21999	if err != nil {
22000		return err
22001	}
22002	for k, v := range m {
22003		switch k {
22004		case "failoverDirection":
22005			if v != nil {
22006				var failoverDirection string
22007				err = json.Unmarshal(*v, &failoverDirection)
22008				if err != nil {
22009					return err
22010				}
22011				rrip.FailoverDirection = &failoverDirection
22012			}
22013		case "providerSpecificDetails":
22014			if v != nil {
22015				providerSpecificDetails, err := unmarshalBasicReverseReplicationProviderSpecificInput(*v)
22016				if err != nil {
22017					return err
22018				}
22019				rrip.ProviderSpecificDetails = providerSpecificDetails
22020			}
22021		}
22022	}
22023
22024	return nil
22025}
22026
22027// BasicReverseReplicationProviderSpecificInput provider specific reverse replication input.
22028type BasicReverseReplicationProviderSpecificInput interface {
22029	AsA2AReprotectInput() (*A2AReprotectInput, bool)
22030	AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool)
22031	AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool)
22032	AsInMageReprotectInput() (*InMageReprotectInput, bool)
22033	AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool)
22034}
22035
22036// ReverseReplicationProviderSpecificInput provider specific reverse replication input.
22037type ReverseReplicationProviderSpecificInput struct {
22038	// InstanceType - Possible values include: 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage'
22039	InstanceType InstanceTypeBasicReverseReplicationProviderSpecificInput `json:"instanceType,omitempty"`
22040}
22041
22042func unmarshalBasicReverseReplicationProviderSpecificInput(body []byte) (BasicReverseReplicationProviderSpecificInput, error) {
22043	var m map[string]interface{}
22044	err := json.Unmarshal(body, &m)
22045	if err != nil {
22046		return nil, err
22047	}
22048
22049	switch m["instanceType"] {
22050	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeA2A):
22051		var ari A2AReprotectInput
22052		err := json.Unmarshal(body, &ari)
22053		return ari, err
22054	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeHyperVReplicaAzure):
22055		var hvrari HyperVReplicaAzureReprotectInput
22056		err := json.Unmarshal(body, &hvrari)
22057		return hvrari, err
22058	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMageAzureV2):
22059		var imavri InMageAzureV2ReprotectInput
22060		err := json.Unmarshal(body, &imavri)
22061		return imavri, err
22062	case string(InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeInMage):
22063		var imri InMageReprotectInput
22064		err := json.Unmarshal(body, &imri)
22065		return imri, err
22066	default:
22067		var rrpsi ReverseReplicationProviderSpecificInput
22068		err := json.Unmarshal(body, &rrpsi)
22069		return rrpsi, err
22070	}
22071}
22072func unmarshalBasicReverseReplicationProviderSpecificInputArray(body []byte) ([]BasicReverseReplicationProviderSpecificInput, error) {
22073	var rawMessages []*json.RawMessage
22074	err := json.Unmarshal(body, &rawMessages)
22075	if err != nil {
22076		return nil, err
22077	}
22078
22079	rrpsiArray := make([]BasicReverseReplicationProviderSpecificInput, len(rawMessages))
22080
22081	for index, rawMessage := range rawMessages {
22082		rrpsi, err := unmarshalBasicReverseReplicationProviderSpecificInput(*rawMessage)
22083		if err != nil {
22084			return nil, err
22085		}
22086		rrpsiArray[index] = rrpsi
22087	}
22088	return rrpsiArray, nil
22089}
22090
22091// MarshalJSON is the custom marshaler for ReverseReplicationProviderSpecificInput.
22092func (rrpsi ReverseReplicationProviderSpecificInput) MarshalJSON() ([]byte, error) {
22093	rrpsi.InstanceType = InstanceTypeBasicReverseReplicationProviderSpecificInputInstanceTypeReverseReplicationProviderSpecificInput
22094	objectMap := make(map[string]interface{})
22095	if rrpsi.InstanceType != "" {
22096		objectMap["instanceType"] = rrpsi.InstanceType
22097	}
22098	return json.Marshal(objectMap)
22099}
22100
22101// AsA2AReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
22102func (rrpsi ReverseReplicationProviderSpecificInput) AsA2AReprotectInput() (*A2AReprotectInput, bool) {
22103	return nil, false
22104}
22105
22106// AsHyperVReplicaAzureReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
22107func (rrpsi ReverseReplicationProviderSpecificInput) AsHyperVReplicaAzureReprotectInput() (*HyperVReplicaAzureReprotectInput, bool) {
22108	return nil, false
22109}
22110
22111// AsInMageAzureV2ReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
22112func (rrpsi ReverseReplicationProviderSpecificInput) AsInMageAzureV2ReprotectInput() (*InMageAzureV2ReprotectInput, bool) {
22113	return nil, false
22114}
22115
22116// AsInMageReprotectInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
22117func (rrpsi ReverseReplicationProviderSpecificInput) AsInMageReprotectInput() (*InMageReprotectInput, bool) {
22118	return nil, false
22119}
22120
22121// AsReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
22122func (rrpsi ReverseReplicationProviderSpecificInput) AsReverseReplicationProviderSpecificInput() (*ReverseReplicationProviderSpecificInput, bool) {
22123	return &rrpsi, true
22124}
22125
22126// AsBasicReverseReplicationProviderSpecificInput is the BasicReverseReplicationProviderSpecificInput implementation for ReverseReplicationProviderSpecificInput.
22127func (rrpsi ReverseReplicationProviderSpecificInput) AsBasicReverseReplicationProviderSpecificInput() (BasicReverseReplicationProviderSpecificInput, bool) {
22128	return &rrpsi, true
22129}
22130
22131// RoleAssignment azure role assignment details.
22132type RoleAssignment struct {
22133	// ID - The ARM Id of the role assignment.
22134	ID *string `json:"id,omitempty"`
22135	// Name - The name of the role assignment.
22136	Name *string `json:"name,omitempty"`
22137	// Scope - Role assignment scope.
22138	Scope *string `json:"scope,omitempty"`
22139	// PrincipalID - Principal Id.
22140	PrincipalID *string `json:"principalId,omitempty"`
22141	// RoleDefinitionID - Role definition id.
22142	RoleDefinitionID *string `json:"roleDefinitionId,omitempty"`
22143}
22144
22145// RunAsAccount CS Accounts Details.
22146type RunAsAccount struct {
22147	// AccountID - The CS RunAs account Id.
22148	AccountID *string `json:"accountId,omitempty"`
22149	// AccountName - The CS RunAs account name.
22150	AccountName *string `json:"accountName,omitempty"`
22151}
22152
22153// SanEnableProtectionInput san enable protection provider specific input.
22154type SanEnableProtectionInput struct {
22155	// InstanceType - Possible values include: 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeEnableProtectionProviderSpecificInput', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan'
22156	InstanceType InstanceTypeBasicEnableProtectionProviderSpecificInput `json:"instanceType,omitempty"`
22157}
22158
22159// MarshalJSON is the custom marshaler for SanEnableProtectionInput.
22160func (sepi SanEnableProtectionInput) MarshalJSON() ([]byte, error) {
22161	sepi.InstanceType = InstanceTypeBasicEnableProtectionProviderSpecificInputInstanceTypeSan
22162	objectMap := make(map[string]interface{})
22163	if sepi.InstanceType != "" {
22164		objectMap["instanceType"] = sepi.InstanceType
22165	}
22166	return json.Marshal(objectMap)
22167}
22168
22169// AsA2AEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22170func (sepi SanEnableProtectionInput) AsA2AEnableProtectionInput() (*A2AEnableProtectionInput, bool) {
22171	return nil, false
22172}
22173
22174// AsHyperVReplicaAzureEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22175func (sepi SanEnableProtectionInput) AsHyperVReplicaAzureEnableProtectionInput() (*HyperVReplicaAzureEnableProtectionInput, bool) {
22176	return nil, false
22177}
22178
22179// AsInMageAzureV2EnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22180func (sepi SanEnableProtectionInput) AsInMageAzureV2EnableProtectionInput() (*InMageAzureV2EnableProtectionInput, bool) {
22181	return nil, false
22182}
22183
22184// AsInMageEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22185func (sepi SanEnableProtectionInput) AsInMageEnableProtectionInput() (*InMageEnableProtectionInput, bool) {
22186	return nil, false
22187}
22188
22189// AsInMageRcmEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22190func (sepi SanEnableProtectionInput) AsInMageRcmEnableProtectionInput() (*InMageRcmEnableProtectionInput, bool) {
22191	return nil, false
22192}
22193
22194// AsSanEnableProtectionInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22195func (sepi SanEnableProtectionInput) AsSanEnableProtectionInput() (*SanEnableProtectionInput, bool) {
22196	return &sepi, true
22197}
22198
22199// AsEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22200func (sepi SanEnableProtectionInput) AsEnableProtectionProviderSpecificInput() (*EnableProtectionProviderSpecificInput, bool) {
22201	return nil, false
22202}
22203
22204// AsBasicEnableProtectionProviderSpecificInput is the BasicEnableProtectionProviderSpecificInput implementation for SanEnableProtectionInput.
22205func (sepi SanEnableProtectionInput) AsBasicEnableProtectionProviderSpecificInput() (BasicEnableProtectionProviderSpecificInput, bool) {
22206	return &sepi, true
22207}
22208
22209// ScriptActionTaskDetails this class represents the script action task details.
22210type ScriptActionTaskDetails struct {
22211	// Name - The name.
22212	Name *string `json:"name,omitempty"`
22213	// Path - The path.
22214	Path *string `json:"path,omitempty"`
22215	// Output - The output.
22216	Output *string `json:"output,omitempty"`
22217	// IsPrimarySideScript - A value indicating whether it is a primary side script or not.
22218	IsPrimarySideScript *bool `json:"isPrimarySideScript,omitempty"`
22219	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
22220	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
22221}
22222
22223// MarshalJSON is the custom marshaler for ScriptActionTaskDetails.
22224func (satd ScriptActionTaskDetails) MarshalJSON() ([]byte, error) {
22225	satd.InstanceType = InstanceTypeScriptActionTaskDetails
22226	objectMap := make(map[string]interface{})
22227	if satd.Name != nil {
22228		objectMap["name"] = satd.Name
22229	}
22230	if satd.Path != nil {
22231		objectMap["path"] = satd.Path
22232	}
22233	if satd.Output != nil {
22234		objectMap["output"] = satd.Output
22235	}
22236	if satd.IsPrimarySideScript != nil {
22237		objectMap["isPrimarySideScript"] = satd.IsPrimarySideScript
22238	}
22239	if satd.InstanceType != "" {
22240		objectMap["instanceType"] = satd.InstanceType
22241	}
22242	return json.Marshal(objectMap)
22243}
22244
22245// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22246func (satd ScriptActionTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
22247	return nil, false
22248}
22249
22250// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22251func (satd ScriptActionTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
22252	return nil, false
22253}
22254
22255// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22256func (satd ScriptActionTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
22257	return nil, false
22258}
22259
22260// AsJobTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22261func (satd ScriptActionTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
22262	return nil, false
22263}
22264
22265// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22266func (satd ScriptActionTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
22267	return nil, false
22268}
22269
22270// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22271func (satd ScriptActionTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
22272	return &satd, true
22273}
22274
22275// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22276func (satd ScriptActionTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
22277	return nil, false
22278}
22279
22280// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22281func (satd ScriptActionTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
22282	return nil, false
22283}
22284
22285// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22286func (satd ScriptActionTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
22287	return nil, false
22288}
22289
22290// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for ScriptActionTaskDetails.
22291func (satd ScriptActionTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
22292	return &satd, true
22293}
22294
22295// ServiceError ASR error model
22296type ServiceError struct {
22297	// Code - Error code.
22298	Code *string `json:"code,omitempty"`
22299	// Message - Error message.
22300	Message *string `json:"message,omitempty"`
22301	// PossibleCauses - Possible causes of error.
22302	PossibleCauses *string `json:"possibleCauses,omitempty"`
22303	// RecommendedAction - Recommended action to resolve error.
22304	RecommendedAction *string `json:"recommendedAction,omitempty"`
22305	// ActivityID - Activity Id.
22306	ActivityID *string `json:"activityId,omitempty"`
22307}
22308
22309// BasicStorageAccountCustomDetails storage account custom input.
22310type BasicStorageAccountCustomDetails interface {
22311	AsExistingStorageAccount() (*ExistingStorageAccount, bool)
22312	AsStorageAccountCustomDetails() (*StorageAccountCustomDetails, bool)
22313}
22314
22315// StorageAccountCustomDetails storage account custom input.
22316type StorageAccountCustomDetails struct {
22317	// ResourceType - Possible values include: 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeStorageAccountCustomDetails', 'ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting'
22318	ResourceType ResourceTypeBasicStorageAccountCustomDetails `json:"resourceType,omitempty"`
22319}
22320
22321func unmarshalBasicStorageAccountCustomDetails(body []byte) (BasicStorageAccountCustomDetails, error) {
22322	var m map[string]interface{}
22323	err := json.Unmarshal(body, &m)
22324	if err != nil {
22325		return nil, err
22326	}
22327
22328	switch m["resourceType"] {
22329	case string(ResourceTypeBasicStorageAccountCustomDetailsResourceTypeExisting):
22330		var esa ExistingStorageAccount
22331		err := json.Unmarshal(body, &esa)
22332		return esa, err
22333	default:
22334		var sacd StorageAccountCustomDetails
22335		err := json.Unmarshal(body, &sacd)
22336		return sacd, err
22337	}
22338}
22339func unmarshalBasicStorageAccountCustomDetailsArray(body []byte) ([]BasicStorageAccountCustomDetails, error) {
22340	var rawMessages []*json.RawMessage
22341	err := json.Unmarshal(body, &rawMessages)
22342	if err != nil {
22343		return nil, err
22344	}
22345
22346	sacdArray := make([]BasicStorageAccountCustomDetails, len(rawMessages))
22347
22348	for index, rawMessage := range rawMessages {
22349		sacd, err := unmarshalBasicStorageAccountCustomDetails(*rawMessage)
22350		if err != nil {
22351			return nil, err
22352		}
22353		sacdArray[index] = sacd
22354	}
22355	return sacdArray, nil
22356}
22357
22358// MarshalJSON is the custom marshaler for StorageAccountCustomDetails.
22359func (sacd StorageAccountCustomDetails) MarshalJSON() ([]byte, error) {
22360	sacd.ResourceType = ResourceTypeBasicStorageAccountCustomDetailsResourceTypeStorageAccountCustomDetails
22361	objectMap := make(map[string]interface{})
22362	if sacd.ResourceType != "" {
22363		objectMap["resourceType"] = sacd.ResourceType
22364	}
22365	return json.Marshal(objectMap)
22366}
22367
22368// AsExistingStorageAccount is the BasicStorageAccountCustomDetails implementation for StorageAccountCustomDetails.
22369func (sacd StorageAccountCustomDetails) AsExistingStorageAccount() (*ExistingStorageAccount, bool) {
22370	return nil, false
22371}
22372
22373// AsStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for StorageAccountCustomDetails.
22374func (sacd StorageAccountCustomDetails) AsStorageAccountCustomDetails() (*StorageAccountCustomDetails, bool) {
22375	return &sacd, true
22376}
22377
22378// AsBasicStorageAccountCustomDetails is the BasicStorageAccountCustomDetails implementation for StorageAccountCustomDetails.
22379func (sacd StorageAccountCustomDetails) AsBasicStorageAccountCustomDetails() (BasicStorageAccountCustomDetails, bool) {
22380	return &sacd, true
22381}
22382
22383// StorageClassification storage object definition.
22384type StorageClassification struct {
22385	autorest.Response `json:"-"`
22386	// Properties - Properties of the storage object.
22387	Properties *StorageClassificationProperties `json:"properties,omitempty"`
22388	// ID - READ-ONLY; Resource Id
22389	ID *string `json:"id,omitempty"`
22390	// Name - READ-ONLY; Resource Name
22391	Name *string `json:"name,omitempty"`
22392	// Type - READ-ONLY; Resource Type
22393	Type *string `json:"type,omitempty"`
22394	// Location - Resource Location
22395	Location *string `json:"location,omitempty"`
22396}
22397
22398// MarshalJSON is the custom marshaler for StorageClassification.
22399func (sc StorageClassification) MarshalJSON() ([]byte, error) {
22400	objectMap := make(map[string]interface{})
22401	if sc.Properties != nil {
22402		objectMap["properties"] = sc.Properties
22403	}
22404	if sc.Location != nil {
22405		objectMap["location"] = sc.Location
22406	}
22407	return json.Marshal(objectMap)
22408}
22409
22410// StorageClassificationCollection collection of storage details.
22411type StorageClassificationCollection struct {
22412	autorest.Response `json:"-"`
22413	// Value - The storage details.
22414	Value *[]StorageClassification `json:"value,omitempty"`
22415	// NextLink - The value of next link.
22416	NextLink *string `json:"nextLink,omitempty"`
22417}
22418
22419// StorageClassificationCollectionIterator provides access to a complete listing of StorageClassification
22420// values.
22421type StorageClassificationCollectionIterator struct {
22422	i    int
22423	page StorageClassificationCollectionPage
22424}
22425
22426// NextWithContext advances to the next value.  If there was an error making
22427// the request the iterator does not advance and the error is returned.
22428func (iter *StorageClassificationCollectionIterator) NextWithContext(ctx context.Context) (err error) {
22429	if tracing.IsEnabled() {
22430		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationCollectionIterator.NextWithContext")
22431		defer func() {
22432			sc := -1
22433			if iter.Response().Response.Response != nil {
22434				sc = iter.Response().Response.Response.StatusCode
22435			}
22436			tracing.EndSpan(ctx, sc, err)
22437		}()
22438	}
22439	iter.i++
22440	if iter.i < len(iter.page.Values()) {
22441		return nil
22442	}
22443	err = iter.page.NextWithContext(ctx)
22444	if err != nil {
22445		iter.i--
22446		return err
22447	}
22448	iter.i = 0
22449	return nil
22450}
22451
22452// Next advances to the next value.  If there was an error making
22453// the request the iterator does not advance and the error is returned.
22454// Deprecated: Use NextWithContext() instead.
22455func (iter *StorageClassificationCollectionIterator) Next() error {
22456	return iter.NextWithContext(context.Background())
22457}
22458
22459// NotDone returns true if the enumeration should be started or is not yet complete.
22460func (iter StorageClassificationCollectionIterator) NotDone() bool {
22461	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22462}
22463
22464// Response returns the raw server response from the last page request.
22465func (iter StorageClassificationCollectionIterator) Response() StorageClassificationCollection {
22466	return iter.page.Response()
22467}
22468
22469// Value returns the current value or a zero-initialized value if the
22470// iterator has advanced beyond the end of the collection.
22471func (iter StorageClassificationCollectionIterator) Value() StorageClassification {
22472	if !iter.page.NotDone() {
22473		return StorageClassification{}
22474	}
22475	return iter.page.Values()[iter.i]
22476}
22477
22478// Creates a new instance of the StorageClassificationCollectionIterator type.
22479func NewStorageClassificationCollectionIterator(page StorageClassificationCollectionPage) StorageClassificationCollectionIterator {
22480	return StorageClassificationCollectionIterator{page: page}
22481}
22482
22483// IsEmpty returns true if the ListResult contains no values.
22484func (scc StorageClassificationCollection) IsEmpty() bool {
22485	return scc.Value == nil || len(*scc.Value) == 0
22486}
22487
22488// hasNextLink returns true if the NextLink is not empty.
22489func (scc StorageClassificationCollection) hasNextLink() bool {
22490	return scc.NextLink != nil && len(*scc.NextLink) != 0
22491}
22492
22493// storageClassificationCollectionPreparer prepares a request to retrieve the next set of results.
22494// It returns nil if no more results exist.
22495func (scc StorageClassificationCollection) storageClassificationCollectionPreparer(ctx context.Context) (*http.Request, error) {
22496	if !scc.hasNextLink() {
22497		return nil, nil
22498	}
22499	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22500		autorest.AsJSON(),
22501		autorest.AsGet(),
22502		autorest.WithBaseURL(to.String(scc.NextLink)))
22503}
22504
22505// StorageClassificationCollectionPage contains a page of StorageClassification values.
22506type StorageClassificationCollectionPage struct {
22507	fn  func(context.Context, StorageClassificationCollection) (StorageClassificationCollection, error)
22508	scc StorageClassificationCollection
22509}
22510
22511// NextWithContext advances to the next page of values.  If there was an error making
22512// the request the page does not advance and the error is returned.
22513func (page *StorageClassificationCollectionPage) NextWithContext(ctx context.Context) (err error) {
22514	if tracing.IsEnabled() {
22515		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationCollectionPage.NextWithContext")
22516		defer func() {
22517			sc := -1
22518			if page.Response().Response.Response != nil {
22519				sc = page.Response().Response.Response.StatusCode
22520			}
22521			tracing.EndSpan(ctx, sc, err)
22522		}()
22523	}
22524	for {
22525		next, err := page.fn(ctx, page.scc)
22526		if err != nil {
22527			return err
22528		}
22529		page.scc = next
22530		if !next.hasNextLink() || !next.IsEmpty() {
22531			break
22532		}
22533	}
22534	return nil
22535}
22536
22537// Next advances to the next page of values.  If there was an error making
22538// the request the page does not advance and the error is returned.
22539// Deprecated: Use NextWithContext() instead.
22540func (page *StorageClassificationCollectionPage) Next() error {
22541	return page.NextWithContext(context.Background())
22542}
22543
22544// NotDone returns true if the page enumeration should be started or is not yet complete.
22545func (page StorageClassificationCollectionPage) NotDone() bool {
22546	return !page.scc.IsEmpty()
22547}
22548
22549// Response returns the raw server response from the last page request.
22550func (page StorageClassificationCollectionPage) Response() StorageClassificationCollection {
22551	return page.scc
22552}
22553
22554// Values returns the slice of values for the current page or nil if there are no values.
22555func (page StorageClassificationCollectionPage) Values() []StorageClassification {
22556	if page.scc.IsEmpty() {
22557		return nil
22558	}
22559	return *page.scc.Value
22560}
22561
22562// Creates a new instance of the StorageClassificationCollectionPage type.
22563func NewStorageClassificationCollectionPage(cur StorageClassificationCollection, getNextPage func(context.Context, StorageClassificationCollection) (StorageClassificationCollection, error)) StorageClassificationCollectionPage {
22564	return StorageClassificationCollectionPage{
22565		fn:  getNextPage,
22566		scc: cur,
22567	}
22568}
22569
22570// StorageClassificationMapping storage mapping object.
22571type StorageClassificationMapping struct {
22572	autorest.Response `json:"-"`
22573	// Properties - Properties of the storage mapping object.
22574	Properties *StorageClassificationMappingProperties `json:"properties,omitempty"`
22575	// ID - READ-ONLY; Resource Id
22576	ID *string `json:"id,omitempty"`
22577	// Name - READ-ONLY; Resource Name
22578	Name *string `json:"name,omitempty"`
22579	// Type - READ-ONLY; Resource Type
22580	Type *string `json:"type,omitempty"`
22581	// Location - Resource Location
22582	Location *string `json:"location,omitempty"`
22583}
22584
22585// MarshalJSON is the custom marshaler for StorageClassificationMapping.
22586func (scm StorageClassificationMapping) MarshalJSON() ([]byte, error) {
22587	objectMap := make(map[string]interface{})
22588	if scm.Properties != nil {
22589		objectMap["properties"] = scm.Properties
22590	}
22591	if scm.Location != nil {
22592		objectMap["location"] = scm.Location
22593	}
22594	return json.Marshal(objectMap)
22595}
22596
22597// StorageClassificationMappingCollection collection of storage mapping details.
22598type StorageClassificationMappingCollection struct {
22599	autorest.Response `json:"-"`
22600	// Value - The storage details.
22601	Value *[]StorageClassificationMapping `json:"value,omitempty"`
22602	// NextLink - The value of next link.
22603	NextLink *string `json:"nextLink,omitempty"`
22604}
22605
22606// StorageClassificationMappingCollectionIterator provides access to a complete listing of
22607// StorageClassificationMapping values.
22608type StorageClassificationMappingCollectionIterator struct {
22609	i    int
22610	page StorageClassificationMappingCollectionPage
22611}
22612
22613// NextWithContext advances to the next value.  If there was an error making
22614// the request the iterator does not advance and the error is returned.
22615func (iter *StorageClassificationMappingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
22616	if tracing.IsEnabled() {
22617		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationMappingCollectionIterator.NextWithContext")
22618		defer func() {
22619			sc := -1
22620			if iter.Response().Response.Response != nil {
22621				sc = iter.Response().Response.Response.StatusCode
22622			}
22623			tracing.EndSpan(ctx, sc, err)
22624		}()
22625	}
22626	iter.i++
22627	if iter.i < len(iter.page.Values()) {
22628		return nil
22629	}
22630	err = iter.page.NextWithContext(ctx)
22631	if err != nil {
22632		iter.i--
22633		return err
22634	}
22635	iter.i = 0
22636	return nil
22637}
22638
22639// Next advances to the next value.  If there was an error making
22640// the request the iterator does not advance and the error is returned.
22641// Deprecated: Use NextWithContext() instead.
22642func (iter *StorageClassificationMappingCollectionIterator) Next() error {
22643	return iter.NextWithContext(context.Background())
22644}
22645
22646// NotDone returns true if the enumeration should be started or is not yet complete.
22647func (iter StorageClassificationMappingCollectionIterator) NotDone() bool {
22648	return iter.page.NotDone() && iter.i < len(iter.page.Values())
22649}
22650
22651// Response returns the raw server response from the last page request.
22652func (iter StorageClassificationMappingCollectionIterator) Response() StorageClassificationMappingCollection {
22653	return iter.page.Response()
22654}
22655
22656// Value returns the current value or a zero-initialized value if the
22657// iterator has advanced beyond the end of the collection.
22658func (iter StorageClassificationMappingCollectionIterator) Value() StorageClassificationMapping {
22659	if !iter.page.NotDone() {
22660		return StorageClassificationMapping{}
22661	}
22662	return iter.page.Values()[iter.i]
22663}
22664
22665// Creates a new instance of the StorageClassificationMappingCollectionIterator type.
22666func NewStorageClassificationMappingCollectionIterator(page StorageClassificationMappingCollectionPage) StorageClassificationMappingCollectionIterator {
22667	return StorageClassificationMappingCollectionIterator{page: page}
22668}
22669
22670// IsEmpty returns true if the ListResult contains no values.
22671func (scmc StorageClassificationMappingCollection) IsEmpty() bool {
22672	return scmc.Value == nil || len(*scmc.Value) == 0
22673}
22674
22675// hasNextLink returns true if the NextLink is not empty.
22676func (scmc StorageClassificationMappingCollection) hasNextLink() bool {
22677	return scmc.NextLink != nil && len(*scmc.NextLink) != 0
22678}
22679
22680// storageClassificationMappingCollectionPreparer prepares a request to retrieve the next set of results.
22681// It returns nil if no more results exist.
22682func (scmc StorageClassificationMappingCollection) storageClassificationMappingCollectionPreparer(ctx context.Context) (*http.Request, error) {
22683	if !scmc.hasNextLink() {
22684		return nil, nil
22685	}
22686	return autorest.Prepare((&http.Request{}).WithContext(ctx),
22687		autorest.AsJSON(),
22688		autorest.AsGet(),
22689		autorest.WithBaseURL(to.String(scmc.NextLink)))
22690}
22691
22692// StorageClassificationMappingCollectionPage contains a page of StorageClassificationMapping values.
22693type StorageClassificationMappingCollectionPage struct {
22694	fn   func(context.Context, StorageClassificationMappingCollection) (StorageClassificationMappingCollection, error)
22695	scmc StorageClassificationMappingCollection
22696}
22697
22698// NextWithContext advances to the next page of values.  If there was an error making
22699// the request the page does not advance and the error is returned.
22700func (page *StorageClassificationMappingCollectionPage) NextWithContext(ctx context.Context) (err error) {
22701	if tracing.IsEnabled() {
22702		ctx = tracing.StartSpan(ctx, fqdn+"/StorageClassificationMappingCollectionPage.NextWithContext")
22703		defer func() {
22704			sc := -1
22705			if page.Response().Response.Response != nil {
22706				sc = page.Response().Response.Response.StatusCode
22707			}
22708			tracing.EndSpan(ctx, sc, err)
22709		}()
22710	}
22711	for {
22712		next, err := page.fn(ctx, page.scmc)
22713		if err != nil {
22714			return err
22715		}
22716		page.scmc = next
22717		if !next.hasNextLink() || !next.IsEmpty() {
22718			break
22719		}
22720	}
22721	return nil
22722}
22723
22724// Next advances to the next page of values.  If there was an error making
22725// the request the page does not advance and the error is returned.
22726// Deprecated: Use NextWithContext() instead.
22727func (page *StorageClassificationMappingCollectionPage) Next() error {
22728	return page.NextWithContext(context.Background())
22729}
22730
22731// NotDone returns true if the page enumeration should be started or is not yet complete.
22732func (page StorageClassificationMappingCollectionPage) NotDone() bool {
22733	return !page.scmc.IsEmpty()
22734}
22735
22736// Response returns the raw server response from the last page request.
22737func (page StorageClassificationMappingCollectionPage) Response() StorageClassificationMappingCollection {
22738	return page.scmc
22739}
22740
22741// Values returns the slice of values for the current page or nil if there are no values.
22742func (page StorageClassificationMappingCollectionPage) Values() []StorageClassificationMapping {
22743	if page.scmc.IsEmpty() {
22744		return nil
22745	}
22746	return *page.scmc.Value
22747}
22748
22749// Creates a new instance of the StorageClassificationMappingCollectionPage type.
22750func NewStorageClassificationMappingCollectionPage(cur StorageClassificationMappingCollection, getNextPage func(context.Context, StorageClassificationMappingCollection) (StorageClassificationMappingCollection, error)) StorageClassificationMappingCollectionPage {
22751	return StorageClassificationMappingCollectionPage{
22752		fn:   getNextPage,
22753		scmc: cur,
22754	}
22755}
22756
22757// StorageClassificationMappingInput storage mapping input.
22758type StorageClassificationMappingInput struct {
22759	// Properties - Storage mapping input properties.
22760	Properties *StorageMappingInputProperties `json:"properties,omitempty"`
22761}
22762
22763// StorageClassificationMappingProperties storage mapping properties.
22764type StorageClassificationMappingProperties struct {
22765	// TargetStorageClassificationID - Target storage object Id.
22766	TargetStorageClassificationID *string `json:"targetStorageClassificationId,omitempty"`
22767}
22768
22769// StorageClassificationProperties storage object properties.
22770type StorageClassificationProperties struct {
22771	// FriendlyName - Friendly name of the Storage classification.
22772	FriendlyName *string `json:"friendlyName,omitempty"`
22773}
22774
22775// StorageMappingInputProperties storage mapping input properties.
22776type StorageMappingInputProperties struct {
22777	// TargetStorageClassificationID - The ID of the storage object.
22778	TargetStorageClassificationID *string `json:"targetStorageClassificationId,omitempty"`
22779}
22780
22781// Subnet subnets of the network.
22782type Subnet struct {
22783	// Name - The subnet name.
22784	Name *string `json:"name,omitempty"`
22785	// FriendlyName - The subnet friendly name.
22786	FriendlyName *string `json:"friendlyName,omitempty"`
22787	// AddressList - The list of addresses for the subnet.
22788	AddressList *[]string `json:"addressList,omitempty"`
22789}
22790
22791// SupportedOperatingSystems response object for supported operating systems API.
22792type SupportedOperatingSystems struct {
22793	autorest.Response `json:"-"`
22794	// Properties - Properties model for supported OS API.
22795	Properties *SupportedOSProperties `json:"properties,omitempty"`
22796	// ID - READ-ONLY; Resource Id
22797	ID *string `json:"id,omitempty"`
22798	// Name - READ-ONLY; Resource Name
22799	Name *string `json:"name,omitempty"`
22800	// Type - READ-ONLY; Resource Type
22801	Type *string `json:"type,omitempty"`
22802	// Location - Resource Location
22803	Location *string `json:"location,omitempty"`
22804}
22805
22806// MarshalJSON is the custom marshaler for SupportedOperatingSystems.
22807func (sos SupportedOperatingSystems) MarshalJSON() ([]byte, error) {
22808	objectMap := make(map[string]interface{})
22809	if sos.Properties != nil {
22810		objectMap["properties"] = sos.Properties
22811	}
22812	if sos.Location != nil {
22813		objectMap["location"] = sos.Location
22814	}
22815	return json.Marshal(objectMap)
22816}
22817
22818// SupportedOSDetails supported Operating system details.
22819type SupportedOSDetails struct {
22820	// OsName - The name.
22821	OsName *string `json:"osName,omitempty"`
22822	// OsType - The type.
22823	OsType *string `json:"osType,omitempty"`
22824	// OsVersions - List of version for OS.
22825	OsVersions *[]OSVersionWrapper `json:"osVersions,omitempty"`
22826}
22827
22828// SupportedOSProperties properties model for supported OS API.
22829type SupportedOSProperties struct {
22830	// SupportedOsList - The supported OS List.
22831	SupportedOsList *[]SupportedOSProperty `json:"supportedOsList,omitempty"`
22832}
22833
22834// SupportedOSProperty property object for supported OS api.
22835type SupportedOSProperty struct {
22836	// InstanceType - READ-ONLY; Gets the replication provider type.
22837	InstanceType *string `json:"instanceType,omitempty"`
22838	// SupportedOs - List of supported OS.
22839	SupportedOs *[]SupportedOSDetails `json:"supportedOs,omitempty"`
22840}
22841
22842// MarshalJSON is the custom marshaler for SupportedOSProperty.
22843func (sop SupportedOSProperty) MarshalJSON() ([]byte, error) {
22844	objectMap := make(map[string]interface{})
22845	if sop.SupportedOs != nil {
22846		objectMap["supportedOs"] = sop.SupportedOs
22847	}
22848	return json.Marshal(objectMap)
22849}
22850
22851// SwitchProtectionInput switch protection input.
22852type SwitchProtectionInput struct {
22853	// Properties - Switch protection properties
22854	Properties *SwitchProtectionInputProperties `json:"properties,omitempty"`
22855}
22856
22857// SwitchProtectionInputProperties switch protection input properties.
22858type SwitchProtectionInputProperties struct {
22859	// ReplicationProtectedItemName - The unique replication protected item name.
22860	ReplicationProtectedItemName *string `json:"replicationProtectedItemName,omitempty"`
22861	// ProviderSpecificDetails - Provider specific switch protection input.
22862	ProviderSpecificDetails BasicSwitchProtectionProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
22863}
22864
22865// UnmarshalJSON is the custom unmarshaler for SwitchProtectionInputProperties struct.
22866func (spip *SwitchProtectionInputProperties) UnmarshalJSON(body []byte) error {
22867	var m map[string]*json.RawMessage
22868	err := json.Unmarshal(body, &m)
22869	if err != nil {
22870		return err
22871	}
22872	for k, v := range m {
22873		switch k {
22874		case "replicationProtectedItemName":
22875			if v != nil {
22876				var replicationProtectedItemName string
22877				err = json.Unmarshal(*v, &replicationProtectedItemName)
22878				if err != nil {
22879					return err
22880				}
22881				spip.ReplicationProtectedItemName = &replicationProtectedItemName
22882			}
22883		case "providerSpecificDetails":
22884			if v != nil {
22885				providerSpecificDetails, err := unmarshalBasicSwitchProtectionProviderSpecificInput(*v)
22886				if err != nil {
22887					return err
22888				}
22889				spip.ProviderSpecificDetails = providerSpecificDetails
22890			}
22891		}
22892	}
22893
22894	return nil
22895}
22896
22897// SwitchProtectionJobDetails this class represents details for switch protection job.
22898type SwitchProtectionJobDetails struct {
22899	// NewReplicationProtectedItemID - ARM Id of the new replication protected item.
22900	NewReplicationProtectedItemID *string `json:"newReplicationProtectedItemId,omitempty"`
22901	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
22902	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
22903	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
22904	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
22905}
22906
22907// MarshalJSON is the custom marshaler for SwitchProtectionJobDetails.
22908func (spjd SwitchProtectionJobDetails) MarshalJSON() ([]byte, error) {
22909	spjd.InstanceType = InstanceTypeSwitchProtectionJobDetails
22910	objectMap := make(map[string]interface{})
22911	if spjd.NewReplicationProtectedItemID != nil {
22912		objectMap["newReplicationProtectedItemId"] = spjd.NewReplicationProtectedItemID
22913	}
22914	if spjd.AffectedObjectDetails != nil {
22915		objectMap["affectedObjectDetails"] = spjd.AffectedObjectDetails
22916	}
22917	if spjd.InstanceType != "" {
22918		objectMap["instanceType"] = spjd.InstanceType
22919	}
22920	return json.Marshal(objectMap)
22921}
22922
22923// AsAsrJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
22924func (spjd SwitchProtectionJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
22925	return nil, false
22926}
22927
22928// AsExportJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
22929func (spjd SwitchProtectionJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
22930	return nil, false
22931}
22932
22933// AsFailoverJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
22934func (spjd SwitchProtectionJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
22935	return nil, false
22936}
22937
22938// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
22939func (spjd SwitchProtectionJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
22940	return &spjd, true
22941}
22942
22943// AsTestFailoverJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
22944func (spjd SwitchProtectionJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
22945	return nil, false
22946}
22947
22948// AsJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
22949func (spjd SwitchProtectionJobDetails) AsJobDetails() (*JobDetails, bool) {
22950	return nil, false
22951}
22952
22953// AsBasicJobDetails is the BasicJobDetails implementation for SwitchProtectionJobDetails.
22954func (spjd SwitchProtectionJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
22955	return &spjd, true
22956}
22957
22958// BasicSwitchProtectionProviderSpecificInput provider specific switch protection input.
22959type BasicSwitchProtectionProviderSpecificInput interface {
22960	AsA2ASwitchProtectionInput() (*A2ASwitchProtectionInput, bool)
22961	AsSwitchProtectionProviderSpecificInput() (*SwitchProtectionProviderSpecificInput, bool)
22962}
22963
22964// SwitchProtectionProviderSpecificInput provider specific switch protection input.
22965type SwitchProtectionProviderSpecificInput struct {
22966	// InstanceType - Possible values include: 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeSwitchProtectionProviderSpecificInput', 'InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A'
22967	InstanceType InstanceTypeBasicSwitchProtectionProviderSpecificInput `json:"instanceType,omitempty"`
22968}
22969
22970func unmarshalBasicSwitchProtectionProviderSpecificInput(body []byte) (BasicSwitchProtectionProviderSpecificInput, error) {
22971	var m map[string]interface{}
22972	err := json.Unmarshal(body, &m)
22973	if err != nil {
22974		return nil, err
22975	}
22976
22977	switch m["instanceType"] {
22978	case string(InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeA2A):
22979		var aspi A2ASwitchProtectionInput
22980		err := json.Unmarshal(body, &aspi)
22981		return aspi, err
22982	default:
22983		var sppsi SwitchProtectionProviderSpecificInput
22984		err := json.Unmarshal(body, &sppsi)
22985		return sppsi, err
22986	}
22987}
22988func unmarshalBasicSwitchProtectionProviderSpecificInputArray(body []byte) ([]BasicSwitchProtectionProviderSpecificInput, error) {
22989	var rawMessages []*json.RawMessage
22990	err := json.Unmarshal(body, &rawMessages)
22991	if err != nil {
22992		return nil, err
22993	}
22994
22995	sppsiArray := make([]BasicSwitchProtectionProviderSpecificInput, len(rawMessages))
22996
22997	for index, rawMessage := range rawMessages {
22998		sppsi, err := unmarshalBasicSwitchProtectionProviderSpecificInput(*rawMessage)
22999		if err != nil {
23000			return nil, err
23001		}
23002		sppsiArray[index] = sppsi
23003	}
23004	return sppsiArray, nil
23005}
23006
23007// MarshalJSON is the custom marshaler for SwitchProtectionProviderSpecificInput.
23008func (sppsi SwitchProtectionProviderSpecificInput) MarshalJSON() ([]byte, error) {
23009	sppsi.InstanceType = InstanceTypeBasicSwitchProtectionProviderSpecificInputInstanceTypeSwitchProtectionProviderSpecificInput
23010	objectMap := make(map[string]interface{})
23011	if sppsi.InstanceType != "" {
23012		objectMap["instanceType"] = sppsi.InstanceType
23013	}
23014	return json.Marshal(objectMap)
23015}
23016
23017// AsA2ASwitchProtectionInput is the BasicSwitchProtectionProviderSpecificInput implementation for SwitchProtectionProviderSpecificInput.
23018func (sppsi SwitchProtectionProviderSpecificInput) AsA2ASwitchProtectionInput() (*A2ASwitchProtectionInput, bool) {
23019	return nil, false
23020}
23021
23022// AsSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for SwitchProtectionProviderSpecificInput.
23023func (sppsi SwitchProtectionProviderSpecificInput) AsSwitchProtectionProviderSpecificInput() (*SwitchProtectionProviderSpecificInput, bool) {
23024	return &sppsi, true
23025}
23026
23027// AsBasicSwitchProtectionProviderSpecificInput is the BasicSwitchProtectionProviderSpecificInput implementation for SwitchProtectionProviderSpecificInput.
23028func (sppsi SwitchProtectionProviderSpecificInput) AsBasicSwitchProtectionProviderSpecificInput() (BasicSwitchProtectionProviderSpecificInput, bool) {
23029	return &sppsi, true
23030}
23031
23032// TargetComputeSize represents applicable recovery vm sizes.
23033type TargetComputeSize struct {
23034	// ID - The Id.
23035	ID *string `json:"id,omitempty"`
23036	// Name - The name.
23037	Name *string `json:"name,omitempty"`
23038	// Type - The Type of the object.
23039	Type *string `json:"type,omitempty"`
23040	// Properties - The custom data.
23041	Properties *TargetComputeSizeProperties `json:"properties,omitempty"`
23042}
23043
23044// TargetComputeSizeCollection target compute size collection.
23045type TargetComputeSizeCollection struct {
23046	autorest.Response `json:"-"`
23047	// Value - The list of target compute sizes.
23048	Value *[]TargetComputeSize `json:"value,omitempty"`
23049	// NextLink - The value of next link.
23050	NextLink *string `json:"nextLink,omitempty"`
23051}
23052
23053// TargetComputeSizeCollectionIterator provides access to a complete listing of TargetComputeSize values.
23054type TargetComputeSizeCollectionIterator struct {
23055	i    int
23056	page TargetComputeSizeCollectionPage
23057}
23058
23059// NextWithContext advances to the next value.  If there was an error making
23060// the request the iterator does not advance and the error is returned.
23061func (iter *TargetComputeSizeCollectionIterator) NextWithContext(ctx context.Context) (err error) {
23062	if tracing.IsEnabled() {
23063		ctx = tracing.StartSpan(ctx, fqdn+"/TargetComputeSizeCollectionIterator.NextWithContext")
23064		defer func() {
23065			sc := -1
23066			if iter.Response().Response.Response != nil {
23067				sc = iter.Response().Response.Response.StatusCode
23068			}
23069			tracing.EndSpan(ctx, sc, err)
23070		}()
23071	}
23072	iter.i++
23073	if iter.i < len(iter.page.Values()) {
23074		return nil
23075	}
23076	err = iter.page.NextWithContext(ctx)
23077	if err != nil {
23078		iter.i--
23079		return err
23080	}
23081	iter.i = 0
23082	return nil
23083}
23084
23085// Next advances to the next value.  If there was an error making
23086// the request the iterator does not advance and the error is returned.
23087// Deprecated: Use NextWithContext() instead.
23088func (iter *TargetComputeSizeCollectionIterator) Next() error {
23089	return iter.NextWithContext(context.Background())
23090}
23091
23092// NotDone returns true if the enumeration should be started or is not yet complete.
23093func (iter TargetComputeSizeCollectionIterator) NotDone() bool {
23094	return iter.page.NotDone() && iter.i < len(iter.page.Values())
23095}
23096
23097// Response returns the raw server response from the last page request.
23098func (iter TargetComputeSizeCollectionIterator) Response() TargetComputeSizeCollection {
23099	return iter.page.Response()
23100}
23101
23102// Value returns the current value or a zero-initialized value if the
23103// iterator has advanced beyond the end of the collection.
23104func (iter TargetComputeSizeCollectionIterator) Value() TargetComputeSize {
23105	if !iter.page.NotDone() {
23106		return TargetComputeSize{}
23107	}
23108	return iter.page.Values()[iter.i]
23109}
23110
23111// Creates a new instance of the TargetComputeSizeCollectionIterator type.
23112func NewTargetComputeSizeCollectionIterator(page TargetComputeSizeCollectionPage) TargetComputeSizeCollectionIterator {
23113	return TargetComputeSizeCollectionIterator{page: page}
23114}
23115
23116// IsEmpty returns true if the ListResult contains no values.
23117func (tcsc TargetComputeSizeCollection) IsEmpty() bool {
23118	return tcsc.Value == nil || len(*tcsc.Value) == 0
23119}
23120
23121// hasNextLink returns true if the NextLink is not empty.
23122func (tcsc TargetComputeSizeCollection) hasNextLink() bool {
23123	return tcsc.NextLink != nil && len(*tcsc.NextLink) != 0
23124}
23125
23126// targetComputeSizeCollectionPreparer prepares a request to retrieve the next set of results.
23127// It returns nil if no more results exist.
23128func (tcsc TargetComputeSizeCollection) targetComputeSizeCollectionPreparer(ctx context.Context) (*http.Request, error) {
23129	if !tcsc.hasNextLink() {
23130		return nil, nil
23131	}
23132	return autorest.Prepare((&http.Request{}).WithContext(ctx),
23133		autorest.AsJSON(),
23134		autorest.AsGet(),
23135		autorest.WithBaseURL(to.String(tcsc.NextLink)))
23136}
23137
23138// TargetComputeSizeCollectionPage contains a page of TargetComputeSize values.
23139type TargetComputeSizeCollectionPage struct {
23140	fn   func(context.Context, TargetComputeSizeCollection) (TargetComputeSizeCollection, error)
23141	tcsc TargetComputeSizeCollection
23142}
23143
23144// NextWithContext advances to the next page of values.  If there was an error making
23145// the request the page does not advance and the error is returned.
23146func (page *TargetComputeSizeCollectionPage) NextWithContext(ctx context.Context) (err error) {
23147	if tracing.IsEnabled() {
23148		ctx = tracing.StartSpan(ctx, fqdn+"/TargetComputeSizeCollectionPage.NextWithContext")
23149		defer func() {
23150			sc := -1
23151			if page.Response().Response.Response != nil {
23152				sc = page.Response().Response.Response.StatusCode
23153			}
23154			tracing.EndSpan(ctx, sc, err)
23155		}()
23156	}
23157	for {
23158		next, err := page.fn(ctx, page.tcsc)
23159		if err != nil {
23160			return err
23161		}
23162		page.tcsc = next
23163		if !next.hasNextLink() || !next.IsEmpty() {
23164			break
23165		}
23166	}
23167	return nil
23168}
23169
23170// Next advances to the next page of values.  If there was an error making
23171// the request the page does not advance and the error is returned.
23172// Deprecated: Use NextWithContext() instead.
23173func (page *TargetComputeSizeCollectionPage) Next() error {
23174	return page.NextWithContext(context.Background())
23175}
23176
23177// NotDone returns true if the page enumeration should be started or is not yet complete.
23178func (page TargetComputeSizeCollectionPage) NotDone() bool {
23179	return !page.tcsc.IsEmpty()
23180}
23181
23182// Response returns the raw server response from the last page request.
23183func (page TargetComputeSizeCollectionPage) Response() TargetComputeSizeCollection {
23184	return page.tcsc
23185}
23186
23187// Values returns the slice of values for the current page or nil if there are no values.
23188func (page TargetComputeSizeCollectionPage) Values() []TargetComputeSize {
23189	if page.tcsc.IsEmpty() {
23190		return nil
23191	}
23192	return *page.tcsc.Value
23193}
23194
23195// Creates a new instance of the TargetComputeSizeCollectionPage type.
23196func NewTargetComputeSizeCollectionPage(cur TargetComputeSizeCollection, getNextPage func(context.Context, TargetComputeSizeCollection) (TargetComputeSizeCollection, error)) TargetComputeSizeCollectionPage {
23197	return TargetComputeSizeCollectionPage{
23198		fn:   getNextPage,
23199		tcsc: cur,
23200	}
23201}
23202
23203// TargetComputeSizeProperties represents applicable recovery vm sizes properties.
23204type TargetComputeSizeProperties struct {
23205	// Name - Target compute size name.
23206	Name *string `json:"name,omitempty"`
23207	// FriendlyName - Target compute size display name.
23208	FriendlyName *string `json:"friendlyName,omitempty"`
23209	// CPUCoresCount - The maximum cpu cores count supported by target compute size.
23210	CPUCoresCount *int32 `json:"cpuCoresCount,omitempty"`
23211	// VCPUsAvailable - READ-ONLY; The Available vCPUs supported by target compute size.
23212	VCPUsAvailable *int32 `json:"vCPUsAvailable,omitempty"`
23213	// MemoryInGB - The maximum memory in GB supported by target compute size.
23214	MemoryInGB *float64 `json:"memoryInGB,omitempty"`
23215	// MaxDataDiskCount - The maximum data disks count supported by target compute size.
23216	MaxDataDiskCount *int32 `json:"maxDataDiskCount,omitempty"`
23217	// MaxNicsCount - The maximum Nics count supported by target compute size.
23218	MaxNicsCount *int32 `json:"maxNicsCount,omitempty"`
23219	// Errors - The reasons why the target compute size is not applicable for the protected item.
23220	Errors *[]ComputeSizeErrorDetails `json:"errors,omitempty"`
23221	// HighIopsSupported - The value indicating whether the target compute size supports high Iops.
23222	HighIopsSupported *string `json:"highIopsSupported,omitempty"`
23223	// HyperVGenerations - READ-ONLY; The supported HyperV Generations.
23224	HyperVGenerations *[]string `json:"hyperVGenerations,omitempty"`
23225}
23226
23227// MarshalJSON is the custom marshaler for TargetComputeSizeProperties.
23228func (tcsp TargetComputeSizeProperties) MarshalJSON() ([]byte, error) {
23229	objectMap := make(map[string]interface{})
23230	if tcsp.Name != nil {
23231		objectMap["name"] = tcsp.Name
23232	}
23233	if tcsp.FriendlyName != nil {
23234		objectMap["friendlyName"] = tcsp.FriendlyName
23235	}
23236	if tcsp.CPUCoresCount != nil {
23237		objectMap["cpuCoresCount"] = tcsp.CPUCoresCount
23238	}
23239	if tcsp.MemoryInGB != nil {
23240		objectMap["memoryInGB"] = tcsp.MemoryInGB
23241	}
23242	if tcsp.MaxDataDiskCount != nil {
23243		objectMap["maxDataDiskCount"] = tcsp.MaxDataDiskCount
23244	}
23245	if tcsp.MaxNicsCount != nil {
23246		objectMap["maxNicsCount"] = tcsp.MaxNicsCount
23247	}
23248	if tcsp.Errors != nil {
23249		objectMap["errors"] = tcsp.Errors
23250	}
23251	if tcsp.HighIopsSupported != nil {
23252		objectMap["highIopsSupported"] = tcsp.HighIopsSupported
23253	}
23254	return json.Marshal(objectMap)
23255}
23256
23257// BasicTaskTypeDetails task details based on specific task type.
23258type BasicTaskTypeDetails interface {
23259	AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool)
23260	AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool)
23261	AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool)
23262	AsJobTaskDetails() (*JobTaskDetails, bool)
23263	AsManualActionTaskDetails() (*ManualActionTaskDetails, bool)
23264	AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool)
23265	AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool)
23266	AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool)
23267	AsTaskTypeDetails() (*TaskTypeDetails, bool)
23268}
23269
23270// TaskTypeDetails task details based on specific task type.
23271type TaskTypeDetails struct {
23272	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
23273	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
23274}
23275
23276func unmarshalBasicTaskTypeDetails(body []byte) (BasicTaskTypeDetails, error) {
23277	var m map[string]interface{}
23278	err := json.Unmarshal(body, &m)
23279	if err != nil {
23280		return nil, err
23281	}
23282
23283	switch m["instanceType"] {
23284	case string(InstanceTypeAutomationRunbookTaskDetails):
23285		var artd AutomationRunbookTaskDetails
23286		err := json.Unmarshal(body, &artd)
23287		return artd, err
23288	case string(InstanceTypeConsistencyCheckTaskDetails):
23289		var cctd ConsistencyCheckTaskDetails
23290		err := json.Unmarshal(body, &cctd)
23291		return cctd, err
23292	case string(InstanceTypeFabricReplicationGroupTaskDetails):
23293		var frgtd FabricReplicationGroupTaskDetails
23294		err := json.Unmarshal(body, &frgtd)
23295		return frgtd, err
23296	case string(InstanceTypeJobTaskDetails):
23297		var jtd JobTaskDetails
23298		err := json.Unmarshal(body, &jtd)
23299		return jtd, err
23300	case string(InstanceTypeManualActionTaskDetails):
23301		var matd ManualActionTaskDetails
23302		err := json.Unmarshal(body, &matd)
23303		return matd, err
23304	case string(InstanceTypeScriptActionTaskDetails):
23305		var satd ScriptActionTaskDetails
23306		err := json.Unmarshal(body, &satd)
23307		return satd, err
23308	case string(InstanceTypeVirtualMachineTaskDetails):
23309		var vmtd VirtualMachineTaskDetails
23310		err := json.Unmarshal(body, &vmtd)
23311		return vmtd, err
23312	case string(InstanceTypeVMNicUpdatesTaskDetails):
23313		var vnutd VMNicUpdatesTaskDetails
23314		err := json.Unmarshal(body, &vnutd)
23315		return vnutd, err
23316	default:
23317		var ttd TaskTypeDetails
23318		err := json.Unmarshal(body, &ttd)
23319		return ttd, err
23320	}
23321}
23322func unmarshalBasicTaskTypeDetailsArray(body []byte) ([]BasicTaskTypeDetails, error) {
23323	var rawMessages []*json.RawMessage
23324	err := json.Unmarshal(body, &rawMessages)
23325	if err != nil {
23326		return nil, err
23327	}
23328
23329	ttdArray := make([]BasicTaskTypeDetails, len(rawMessages))
23330
23331	for index, rawMessage := range rawMessages {
23332		ttd, err := unmarshalBasicTaskTypeDetails(*rawMessage)
23333		if err != nil {
23334			return nil, err
23335		}
23336		ttdArray[index] = ttd
23337	}
23338	return ttdArray, nil
23339}
23340
23341// MarshalJSON is the custom marshaler for TaskTypeDetails.
23342func (ttd TaskTypeDetails) MarshalJSON() ([]byte, error) {
23343	ttd.InstanceType = InstanceTypeTaskTypeDetails
23344	objectMap := make(map[string]interface{})
23345	if ttd.InstanceType != "" {
23346		objectMap["instanceType"] = ttd.InstanceType
23347	}
23348	return json.Marshal(objectMap)
23349}
23350
23351// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23352func (ttd TaskTypeDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
23353	return nil, false
23354}
23355
23356// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23357func (ttd TaskTypeDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
23358	return nil, false
23359}
23360
23361// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23362func (ttd TaskTypeDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
23363	return nil, false
23364}
23365
23366// AsJobTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23367func (ttd TaskTypeDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
23368	return nil, false
23369}
23370
23371// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23372func (ttd TaskTypeDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
23373	return nil, false
23374}
23375
23376// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23377func (ttd TaskTypeDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
23378	return nil, false
23379}
23380
23381// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23382func (ttd TaskTypeDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
23383	return nil, false
23384}
23385
23386// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23387func (ttd TaskTypeDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
23388	return nil, false
23389}
23390
23391// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23392func (ttd TaskTypeDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
23393	return &ttd, true
23394}
23395
23396// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for TaskTypeDetails.
23397func (ttd TaskTypeDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
23398	return &ttd, true
23399}
23400
23401// TestFailoverCleanupInput input definition for test failover cleanup.
23402type TestFailoverCleanupInput struct {
23403	// Properties - Test failover cleanup input properties.
23404	Properties *TestFailoverCleanupInputProperties `json:"properties,omitempty"`
23405}
23406
23407// TestFailoverCleanupInputProperties input definition for test failover cleanup input properties.
23408type TestFailoverCleanupInputProperties struct {
23409	// Comments - Test failover cleanup comments.
23410	Comments *string `json:"comments,omitempty"`
23411}
23412
23413// TestFailoverInput input definition for test failover.
23414type TestFailoverInput struct {
23415	// Properties - test failover input properties
23416	Properties *TestFailoverInputProperties `json:"properties,omitempty"`
23417}
23418
23419// TestFailoverInputProperties input definition for test failover input properties.
23420type TestFailoverInputProperties struct {
23421	// FailoverDirection - Test failover direction.
23422	FailoverDirection *string `json:"failoverDirection,omitempty"`
23423	// NetworkType - Network type to be used for test failover.
23424	NetworkType *string `json:"networkType,omitempty"`
23425	// NetworkID - The id of the network to be used for test failover
23426	NetworkID *string `json:"networkId,omitempty"`
23427	// SkipTestFailoverCleanup - A value indicating whether the test failover cleanup is to be skipped.
23428	SkipTestFailoverCleanup *string `json:"skipTestFailoverCleanup,omitempty"`
23429	// ProviderSpecificDetails - Provider specific settings
23430	ProviderSpecificDetails BasicTestFailoverProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
23431}
23432
23433// UnmarshalJSON is the custom unmarshaler for TestFailoverInputProperties struct.
23434func (tfip *TestFailoverInputProperties) UnmarshalJSON(body []byte) error {
23435	var m map[string]*json.RawMessage
23436	err := json.Unmarshal(body, &m)
23437	if err != nil {
23438		return err
23439	}
23440	for k, v := range m {
23441		switch k {
23442		case "failoverDirection":
23443			if v != nil {
23444				var failoverDirection string
23445				err = json.Unmarshal(*v, &failoverDirection)
23446				if err != nil {
23447					return err
23448				}
23449				tfip.FailoverDirection = &failoverDirection
23450			}
23451		case "networkType":
23452			if v != nil {
23453				var networkType string
23454				err = json.Unmarshal(*v, &networkType)
23455				if err != nil {
23456					return err
23457				}
23458				tfip.NetworkType = &networkType
23459			}
23460		case "networkId":
23461			if v != nil {
23462				var networkID string
23463				err = json.Unmarshal(*v, &networkID)
23464				if err != nil {
23465					return err
23466				}
23467				tfip.NetworkID = &networkID
23468			}
23469		case "skipTestFailoverCleanup":
23470			if v != nil {
23471				var skipTestFailoverCleanup string
23472				err = json.Unmarshal(*v, &skipTestFailoverCleanup)
23473				if err != nil {
23474					return err
23475				}
23476				tfip.SkipTestFailoverCleanup = &skipTestFailoverCleanup
23477			}
23478		case "providerSpecificDetails":
23479			if v != nil {
23480				providerSpecificDetails, err := unmarshalBasicTestFailoverProviderSpecificInput(*v)
23481				if err != nil {
23482					return err
23483				}
23484				tfip.ProviderSpecificDetails = providerSpecificDetails
23485			}
23486		}
23487	}
23488
23489	return nil
23490}
23491
23492// TestFailoverJobDetails this class represents the details for a test failover job.
23493type TestFailoverJobDetails struct {
23494	// TestFailoverStatus - The test failover status.
23495	TestFailoverStatus *string `json:"testFailoverStatus,omitempty"`
23496	// Comments - The test failover comments.
23497	Comments *string `json:"comments,omitempty"`
23498	// NetworkName - The test network name.
23499	NetworkName *string `json:"networkName,omitempty"`
23500	// NetworkFriendlyName - The test network friendly name.
23501	NetworkFriendlyName *string `json:"networkFriendlyName,omitempty"`
23502	// NetworkType - The test network type (see TestFailoverInput enum for possible values).
23503	NetworkType *string `json:"networkType,omitempty"`
23504	// ProtectedItemDetails - The test VM details.
23505	ProtectedItemDetails *[]FailoverReplicationProtectedItemDetails `json:"protectedItemDetails,omitempty"`
23506	// AffectedObjectDetails - The affected object properties like source server, source cloud, target server, target cloud etc. based on the workflow object details.
23507	AffectedObjectDetails map[string]*string `json:"affectedObjectDetails"`
23508	// InstanceType - Possible values include: 'InstanceTypeJobDetails', 'InstanceTypeAsrJobDetails', 'InstanceTypeExportJobDetails', 'InstanceTypeFailoverJobDetails', 'InstanceTypeSwitchProtectionJobDetails', 'InstanceTypeTestFailoverJobDetails'
23509	InstanceType InstanceTypeBasicJobDetails `json:"instanceType,omitempty"`
23510}
23511
23512// MarshalJSON is the custom marshaler for TestFailoverJobDetails.
23513func (tfjd TestFailoverJobDetails) MarshalJSON() ([]byte, error) {
23514	tfjd.InstanceType = InstanceTypeTestFailoverJobDetails
23515	objectMap := make(map[string]interface{})
23516	if tfjd.TestFailoverStatus != nil {
23517		objectMap["testFailoverStatus"] = tfjd.TestFailoverStatus
23518	}
23519	if tfjd.Comments != nil {
23520		objectMap["comments"] = tfjd.Comments
23521	}
23522	if tfjd.NetworkName != nil {
23523		objectMap["networkName"] = tfjd.NetworkName
23524	}
23525	if tfjd.NetworkFriendlyName != nil {
23526		objectMap["networkFriendlyName"] = tfjd.NetworkFriendlyName
23527	}
23528	if tfjd.NetworkType != nil {
23529		objectMap["networkType"] = tfjd.NetworkType
23530	}
23531	if tfjd.ProtectedItemDetails != nil {
23532		objectMap["protectedItemDetails"] = tfjd.ProtectedItemDetails
23533	}
23534	if tfjd.AffectedObjectDetails != nil {
23535		objectMap["affectedObjectDetails"] = tfjd.AffectedObjectDetails
23536	}
23537	if tfjd.InstanceType != "" {
23538		objectMap["instanceType"] = tfjd.InstanceType
23539	}
23540	return json.Marshal(objectMap)
23541}
23542
23543// AsAsrJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
23544func (tfjd TestFailoverJobDetails) AsAsrJobDetails() (*AsrJobDetails, bool) {
23545	return nil, false
23546}
23547
23548// AsExportJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
23549func (tfjd TestFailoverJobDetails) AsExportJobDetails() (*ExportJobDetails, bool) {
23550	return nil, false
23551}
23552
23553// AsFailoverJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
23554func (tfjd TestFailoverJobDetails) AsFailoverJobDetails() (*FailoverJobDetails, bool) {
23555	return nil, false
23556}
23557
23558// AsSwitchProtectionJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
23559func (tfjd TestFailoverJobDetails) AsSwitchProtectionJobDetails() (*SwitchProtectionJobDetails, bool) {
23560	return nil, false
23561}
23562
23563// AsTestFailoverJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
23564func (tfjd TestFailoverJobDetails) AsTestFailoverJobDetails() (*TestFailoverJobDetails, bool) {
23565	return &tfjd, true
23566}
23567
23568// AsJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
23569func (tfjd TestFailoverJobDetails) AsJobDetails() (*JobDetails, bool) {
23570	return nil, false
23571}
23572
23573// AsBasicJobDetails is the BasicJobDetails implementation for TestFailoverJobDetails.
23574func (tfjd TestFailoverJobDetails) AsBasicJobDetails() (BasicJobDetails, bool) {
23575	return &tfjd, true
23576}
23577
23578// BasicTestFailoverProviderSpecificInput provider specific test failover input.
23579type BasicTestFailoverProviderSpecificInput interface {
23580	AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool)
23581	AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool)
23582	AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool)
23583	AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool)
23584	AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool)
23585	AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool)
23586}
23587
23588// TestFailoverProviderSpecificInput provider specific test failover input.
23589type TestFailoverProviderSpecificInput struct {
23590	// InstanceType - Possible values include: 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage'
23591	InstanceType InstanceTypeBasicTestFailoverProviderSpecificInput `json:"instanceType,omitempty"`
23592}
23593
23594func unmarshalBasicTestFailoverProviderSpecificInput(body []byte) (BasicTestFailoverProviderSpecificInput, error) {
23595	var m map[string]interface{}
23596	err := json.Unmarshal(body, &m)
23597	if err != nil {
23598		return nil, err
23599	}
23600
23601	switch m["instanceType"] {
23602	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeA2A):
23603		var atfi A2ATestFailoverInput
23604		err := json.Unmarshal(body, &atfi)
23605		return atfi, err
23606	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure):
23607		var hvratfi HyperVReplicaAzureTestFailoverInput
23608		err := json.Unmarshal(body, &hvratfi)
23609		return hvratfi, err
23610	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageAzureV2):
23611		var imavtfi InMageAzureV2TestFailoverInput
23612		err := json.Unmarshal(body, &imavtfi)
23613		return imavtfi, err
23614	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMageRcm):
23615		var imrtfi InMageRcmTestFailoverInput
23616		err := json.Unmarshal(body, &imrtfi)
23617		return imrtfi, err
23618	case string(InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeInMage):
23619		var imtfi InMageTestFailoverInput
23620		err := json.Unmarshal(body, &imtfi)
23621		return imtfi, err
23622	default:
23623		var tfpsi TestFailoverProviderSpecificInput
23624		err := json.Unmarshal(body, &tfpsi)
23625		return tfpsi, err
23626	}
23627}
23628func unmarshalBasicTestFailoverProviderSpecificInputArray(body []byte) ([]BasicTestFailoverProviderSpecificInput, error) {
23629	var rawMessages []*json.RawMessage
23630	err := json.Unmarshal(body, &rawMessages)
23631	if err != nil {
23632		return nil, err
23633	}
23634
23635	tfpsiArray := make([]BasicTestFailoverProviderSpecificInput, len(rawMessages))
23636
23637	for index, rawMessage := range rawMessages {
23638		tfpsi, err := unmarshalBasicTestFailoverProviderSpecificInput(*rawMessage)
23639		if err != nil {
23640			return nil, err
23641		}
23642		tfpsiArray[index] = tfpsi
23643	}
23644	return tfpsiArray, nil
23645}
23646
23647// MarshalJSON is the custom marshaler for TestFailoverProviderSpecificInput.
23648func (tfpsi TestFailoverProviderSpecificInput) MarshalJSON() ([]byte, error) {
23649	tfpsi.InstanceType = InstanceTypeBasicTestFailoverProviderSpecificInputInstanceTypeTestFailoverProviderSpecificInput
23650	objectMap := make(map[string]interface{})
23651	if tfpsi.InstanceType != "" {
23652		objectMap["instanceType"] = tfpsi.InstanceType
23653	}
23654	return json.Marshal(objectMap)
23655}
23656
23657// AsA2ATestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
23658func (tfpsi TestFailoverProviderSpecificInput) AsA2ATestFailoverInput() (*A2ATestFailoverInput, bool) {
23659	return nil, false
23660}
23661
23662// AsHyperVReplicaAzureTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
23663func (tfpsi TestFailoverProviderSpecificInput) AsHyperVReplicaAzureTestFailoverInput() (*HyperVReplicaAzureTestFailoverInput, bool) {
23664	return nil, false
23665}
23666
23667// AsInMageAzureV2TestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
23668func (tfpsi TestFailoverProviderSpecificInput) AsInMageAzureV2TestFailoverInput() (*InMageAzureV2TestFailoverInput, bool) {
23669	return nil, false
23670}
23671
23672// AsInMageRcmTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
23673func (tfpsi TestFailoverProviderSpecificInput) AsInMageRcmTestFailoverInput() (*InMageRcmTestFailoverInput, bool) {
23674	return nil, false
23675}
23676
23677// AsInMageTestFailoverInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
23678func (tfpsi TestFailoverProviderSpecificInput) AsInMageTestFailoverInput() (*InMageTestFailoverInput, bool) {
23679	return nil, false
23680}
23681
23682// AsTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
23683func (tfpsi TestFailoverProviderSpecificInput) AsTestFailoverProviderSpecificInput() (*TestFailoverProviderSpecificInput, bool) {
23684	return &tfpsi, true
23685}
23686
23687// AsBasicTestFailoverProviderSpecificInput is the BasicTestFailoverProviderSpecificInput implementation for TestFailoverProviderSpecificInput.
23688func (tfpsi TestFailoverProviderSpecificInput) AsBasicTestFailoverProviderSpecificInput() (BasicTestFailoverProviderSpecificInput, bool) {
23689	return &tfpsi, true
23690}
23691
23692// TestMigrateCleanupInput input for test migrate cleanup.
23693type TestMigrateCleanupInput struct {
23694	// Properties - Test migrate cleanup input properties.
23695	Properties *TestMigrateCleanupInputProperties `json:"properties,omitempty"`
23696}
23697
23698// TestMigrateCleanupInputProperties test migrate cleanup input properties.
23699type TestMigrateCleanupInputProperties struct {
23700	// Comments - Test migrate cleanup comments.
23701	Comments *string `json:"comments,omitempty"`
23702}
23703
23704// TestMigrateInput input for test migrate.
23705type TestMigrateInput struct {
23706	// Properties - Test migrate input properties.
23707	Properties *TestMigrateInputProperties `json:"properties,omitempty"`
23708}
23709
23710// TestMigrateInputProperties test migrate input properties.
23711type TestMigrateInputProperties struct {
23712	// ProviderSpecificDetails - The provider specific details.
23713	ProviderSpecificDetails BasicTestMigrateProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
23714}
23715
23716// UnmarshalJSON is the custom unmarshaler for TestMigrateInputProperties struct.
23717func (tmip *TestMigrateInputProperties) UnmarshalJSON(body []byte) error {
23718	var m map[string]*json.RawMessage
23719	err := json.Unmarshal(body, &m)
23720	if err != nil {
23721		return err
23722	}
23723	for k, v := range m {
23724		switch k {
23725		case "providerSpecificDetails":
23726			if v != nil {
23727				providerSpecificDetails, err := unmarshalBasicTestMigrateProviderSpecificInput(*v)
23728				if err != nil {
23729					return err
23730				}
23731				tmip.ProviderSpecificDetails = providerSpecificDetails
23732			}
23733		}
23734	}
23735
23736	return nil
23737}
23738
23739// BasicTestMigrateProviderSpecificInput test migrate provider specific input.
23740type BasicTestMigrateProviderSpecificInput interface {
23741	AsVMwareCbtTestMigrateInput() (*VMwareCbtTestMigrateInput, bool)
23742	AsTestMigrateProviderSpecificInput() (*TestMigrateProviderSpecificInput, bool)
23743}
23744
23745// TestMigrateProviderSpecificInput test migrate provider specific input.
23746type TestMigrateProviderSpecificInput struct {
23747	// InstanceType - Possible values include: 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeTestMigrateProviderSpecificInput', 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt'
23748	InstanceType InstanceTypeBasicTestMigrateProviderSpecificInput `json:"instanceType,omitempty"`
23749}
23750
23751func unmarshalBasicTestMigrateProviderSpecificInput(body []byte) (BasicTestMigrateProviderSpecificInput, error) {
23752	var m map[string]interface{}
23753	err := json.Unmarshal(body, &m)
23754	if err != nil {
23755		return nil, err
23756	}
23757
23758	switch m["instanceType"] {
23759	case string(InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt):
23760		var vmctmi VMwareCbtTestMigrateInput
23761		err := json.Unmarshal(body, &vmctmi)
23762		return vmctmi, err
23763	default:
23764		var tmpsi TestMigrateProviderSpecificInput
23765		err := json.Unmarshal(body, &tmpsi)
23766		return tmpsi, err
23767	}
23768}
23769func unmarshalBasicTestMigrateProviderSpecificInputArray(body []byte) ([]BasicTestMigrateProviderSpecificInput, error) {
23770	var rawMessages []*json.RawMessage
23771	err := json.Unmarshal(body, &rawMessages)
23772	if err != nil {
23773		return nil, err
23774	}
23775
23776	tmpsiArray := make([]BasicTestMigrateProviderSpecificInput, len(rawMessages))
23777
23778	for index, rawMessage := range rawMessages {
23779		tmpsi, err := unmarshalBasicTestMigrateProviderSpecificInput(*rawMessage)
23780		if err != nil {
23781			return nil, err
23782		}
23783		tmpsiArray[index] = tmpsi
23784	}
23785	return tmpsiArray, nil
23786}
23787
23788// MarshalJSON is the custom marshaler for TestMigrateProviderSpecificInput.
23789func (tmpsi TestMigrateProviderSpecificInput) MarshalJSON() ([]byte, error) {
23790	tmpsi.InstanceType = InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeTestMigrateProviderSpecificInput
23791	objectMap := make(map[string]interface{})
23792	if tmpsi.InstanceType != "" {
23793		objectMap["instanceType"] = tmpsi.InstanceType
23794	}
23795	return json.Marshal(objectMap)
23796}
23797
23798// AsVMwareCbtTestMigrateInput is the BasicTestMigrateProviderSpecificInput implementation for TestMigrateProviderSpecificInput.
23799func (tmpsi TestMigrateProviderSpecificInput) AsVMwareCbtTestMigrateInput() (*VMwareCbtTestMigrateInput, bool) {
23800	return nil, false
23801}
23802
23803// AsTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for TestMigrateProviderSpecificInput.
23804func (tmpsi TestMigrateProviderSpecificInput) AsTestMigrateProviderSpecificInput() (*TestMigrateProviderSpecificInput, bool) {
23805	return &tmpsi, true
23806}
23807
23808// AsBasicTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for TestMigrateProviderSpecificInput.
23809func (tmpsi TestMigrateProviderSpecificInput) AsBasicTestMigrateProviderSpecificInput() (BasicTestMigrateProviderSpecificInput, bool) {
23810	return &tmpsi, true
23811}
23812
23813// UnplannedFailoverInput input definition for unplanned failover.
23814type UnplannedFailoverInput struct {
23815	// Properties - Unplanned failover input properties.
23816	Properties *UnplannedFailoverInputProperties `json:"properties,omitempty"`
23817}
23818
23819// UnplannedFailoverInputProperties input definition for unplanned failover input properties.
23820type UnplannedFailoverInputProperties struct {
23821	// FailoverDirection - Failover direction.
23822	FailoverDirection *string `json:"failoverDirection,omitempty"`
23823	// SourceSiteOperations - Source site operations status
23824	SourceSiteOperations *string `json:"sourceSiteOperations,omitempty"`
23825	// ProviderSpecificDetails - Provider specific settings
23826	ProviderSpecificDetails BasicUnplannedFailoverProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
23827}
23828
23829// UnmarshalJSON is the custom unmarshaler for UnplannedFailoverInputProperties struct.
23830func (ufip *UnplannedFailoverInputProperties) UnmarshalJSON(body []byte) error {
23831	var m map[string]*json.RawMessage
23832	err := json.Unmarshal(body, &m)
23833	if err != nil {
23834		return err
23835	}
23836	for k, v := range m {
23837		switch k {
23838		case "failoverDirection":
23839			if v != nil {
23840				var failoverDirection string
23841				err = json.Unmarshal(*v, &failoverDirection)
23842				if err != nil {
23843					return err
23844				}
23845				ufip.FailoverDirection = &failoverDirection
23846			}
23847		case "sourceSiteOperations":
23848			if v != nil {
23849				var sourceSiteOperations string
23850				err = json.Unmarshal(*v, &sourceSiteOperations)
23851				if err != nil {
23852					return err
23853				}
23854				ufip.SourceSiteOperations = &sourceSiteOperations
23855			}
23856		case "providerSpecificDetails":
23857			if v != nil {
23858				providerSpecificDetails, err := unmarshalBasicUnplannedFailoverProviderSpecificInput(*v)
23859				if err != nil {
23860					return err
23861				}
23862				ufip.ProviderSpecificDetails = providerSpecificDetails
23863			}
23864		}
23865	}
23866
23867	return nil
23868}
23869
23870// BasicUnplannedFailoverProviderSpecificInput provider specific unplanned failover input.
23871type BasicUnplannedFailoverProviderSpecificInput interface {
23872	AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool)
23873	AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool)
23874	AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool)
23875	AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool)
23876	AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool)
23877	AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool)
23878}
23879
23880// UnplannedFailoverProviderSpecificInput provider specific unplanned failover input.
23881type UnplannedFailoverProviderSpecificInput struct {
23882	// InstanceType - Possible values include: 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage'
23883	InstanceType InstanceTypeBasicUnplannedFailoverProviderSpecificInput `json:"instanceType,omitempty"`
23884}
23885
23886func unmarshalBasicUnplannedFailoverProviderSpecificInput(body []byte) (BasicUnplannedFailoverProviderSpecificInput, error) {
23887	var m map[string]interface{}
23888	err := json.Unmarshal(body, &m)
23889	if err != nil {
23890		return nil, err
23891	}
23892
23893	switch m["instanceType"] {
23894	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeA2A):
23895		var aufi A2AUnplannedFailoverInput
23896		err := json.Unmarshal(body, &aufi)
23897		return aufi, err
23898	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeHyperVReplicaAzure):
23899		var hvraufi HyperVReplicaAzureUnplannedFailoverInput
23900		err := json.Unmarshal(body, &hvraufi)
23901		return hvraufi, err
23902	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageAzureV2):
23903		var imavufi InMageAzureV2UnplannedFailoverInput
23904		err := json.Unmarshal(body, &imavufi)
23905		return imavufi, err
23906	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMageRcm):
23907		var imrufi InMageRcmUnplannedFailoverInput
23908		err := json.Unmarshal(body, &imrufi)
23909		return imrufi, err
23910	case string(InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeInMage):
23911		var imufi InMageUnplannedFailoverInput
23912		err := json.Unmarshal(body, &imufi)
23913		return imufi, err
23914	default:
23915		var ufpsi UnplannedFailoverProviderSpecificInput
23916		err := json.Unmarshal(body, &ufpsi)
23917		return ufpsi, err
23918	}
23919}
23920func unmarshalBasicUnplannedFailoverProviderSpecificInputArray(body []byte) ([]BasicUnplannedFailoverProviderSpecificInput, error) {
23921	var rawMessages []*json.RawMessage
23922	err := json.Unmarshal(body, &rawMessages)
23923	if err != nil {
23924		return nil, err
23925	}
23926
23927	ufpsiArray := make([]BasicUnplannedFailoverProviderSpecificInput, len(rawMessages))
23928
23929	for index, rawMessage := range rawMessages {
23930		ufpsi, err := unmarshalBasicUnplannedFailoverProviderSpecificInput(*rawMessage)
23931		if err != nil {
23932			return nil, err
23933		}
23934		ufpsiArray[index] = ufpsi
23935	}
23936	return ufpsiArray, nil
23937}
23938
23939// MarshalJSON is the custom marshaler for UnplannedFailoverProviderSpecificInput.
23940func (ufpsi UnplannedFailoverProviderSpecificInput) MarshalJSON() ([]byte, error) {
23941	ufpsi.InstanceType = InstanceTypeBasicUnplannedFailoverProviderSpecificInputInstanceTypeUnplannedFailoverProviderSpecificInput
23942	objectMap := make(map[string]interface{})
23943	if ufpsi.InstanceType != "" {
23944		objectMap["instanceType"] = ufpsi.InstanceType
23945	}
23946	return json.Marshal(objectMap)
23947}
23948
23949// AsA2AUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
23950func (ufpsi UnplannedFailoverProviderSpecificInput) AsA2AUnplannedFailoverInput() (*A2AUnplannedFailoverInput, bool) {
23951	return nil, false
23952}
23953
23954// AsHyperVReplicaAzureUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
23955func (ufpsi UnplannedFailoverProviderSpecificInput) AsHyperVReplicaAzureUnplannedFailoverInput() (*HyperVReplicaAzureUnplannedFailoverInput, bool) {
23956	return nil, false
23957}
23958
23959// AsInMageAzureV2UnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
23960func (ufpsi UnplannedFailoverProviderSpecificInput) AsInMageAzureV2UnplannedFailoverInput() (*InMageAzureV2UnplannedFailoverInput, bool) {
23961	return nil, false
23962}
23963
23964// AsInMageRcmUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
23965func (ufpsi UnplannedFailoverProviderSpecificInput) AsInMageRcmUnplannedFailoverInput() (*InMageRcmUnplannedFailoverInput, bool) {
23966	return nil, false
23967}
23968
23969// AsInMageUnplannedFailoverInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
23970func (ufpsi UnplannedFailoverProviderSpecificInput) AsInMageUnplannedFailoverInput() (*InMageUnplannedFailoverInput, bool) {
23971	return nil, false
23972}
23973
23974// AsUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
23975func (ufpsi UnplannedFailoverProviderSpecificInput) AsUnplannedFailoverProviderSpecificInput() (*UnplannedFailoverProviderSpecificInput, bool) {
23976	return &ufpsi, true
23977}
23978
23979// AsBasicUnplannedFailoverProviderSpecificInput is the BasicUnplannedFailoverProviderSpecificInput implementation for UnplannedFailoverProviderSpecificInput.
23980func (ufpsi UnplannedFailoverProviderSpecificInput) AsBasicUnplannedFailoverProviderSpecificInput() (BasicUnplannedFailoverProviderSpecificInput, bool) {
23981	return &ufpsi, true
23982}
23983
23984// UpdateMigrationItemInput update migration item input.
23985type UpdateMigrationItemInput struct {
23986	// Properties - Update migration item input properties.
23987	Properties *UpdateMigrationItemInputProperties `json:"properties,omitempty"`
23988}
23989
23990// UpdateMigrationItemInputProperties update migration item input properties.
23991type UpdateMigrationItemInputProperties struct {
23992	// ProviderSpecificDetails - The provider specific input to update migration item.
23993	ProviderSpecificDetails BasicUpdateMigrationItemProviderSpecificInput `json:"providerSpecificDetails,omitempty"`
23994}
23995
23996// UnmarshalJSON is the custom unmarshaler for UpdateMigrationItemInputProperties struct.
23997func (umiip *UpdateMigrationItemInputProperties) UnmarshalJSON(body []byte) error {
23998	var m map[string]*json.RawMessage
23999	err := json.Unmarshal(body, &m)
24000	if err != nil {
24001		return err
24002	}
24003	for k, v := range m {
24004		switch k {
24005		case "providerSpecificDetails":
24006			if v != nil {
24007				providerSpecificDetails, err := unmarshalBasicUpdateMigrationItemProviderSpecificInput(*v)
24008				if err != nil {
24009					return err
24010				}
24011				umiip.ProviderSpecificDetails = providerSpecificDetails
24012			}
24013		}
24014	}
24015
24016	return nil
24017}
24018
24019// BasicUpdateMigrationItemProviderSpecificInput update migration item provider specific input.
24020type BasicUpdateMigrationItemProviderSpecificInput interface {
24021	AsVMwareCbtUpdateMigrationItemInput() (*VMwareCbtUpdateMigrationItemInput, bool)
24022	AsUpdateMigrationItemProviderSpecificInput() (*UpdateMigrationItemProviderSpecificInput, bool)
24023}
24024
24025// UpdateMigrationItemProviderSpecificInput update migration item provider specific input.
24026type UpdateMigrationItemProviderSpecificInput struct {
24027	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeUpdateMigrationItemProviderSpecificInput', 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt'
24028	InstanceType InstanceTypeBasicUpdateMigrationItemProviderSpecificInput `json:"instanceType,omitempty"`
24029}
24030
24031func unmarshalBasicUpdateMigrationItemProviderSpecificInput(body []byte) (BasicUpdateMigrationItemProviderSpecificInput, error) {
24032	var m map[string]interface{}
24033	err := json.Unmarshal(body, &m)
24034	if err != nil {
24035		return nil, err
24036	}
24037
24038	switch m["instanceType"] {
24039	case string(InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt):
24040		var vmcumii VMwareCbtUpdateMigrationItemInput
24041		err := json.Unmarshal(body, &vmcumii)
24042		return vmcumii, err
24043	default:
24044		var umipsi UpdateMigrationItemProviderSpecificInput
24045		err := json.Unmarshal(body, &umipsi)
24046		return umipsi, err
24047	}
24048}
24049func unmarshalBasicUpdateMigrationItemProviderSpecificInputArray(body []byte) ([]BasicUpdateMigrationItemProviderSpecificInput, error) {
24050	var rawMessages []*json.RawMessage
24051	err := json.Unmarshal(body, &rawMessages)
24052	if err != nil {
24053		return nil, err
24054	}
24055
24056	umipsiArray := make([]BasicUpdateMigrationItemProviderSpecificInput, len(rawMessages))
24057
24058	for index, rawMessage := range rawMessages {
24059		umipsi, err := unmarshalBasicUpdateMigrationItemProviderSpecificInput(*rawMessage)
24060		if err != nil {
24061			return nil, err
24062		}
24063		umipsiArray[index] = umipsi
24064	}
24065	return umipsiArray, nil
24066}
24067
24068// MarshalJSON is the custom marshaler for UpdateMigrationItemProviderSpecificInput.
24069func (umipsi UpdateMigrationItemProviderSpecificInput) MarshalJSON() ([]byte, error) {
24070	umipsi.InstanceType = InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeUpdateMigrationItemProviderSpecificInput
24071	objectMap := make(map[string]interface{})
24072	if umipsi.InstanceType != "" {
24073		objectMap["instanceType"] = umipsi.InstanceType
24074	}
24075	return json.Marshal(objectMap)
24076}
24077
24078// AsVMwareCbtUpdateMigrationItemInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for UpdateMigrationItemProviderSpecificInput.
24079func (umipsi UpdateMigrationItemProviderSpecificInput) AsVMwareCbtUpdateMigrationItemInput() (*VMwareCbtUpdateMigrationItemInput, bool) {
24080	return nil, false
24081}
24082
24083// AsUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for UpdateMigrationItemProviderSpecificInput.
24084func (umipsi UpdateMigrationItemProviderSpecificInput) AsUpdateMigrationItemProviderSpecificInput() (*UpdateMigrationItemProviderSpecificInput, bool) {
24085	return &umipsi, true
24086}
24087
24088// AsBasicUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for UpdateMigrationItemProviderSpecificInput.
24089func (umipsi UpdateMigrationItemProviderSpecificInput) AsBasicUpdateMigrationItemProviderSpecificInput() (BasicUpdateMigrationItemProviderSpecificInput, bool) {
24090	return &umipsi, true
24091}
24092
24093// UpdateMobilityServiceRequest request to update the mobility service on a protected item.
24094type UpdateMobilityServiceRequest struct {
24095	// Properties - The properties of the update mobility service request.
24096	Properties *UpdateMobilityServiceRequestProperties `json:"properties,omitempty"`
24097}
24098
24099// UpdateMobilityServiceRequestProperties the properties of an update mobility service request.
24100type UpdateMobilityServiceRequestProperties struct {
24101	// RunAsAccountID - The CS run as account Id.
24102	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
24103}
24104
24105// UpdateNetworkMappingInput update network mapping input.
24106type UpdateNetworkMappingInput struct {
24107	// Properties - The input properties needed to update network mapping.
24108	Properties *UpdateNetworkMappingInputProperties `json:"properties,omitempty"`
24109}
24110
24111// UpdateNetworkMappingInputProperties common input details for network mapping operation.
24112type UpdateNetworkMappingInputProperties struct {
24113	// RecoveryFabricName - Recovery fabric name.
24114	RecoveryFabricName *string `json:"recoveryFabricName,omitempty"`
24115	// RecoveryNetworkID - Recovery network Id.
24116	RecoveryNetworkID *string `json:"recoveryNetworkId,omitempty"`
24117	// FabricSpecificDetails - Fabrics specific input network Id.
24118	FabricSpecificDetails BasicFabricSpecificUpdateNetworkMappingInput `json:"fabricSpecificDetails,omitempty"`
24119}
24120
24121// UnmarshalJSON is the custom unmarshaler for UpdateNetworkMappingInputProperties struct.
24122func (unmip *UpdateNetworkMappingInputProperties) UnmarshalJSON(body []byte) error {
24123	var m map[string]*json.RawMessage
24124	err := json.Unmarshal(body, &m)
24125	if err != nil {
24126		return err
24127	}
24128	for k, v := range m {
24129		switch k {
24130		case "recoveryFabricName":
24131			if v != nil {
24132				var recoveryFabricName string
24133				err = json.Unmarshal(*v, &recoveryFabricName)
24134				if err != nil {
24135					return err
24136				}
24137				unmip.RecoveryFabricName = &recoveryFabricName
24138			}
24139		case "recoveryNetworkId":
24140			if v != nil {
24141				var recoveryNetworkID string
24142				err = json.Unmarshal(*v, &recoveryNetworkID)
24143				if err != nil {
24144					return err
24145				}
24146				unmip.RecoveryNetworkID = &recoveryNetworkID
24147			}
24148		case "fabricSpecificDetails":
24149			if v != nil {
24150				fabricSpecificDetails, err := unmarshalBasicFabricSpecificUpdateNetworkMappingInput(*v)
24151				if err != nil {
24152					return err
24153				}
24154				unmip.FabricSpecificDetails = fabricSpecificDetails
24155			}
24156		}
24157	}
24158
24159	return nil
24160}
24161
24162// UpdatePolicyInput update policy input.
24163type UpdatePolicyInput struct {
24164	// Properties - The ReplicationProviderSettings.
24165	Properties *UpdatePolicyInputProperties `json:"properties,omitempty"`
24166}
24167
24168// UpdatePolicyInputProperties policy update properties.
24169type UpdatePolicyInputProperties struct {
24170	// ReplicationProviderSettings - The ReplicationProviderSettings.
24171	ReplicationProviderSettings BasicPolicyProviderSpecificInput `json:"replicationProviderSettings,omitempty"`
24172}
24173
24174// UnmarshalJSON is the custom unmarshaler for UpdatePolicyInputProperties struct.
24175func (upip *UpdatePolicyInputProperties) UnmarshalJSON(body []byte) error {
24176	var m map[string]*json.RawMessage
24177	err := json.Unmarshal(body, &m)
24178	if err != nil {
24179		return err
24180	}
24181	for k, v := range m {
24182		switch k {
24183		case "replicationProviderSettings":
24184			if v != nil {
24185				replicationProviderSettings, err := unmarshalBasicPolicyProviderSpecificInput(*v)
24186				if err != nil {
24187					return err
24188				}
24189				upip.ReplicationProviderSettings = replicationProviderSettings
24190			}
24191		}
24192	}
24193
24194	return nil
24195}
24196
24197// UpdateProtectionContainerMappingInput container pairing update input.
24198type UpdateProtectionContainerMappingInput struct {
24199	// Properties - Update protection container mapping input properties.
24200	Properties *UpdateProtectionContainerMappingInputProperties `json:"properties,omitempty"`
24201}
24202
24203// UpdateProtectionContainerMappingInputProperties container pairing update input.
24204type UpdateProtectionContainerMappingInputProperties struct {
24205	// ProviderSpecificInput - Provider specific input for updating protection container mapping.
24206	ProviderSpecificInput BasicReplicationProviderSpecificUpdateContainerMappingInput `json:"providerSpecificInput,omitempty"`
24207}
24208
24209// UnmarshalJSON is the custom unmarshaler for UpdateProtectionContainerMappingInputProperties struct.
24210func (upcmip *UpdateProtectionContainerMappingInputProperties) UnmarshalJSON(body []byte) error {
24211	var m map[string]*json.RawMessage
24212	err := json.Unmarshal(body, &m)
24213	if err != nil {
24214		return err
24215	}
24216	for k, v := range m {
24217		switch k {
24218		case "providerSpecificInput":
24219			if v != nil {
24220				providerSpecificInput, err := unmarshalBasicReplicationProviderSpecificUpdateContainerMappingInput(*v)
24221				if err != nil {
24222					return err
24223				}
24224				upcmip.ProviderSpecificInput = providerSpecificInput
24225			}
24226		}
24227	}
24228
24229	return nil
24230}
24231
24232// UpdateRecoveryPlanInput update recovery plan input class.
24233type UpdateRecoveryPlanInput struct {
24234	// Properties - Recovery plan update properties.
24235	Properties *UpdateRecoveryPlanInputProperties `json:"properties,omitempty"`
24236}
24237
24238// UpdateRecoveryPlanInputProperties recovery plan update properties.
24239type UpdateRecoveryPlanInputProperties struct {
24240	// Groups - The recovery plan groups.
24241	Groups *[]RecoveryPlanGroup `json:"groups,omitempty"`
24242}
24243
24244// UpdateReplicationProtectedItemInput update replication protected item input.
24245type UpdateReplicationProtectedItemInput struct {
24246	// Properties - Update replication protected item properties.
24247	Properties *UpdateReplicationProtectedItemInputProperties `json:"properties,omitempty"`
24248}
24249
24250// UpdateReplicationProtectedItemInputProperties update protected item input properties.
24251type UpdateReplicationProtectedItemInputProperties struct {
24252	// RecoveryAzureVMName - Target azure VM name given by the user.
24253	RecoveryAzureVMName *string `json:"recoveryAzureVMName,omitempty"`
24254	// RecoveryAzureVMSize - Target Azure Vm size.
24255	RecoveryAzureVMSize *string `json:"recoveryAzureVMSize,omitempty"`
24256	// SelectedRecoveryAzureNetworkID - Target Azure Network Id.
24257	SelectedRecoveryAzureNetworkID *string `json:"selectedRecoveryAzureNetworkId,omitempty"`
24258	// SelectedTfoAzureNetworkID - The Azure Network Id for test failover.
24259	SelectedTfoAzureNetworkID *string `json:"selectedTfoAzureNetworkId,omitempty"`
24260	// SelectedSourceNicID - The selected source nic Id which will be used as the primary nic during failover.
24261	SelectedSourceNicID *string `json:"selectedSourceNicId,omitempty"`
24262	// EnableRdpOnTargetOption - The selected option to enable RDP\SSH on target vm after failover. String value of {SrsDataContract.EnableRDPOnTargetOption} enum.
24263	EnableRdpOnTargetOption *string `json:"enableRdpOnTargetOption,omitempty"`
24264	// VMNics - The list of vm nic details.
24265	VMNics *[]VMNicInputDetails `json:"vmNics,omitempty"`
24266	// LicenseType - License type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
24267	LicenseType LicenseType `json:"licenseType,omitempty"`
24268	// RecoveryAvailabilitySetID - The target availability set id.
24269	RecoveryAvailabilitySetID *string `json:"recoveryAvailabilitySetId,omitempty"`
24270	// ProviderSpecificDetails - The provider specific input to update replication protected item.
24271	ProviderSpecificDetails BasicUpdateReplicationProtectedItemProviderInput `json:"providerSpecificDetails,omitempty"`
24272}
24273
24274// UnmarshalJSON is the custom unmarshaler for UpdateReplicationProtectedItemInputProperties struct.
24275func (urpiip *UpdateReplicationProtectedItemInputProperties) UnmarshalJSON(body []byte) error {
24276	var m map[string]*json.RawMessage
24277	err := json.Unmarshal(body, &m)
24278	if err != nil {
24279		return err
24280	}
24281	for k, v := range m {
24282		switch k {
24283		case "recoveryAzureVMName":
24284			if v != nil {
24285				var recoveryAzureVMName string
24286				err = json.Unmarshal(*v, &recoveryAzureVMName)
24287				if err != nil {
24288					return err
24289				}
24290				urpiip.RecoveryAzureVMName = &recoveryAzureVMName
24291			}
24292		case "recoveryAzureVMSize":
24293			if v != nil {
24294				var recoveryAzureVMSize string
24295				err = json.Unmarshal(*v, &recoveryAzureVMSize)
24296				if err != nil {
24297					return err
24298				}
24299				urpiip.RecoveryAzureVMSize = &recoveryAzureVMSize
24300			}
24301		case "selectedRecoveryAzureNetworkId":
24302			if v != nil {
24303				var selectedRecoveryAzureNetworkID string
24304				err = json.Unmarshal(*v, &selectedRecoveryAzureNetworkID)
24305				if err != nil {
24306					return err
24307				}
24308				urpiip.SelectedRecoveryAzureNetworkID = &selectedRecoveryAzureNetworkID
24309			}
24310		case "selectedTfoAzureNetworkId":
24311			if v != nil {
24312				var selectedTfoAzureNetworkID string
24313				err = json.Unmarshal(*v, &selectedTfoAzureNetworkID)
24314				if err != nil {
24315					return err
24316				}
24317				urpiip.SelectedTfoAzureNetworkID = &selectedTfoAzureNetworkID
24318			}
24319		case "selectedSourceNicId":
24320			if v != nil {
24321				var selectedSourceNicID string
24322				err = json.Unmarshal(*v, &selectedSourceNicID)
24323				if err != nil {
24324					return err
24325				}
24326				urpiip.SelectedSourceNicID = &selectedSourceNicID
24327			}
24328		case "enableRdpOnTargetOption":
24329			if v != nil {
24330				var enableRdpOnTargetOption string
24331				err = json.Unmarshal(*v, &enableRdpOnTargetOption)
24332				if err != nil {
24333					return err
24334				}
24335				urpiip.EnableRdpOnTargetOption = &enableRdpOnTargetOption
24336			}
24337		case "vmNics":
24338			if v != nil {
24339				var VMNics []VMNicInputDetails
24340				err = json.Unmarshal(*v, &VMNics)
24341				if err != nil {
24342					return err
24343				}
24344				urpiip.VMNics = &VMNics
24345			}
24346		case "licenseType":
24347			if v != nil {
24348				var licenseType LicenseType
24349				err = json.Unmarshal(*v, &licenseType)
24350				if err != nil {
24351					return err
24352				}
24353				urpiip.LicenseType = licenseType
24354			}
24355		case "recoveryAvailabilitySetId":
24356			if v != nil {
24357				var recoveryAvailabilitySetID string
24358				err = json.Unmarshal(*v, &recoveryAvailabilitySetID)
24359				if err != nil {
24360					return err
24361				}
24362				urpiip.RecoveryAvailabilitySetID = &recoveryAvailabilitySetID
24363			}
24364		case "providerSpecificDetails":
24365			if v != nil {
24366				providerSpecificDetails, err := unmarshalBasicUpdateReplicationProtectedItemProviderInput(*v)
24367				if err != nil {
24368					return err
24369				}
24370				urpiip.ProviderSpecificDetails = providerSpecificDetails
24371			}
24372		}
24373	}
24374
24375	return nil
24376}
24377
24378// BasicUpdateReplicationProtectedItemProviderInput update replication protected item provider specific input.
24379type BasicUpdateReplicationProtectedItemProviderInput interface {
24380	AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool)
24381	AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool)
24382	AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool)
24383	AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool)
24384	AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool)
24385}
24386
24387// UpdateReplicationProtectedItemProviderInput update replication protected item provider specific input.
24388type UpdateReplicationProtectedItemProviderInput struct {
24389	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm'
24390	InstanceType InstanceTypeBasicUpdateReplicationProtectedItemProviderInput `json:"instanceType,omitempty"`
24391}
24392
24393func unmarshalBasicUpdateReplicationProtectedItemProviderInput(body []byte) (BasicUpdateReplicationProtectedItemProviderInput, error) {
24394	var m map[string]interface{}
24395	err := json.Unmarshal(body, &m)
24396	if err != nil {
24397		return nil, err
24398	}
24399
24400	switch m["instanceType"] {
24401	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeA2A):
24402		var aurpii A2AUpdateReplicationProtectedItemInput
24403		err := json.Unmarshal(body, &aurpii)
24404		return aurpii, err
24405	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeHyperVReplicaAzure):
24406		var hvraurpii HyperVReplicaAzureUpdateReplicationProtectedItemInput
24407		err := json.Unmarshal(body, &hvraurpii)
24408		return hvraurpii, err
24409	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageAzureV2):
24410		var imavurpii InMageAzureV2UpdateReplicationProtectedItemInput
24411		err := json.Unmarshal(body, &imavurpii)
24412		return imavurpii, err
24413	case string(InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeInMageRcm):
24414		var imrurpii InMageRcmUpdateReplicationProtectedItemInput
24415		err := json.Unmarshal(body, &imrurpii)
24416		return imrurpii, err
24417	default:
24418		var urpipi UpdateReplicationProtectedItemProviderInput
24419		err := json.Unmarshal(body, &urpipi)
24420		return urpipi, err
24421	}
24422}
24423func unmarshalBasicUpdateReplicationProtectedItemProviderInputArray(body []byte) ([]BasicUpdateReplicationProtectedItemProviderInput, error) {
24424	var rawMessages []*json.RawMessage
24425	err := json.Unmarshal(body, &rawMessages)
24426	if err != nil {
24427		return nil, err
24428	}
24429
24430	urpipiArray := make([]BasicUpdateReplicationProtectedItemProviderInput, len(rawMessages))
24431
24432	for index, rawMessage := range rawMessages {
24433		urpipi, err := unmarshalBasicUpdateReplicationProtectedItemProviderInput(*rawMessage)
24434		if err != nil {
24435			return nil, err
24436		}
24437		urpipiArray[index] = urpipi
24438	}
24439	return urpipiArray, nil
24440}
24441
24442// MarshalJSON is the custom marshaler for UpdateReplicationProtectedItemProviderInput.
24443func (urpipi UpdateReplicationProtectedItemProviderInput) MarshalJSON() ([]byte, error) {
24444	urpipi.InstanceType = InstanceTypeBasicUpdateReplicationProtectedItemProviderInputInstanceTypeUpdateReplicationProtectedItemProviderInput
24445	objectMap := make(map[string]interface{})
24446	if urpipi.InstanceType != "" {
24447		objectMap["instanceType"] = urpipi.InstanceType
24448	}
24449	return json.Marshal(objectMap)
24450}
24451
24452// AsA2AUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
24453func (urpipi UpdateReplicationProtectedItemProviderInput) AsA2AUpdateReplicationProtectedItemInput() (*A2AUpdateReplicationProtectedItemInput, bool) {
24454	return nil, false
24455}
24456
24457// AsHyperVReplicaAzureUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
24458func (urpipi UpdateReplicationProtectedItemProviderInput) AsHyperVReplicaAzureUpdateReplicationProtectedItemInput() (*HyperVReplicaAzureUpdateReplicationProtectedItemInput, bool) {
24459	return nil, false
24460}
24461
24462// AsInMageAzureV2UpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
24463func (urpipi UpdateReplicationProtectedItemProviderInput) AsInMageAzureV2UpdateReplicationProtectedItemInput() (*InMageAzureV2UpdateReplicationProtectedItemInput, bool) {
24464	return nil, false
24465}
24466
24467// AsInMageRcmUpdateReplicationProtectedItemInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
24468func (urpipi UpdateReplicationProtectedItemProviderInput) AsInMageRcmUpdateReplicationProtectedItemInput() (*InMageRcmUpdateReplicationProtectedItemInput, bool) {
24469	return nil, false
24470}
24471
24472// AsUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
24473func (urpipi UpdateReplicationProtectedItemProviderInput) AsUpdateReplicationProtectedItemProviderInput() (*UpdateReplicationProtectedItemProviderInput, bool) {
24474	return &urpipi, true
24475}
24476
24477// AsBasicUpdateReplicationProtectedItemProviderInput is the BasicUpdateReplicationProtectedItemProviderInput implementation for UpdateReplicationProtectedItemProviderInput.
24478func (urpipi UpdateReplicationProtectedItemProviderInput) AsBasicUpdateReplicationProtectedItemProviderInput() (BasicUpdateReplicationProtectedItemProviderInput, bool) {
24479	return &urpipi, true
24480}
24481
24482// UpdateVCenterRequest input required to update vCenter.
24483type UpdateVCenterRequest struct {
24484	// Properties - The update VCenter Request Properties.
24485	Properties *UpdateVCenterRequestProperties `json:"properties,omitempty"`
24486}
24487
24488// UpdateVCenterRequestProperties the properties of an update vCenter request.
24489type UpdateVCenterRequestProperties struct {
24490	// FriendlyName - The friendly name of the vCenter.
24491	FriendlyName *string `json:"friendlyName,omitempty"`
24492	// IPAddress - The IP address of the vCenter to be discovered.
24493	IPAddress *string `json:"ipAddress,omitempty"`
24494	// ProcessServerID - The process server Id from where the update can be orchestrated.
24495	ProcessServerID *string `json:"processServerId,omitempty"`
24496	// Port - The port number for discovery.
24497	Port *string `json:"port,omitempty"`
24498	// RunAsAccountID - The CS account Id which has privileges to update the vCenter.
24499	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
24500}
24501
24502// VaultHealthDetails vault health details definition.
24503type VaultHealthDetails struct {
24504	autorest.Response `json:"-"`
24505	// Properties - The vault health related data.
24506	Properties *VaultHealthProperties `json:"properties,omitempty"`
24507	// ID - READ-ONLY; Resource Id
24508	ID *string `json:"id,omitempty"`
24509	// Name - READ-ONLY; Resource Name
24510	Name *string `json:"name,omitempty"`
24511	// Type - READ-ONLY; Resource Type
24512	Type *string `json:"type,omitempty"`
24513	// Location - Resource Location
24514	Location *string `json:"location,omitempty"`
24515}
24516
24517// MarshalJSON is the custom marshaler for VaultHealthDetails.
24518func (vhd VaultHealthDetails) MarshalJSON() ([]byte, error) {
24519	objectMap := make(map[string]interface{})
24520	if vhd.Properties != nil {
24521		objectMap["properties"] = vhd.Properties
24522	}
24523	if vhd.Location != nil {
24524		objectMap["location"] = vhd.Location
24525	}
24526	return json.Marshal(objectMap)
24527}
24528
24529// VaultHealthProperties class to define the health summary of the Vault.
24530type VaultHealthProperties struct {
24531	// VaultErrors - The list of errors on the vault.
24532	VaultErrors *[]HealthError `json:"vaultErrors,omitempty"`
24533	// ProtectedItemsHealth - The list of the health detail of the protected items in the vault.
24534	ProtectedItemsHealth *ResourceHealthSummary `json:"protectedItemsHealth,omitempty"`
24535	// FabricsHealth - The list of the health detail of the fabrics in the vault.
24536	FabricsHealth *ResourceHealthSummary `json:"fabricsHealth,omitempty"`
24537	// ContainersHealth - The list of the health detail of the containers in the vault.
24538	ContainersHealth *ResourceHealthSummary `json:"containersHealth,omitempty"`
24539}
24540
24541// VaultSetting vault setting.
24542type VaultSetting struct {
24543	autorest.Response `json:"-"`
24544	// Properties - The vault setting properties.
24545	Properties *VaultSettingProperties `json:"properties,omitempty"`
24546	// ID - READ-ONLY; Resource Id
24547	ID *string `json:"id,omitempty"`
24548	// Name - READ-ONLY; Resource Name
24549	Name *string `json:"name,omitempty"`
24550	// Type - READ-ONLY; Resource Type
24551	Type *string `json:"type,omitempty"`
24552	// Location - Resource Location
24553	Location *string `json:"location,omitempty"`
24554}
24555
24556// MarshalJSON is the custom marshaler for VaultSetting.
24557func (vs VaultSetting) MarshalJSON() ([]byte, error) {
24558	objectMap := make(map[string]interface{})
24559	if vs.Properties != nil {
24560		objectMap["properties"] = vs.Properties
24561	}
24562	if vs.Location != nil {
24563		objectMap["location"] = vs.Location
24564	}
24565	return json.Marshal(objectMap)
24566}
24567
24568// VaultSettingCollection vault setting collection.
24569type VaultSettingCollection struct {
24570	autorest.Response `json:"-"`
24571	// Value - The list of vault setting.
24572	Value *[]VaultSetting `json:"value,omitempty"`
24573	// NextLink - The value of next link.
24574	NextLink *string `json:"nextLink,omitempty"`
24575}
24576
24577// VaultSettingCollectionIterator provides access to a complete listing of VaultSetting values.
24578type VaultSettingCollectionIterator struct {
24579	i    int
24580	page VaultSettingCollectionPage
24581}
24582
24583// NextWithContext advances to the next value.  If there was an error making
24584// the request the iterator does not advance and the error is returned.
24585func (iter *VaultSettingCollectionIterator) NextWithContext(ctx context.Context) (err error) {
24586	if tracing.IsEnabled() {
24587		ctx = tracing.StartSpan(ctx, fqdn+"/VaultSettingCollectionIterator.NextWithContext")
24588		defer func() {
24589			sc := -1
24590			if iter.Response().Response.Response != nil {
24591				sc = iter.Response().Response.Response.StatusCode
24592			}
24593			tracing.EndSpan(ctx, sc, err)
24594		}()
24595	}
24596	iter.i++
24597	if iter.i < len(iter.page.Values()) {
24598		return nil
24599	}
24600	err = iter.page.NextWithContext(ctx)
24601	if err != nil {
24602		iter.i--
24603		return err
24604	}
24605	iter.i = 0
24606	return nil
24607}
24608
24609// Next advances to the next value.  If there was an error making
24610// the request the iterator does not advance and the error is returned.
24611// Deprecated: Use NextWithContext() instead.
24612func (iter *VaultSettingCollectionIterator) Next() error {
24613	return iter.NextWithContext(context.Background())
24614}
24615
24616// NotDone returns true if the enumeration should be started or is not yet complete.
24617func (iter VaultSettingCollectionIterator) NotDone() bool {
24618	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24619}
24620
24621// Response returns the raw server response from the last page request.
24622func (iter VaultSettingCollectionIterator) Response() VaultSettingCollection {
24623	return iter.page.Response()
24624}
24625
24626// Value returns the current value or a zero-initialized value if the
24627// iterator has advanced beyond the end of the collection.
24628func (iter VaultSettingCollectionIterator) Value() VaultSetting {
24629	if !iter.page.NotDone() {
24630		return VaultSetting{}
24631	}
24632	return iter.page.Values()[iter.i]
24633}
24634
24635// Creates a new instance of the VaultSettingCollectionIterator type.
24636func NewVaultSettingCollectionIterator(page VaultSettingCollectionPage) VaultSettingCollectionIterator {
24637	return VaultSettingCollectionIterator{page: page}
24638}
24639
24640// IsEmpty returns true if the ListResult contains no values.
24641func (vsc VaultSettingCollection) IsEmpty() bool {
24642	return vsc.Value == nil || len(*vsc.Value) == 0
24643}
24644
24645// hasNextLink returns true if the NextLink is not empty.
24646func (vsc VaultSettingCollection) hasNextLink() bool {
24647	return vsc.NextLink != nil && len(*vsc.NextLink) != 0
24648}
24649
24650// vaultSettingCollectionPreparer prepares a request to retrieve the next set of results.
24651// It returns nil if no more results exist.
24652func (vsc VaultSettingCollection) vaultSettingCollectionPreparer(ctx context.Context) (*http.Request, error) {
24653	if !vsc.hasNextLink() {
24654		return nil, nil
24655	}
24656	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24657		autorest.AsJSON(),
24658		autorest.AsGet(),
24659		autorest.WithBaseURL(to.String(vsc.NextLink)))
24660}
24661
24662// VaultSettingCollectionPage contains a page of VaultSetting values.
24663type VaultSettingCollectionPage struct {
24664	fn  func(context.Context, VaultSettingCollection) (VaultSettingCollection, error)
24665	vsc VaultSettingCollection
24666}
24667
24668// NextWithContext advances to the next page of values.  If there was an error making
24669// the request the page does not advance and the error is returned.
24670func (page *VaultSettingCollectionPage) NextWithContext(ctx context.Context) (err error) {
24671	if tracing.IsEnabled() {
24672		ctx = tracing.StartSpan(ctx, fqdn+"/VaultSettingCollectionPage.NextWithContext")
24673		defer func() {
24674			sc := -1
24675			if page.Response().Response.Response != nil {
24676				sc = page.Response().Response.Response.StatusCode
24677			}
24678			tracing.EndSpan(ctx, sc, err)
24679		}()
24680	}
24681	for {
24682		next, err := page.fn(ctx, page.vsc)
24683		if err != nil {
24684			return err
24685		}
24686		page.vsc = next
24687		if !next.hasNextLink() || !next.IsEmpty() {
24688			break
24689		}
24690	}
24691	return nil
24692}
24693
24694// Next advances to the next page of values.  If there was an error making
24695// the request the page does not advance and the error is returned.
24696// Deprecated: Use NextWithContext() instead.
24697func (page *VaultSettingCollectionPage) Next() error {
24698	return page.NextWithContext(context.Background())
24699}
24700
24701// NotDone returns true if the page enumeration should be started or is not yet complete.
24702func (page VaultSettingCollectionPage) NotDone() bool {
24703	return !page.vsc.IsEmpty()
24704}
24705
24706// Response returns the raw server response from the last page request.
24707func (page VaultSettingCollectionPage) Response() VaultSettingCollection {
24708	return page.vsc
24709}
24710
24711// Values returns the slice of values for the current page or nil if there are no values.
24712func (page VaultSettingCollectionPage) Values() []VaultSetting {
24713	if page.vsc.IsEmpty() {
24714		return nil
24715	}
24716	return *page.vsc.Value
24717}
24718
24719// Creates a new instance of the VaultSettingCollectionPage type.
24720func NewVaultSettingCollectionPage(cur VaultSettingCollection, getNextPage func(context.Context, VaultSettingCollection) (VaultSettingCollection, error)) VaultSettingCollectionPage {
24721	return VaultSettingCollectionPage{
24722		fn:  getNextPage,
24723		vsc: cur,
24724	}
24725}
24726
24727// VaultSettingCreationInput input to create vault setting.
24728type VaultSettingCreationInput struct {
24729	// Properties - Vault setting creation input properties.
24730	Properties *VaultSettingCreationInputProperties `json:"properties,omitempty"`
24731}
24732
24733// VaultSettingCreationInputProperties input to create vault setting.
24734type VaultSettingCreationInputProperties struct {
24735	// MigrationSolutionID - The migration solution Id.
24736	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
24737}
24738
24739// VaultSettingProperties vault setting properties.
24740type VaultSettingProperties struct {
24741	// MigrationSolutionID - The migration solution ARM Id.
24742	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
24743}
24744
24745// VCenter vCenter definition.
24746type VCenter struct {
24747	autorest.Response `json:"-"`
24748	// Properties - VCenter related data.
24749	Properties *VCenterProperties `json:"properties,omitempty"`
24750	// ID - READ-ONLY; Resource Id
24751	ID *string `json:"id,omitempty"`
24752	// Name - READ-ONLY; Resource Name
24753	Name *string `json:"name,omitempty"`
24754	// Type - READ-ONLY; Resource Type
24755	Type *string `json:"type,omitempty"`
24756	// Location - Resource Location
24757	Location *string `json:"location,omitempty"`
24758}
24759
24760// MarshalJSON is the custom marshaler for VCenter.
24761func (vc VCenter) MarshalJSON() ([]byte, error) {
24762	objectMap := make(map[string]interface{})
24763	if vc.Properties != nil {
24764		objectMap["properties"] = vc.Properties
24765	}
24766	if vc.Location != nil {
24767		objectMap["location"] = vc.Location
24768	}
24769	return json.Marshal(objectMap)
24770}
24771
24772// VCenterCollection collection of vCenter details.
24773type VCenterCollection struct {
24774	autorest.Response `json:"-"`
24775	// Value - The vCenter details.
24776	Value *[]VCenter `json:"value,omitempty"`
24777	// NextLink - The value of next link.
24778	NextLink *string `json:"nextLink,omitempty"`
24779}
24780
24781// VCenterCollectionIterator provides access to a complete listing of VCenter values.
24782type VCenterCollectionIterator struct {
24783	i    int
24784	page VCenterCollectionPage
24785}
24786
24787// NextWithContext advances to the next value.  If there was an error making
24788// the request the iterator does not advance and the error is returned.
24789func (iter *VCenterCollectionIterator) NextWithContext(ctx context.Context) (err error) {
24790	if tracing.IsEnabled() {
24791		ctx = tracing.StartSpan(ctx, fqdn+"/VCenterCollectionIterator.NextWithContext")
24792		defer func() {
24793			sc := -1
24794			if iter.Response().Response.Response != nil {
24795				sc = iter.Response().Response.Response.StatusCode
24796			}
24797			tracing.EndSpan(ctx, sc, err)
24798		}()
24799	}
24800	iter.i++
24801	if iter.i < len(iter.page.Values()) {
24802		return nil
24803	}
24804	err = iter.page.NextWithContext(ctx)
24805	if err != nil {
24806		iter.i--
24807		return err
24808	}
24809	iter.i = 0
24810	return nil
24811}
24812
24813// Next advances to the next value.  If there was an error making
24814// the request the iterator does not advance and the error is returned.
24815// Deprecated: Use NextWithContext() instead.
24816func (iter *VCenterCollectionIterator) Next() error {
24817	return iter.NextWithContext(context.Background())
24818}
24819
24820// NotDone returns true if the enumeration should be started or is not yet complete.
24821func (iter VCenterCollectionIterator) NotDone() bool {
24822	return iter.page.NotDone() && iter.i < len(iter.page.Values())
24823}
24824
24825// Response returns the raw server response from the last page request.
24826func (iter VCenterCollectionIterator) Response() VCenterCollection {
24827	return iter.page.Response()
24828}
24829
24830// Value returns the current value or a zero-initialized value if the
24831// iterator has advanced beyond the end of the collection.
24832func (iter VCenterCollectionIterator) Value() VCenter {
24833	if !iter.page.NotDone() {
24834		return VCenter{}
24835	}
24836	return iter.page.Values()[iter.i]
24837}
24838
24839// Creates a new instance of the VCenterCollectionIterator type.
24840func NewVCenterCollectionIterator(page VCenterCollectionPage) VCenterCollectionIterator {
24841	return VCenterCollectionIterator{page: page}
24842}
24843
24844// IsEmpty returns true if the ListResult contains no values.
24845func (vcc VCenterCollection) IsEmpty() bool {
24846	return vcc.Value == nil || len(*vcc.Value) == 0
24847}
24848
24849// hasNextLink returns true if the NextLink is not empty.
24850func (vcc VCenterCollection) hasNextLink() bool {
24851	return vcc.NextLink != nil && len(*vcc.NextLink) != 0
24852}
24853
24854// vCenterCollectionPreparer prepares a request to retrieve the next set of results.
24855// It returns nil if no more results exist.
24856func (vcc VCenterCollection) vCenterCollectionPreparer(ctx context.Context) (*http.Request, error) {
24857	if !vcc.hasNextLink() {
24858		return nil, nil
24859	}
24860	return autorest.Prepare((&http.Request{}).WithContext(ctx),
24861		autorest.AsJSON(),
24862		autorest.AsGet(),
24863		autorest.WithBaseURL(to.String(vcc.NextLink)))
24864}
24865
24866// VCenterCollectionPage contains a page of VCenter values.
24867type VCenterCollectionPage struct {
24868	fn  func(context.Context, VCenterCollection) (VCenterCollection, error)
24869	vcc VCenterCollection
24870}
24871
24872// NextWithContext advances to the next page of values.  If there was an error making
24873// the request the page does not advance and the error is returned.
24874func (page *VCenterCollectionPage) NextWithContext(ctx context.Context) (err error) {
24875	if tracing.IsEnabled() {
24876		ctx = tracing.StartSpan(ctx, fqdn+"/VCenterCollectionPage.NextWithContext")
24877		defer func() {
24878			sc := -1
24879			if page.Response().Response.Response != nil {
24880				sc = page.Response().Response.Response.StatusCode
24881			}
24882			tracing.EndSpan(ctx, sc, err)
24883		}()
24884	}
24885	for {
24886		next, err := page.fn(ctx, page.vcc)
24887		if err != nil {
24888			return err
24889		}
24890		page.vcc = next
24891		if !next.hasNextLink() || !next.IsEmpty() {
24892			break
24893		}
24894	}
24895	return nil
24896}
24897
24898// Next advances to the next page of values.  If there was an error making
24899// the request the page does not advance and the error is returned.
24900// Deprecated: Use NextWithContext() instead.
24901func (page *VCenterCollectionPage) Next() error {
24902	return page.NextWithContext(context.Background())
24903}
24904
24905// NotDone returns true if the page enumeration should be started or is not yet complete.
24906func (page VCenterCollectionPage) NotDone() bool {
24907	return !page.vcc.IsEmpty()
24908}
24909
24910// Response returns the raw server response from the last page request.
24911func (page VCenterCollectionPage) Response() VCenterCollection {
24912	return page.vcc
24913}
24914
24915// Values returns the slice of values for the current page or nil if there are no values.
24916func (page VCenterCollectionPage) Values() []VCenter {
24917	if page.vcc.IsEmpty() {
24918		return nil
24919	}
24920	return *page.vcc.Value
24921}
24922
24923// Creates a new instance of the VCenterCollectionPage type.
24924func NewVCenterCollectionPage(cur VCenterCollection, getNextPage func(context.Context, VCenterCollection) (VCenterCollection, error)) VCenterCollectionPage {
24925	return VCenterCollectionPage{
24926		fn:  getNextPage,
24927		vcc: cur,
24928	}
24929}
24930
24931// VCenterProperties vCenter properties.
24932type VCenterProperties struct {
24933	// FriendlyName - Friendly name of the vCenter.
24934	FriendlyName *string `json:"friendlyName,omitempty"`
24935	// InternalID - VCenter internal ID.
24936	InternalID *string `json:"internalId,omitempty"`
24937	// LastHeartbeat - The time when the last heartbeat was received by vCenter.
24938	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
24939	// DiscoveryStatus - The VCenter discovery status.
24940	DiscoveryStatus *string `json:"discoveryStatus,omitempty"`
24941	// ProcessServerID - The process server Id.
24942	ProcessServerID *string `json:"processServerId,omitempty"`
24943	// IPAddress - The IP address of the vCenter.
24944	IPAddress *string `json:"ipAddress,omitempty"`
24945	// InfrastructureID - The infrastructure Id of vCenter.
24946	InfrastructureID *string `json:"infrastructureId,omitempty"`
24947	// Port - The port number for discovery.
24948	Port *string `json:"port,omitempty"`
24949	// RunAsAccountID - The account Id which has privileges to discover the vCenter.
24950	RunAsAccountID *string `json:"runAsAccountId,omitempty"`
24951	// FabricArmResourceName - The ARM resource name of the fabric containing this VCenter.
24952	FabricArmResourceName *string `json:"fabricArmResourceName,omitempty"`
24953	// HealthErrors - The health errors for this VCenter.
24954	HealthErrors *[]HealthError `json:"healthErrors,omitempty"`
24955}
24956
24957// VersionDetails version related details.
24958type VersionDetails struct {
24959	// Version - The agent version.
24960	Version *string `json:"version,omitempty"`
24961	// ExpiryDate - Version expiry date.
24962	ExpiryDate *date.Time `json:"expiryDate,omitempty"`
24963	// Status - A value indicating whether security update required. Possible values include: 'Supported', 'NotSupported', 'Deprecated', 'UpdateRequired', 'SecurityUpdateRequired'
24964	Status AgentVersionStatus `json:"status,omitempty"`
24965}
24966
24967// VirtualMachineTaskDetails this class represents the virtual machine task details.
24968type VirtualMachineTaskDetails struct {
24969	// SkippedReason - The skipped reason.
24970	SkippedReason *string `json:"skippedReason,omitempty"`
24971	// SkippedReasonString - The skipped reason string.
24972	SkippedReasonString *string `json:"skippedReasonString,omitempty"`
24973	// JobTask - The job entity.
24974	JobTask *JobEntity `json:"jobTask,omitempty"`
24975	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
24976	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
24977}
24978
24979// MarshalJSON is the custom marshaler for VirtualMachineTaskDetails.
24980func (vmtd VirtualMachineTaskDetails) MarshalJSON() ([]byte, error) {
24981	vmtd.InstanceType = InstanceTypeVirtualMachineTaskDetails
24982	objectMap := make(map[string]interface{})
24983	if vmtd.SkippedReason != nil {
24984		objectMap["skippedReason"] = vmtd.SkippedReason
24985	}
24986	if vmtd.SkippedReasonString != nil {
24987		objectMap["skippedReasonString"] = vmtd.SkippedReasonString
24988	}
24989	if vmtd.JobTask != nil {
24990		objectMap["jobTask"] = vmtd.JobTask
24991	}
24992	if vmtd.InstanceType != "" {
24993		objectMap["instanceType"] = vmtd.InstanceType
24994	}
24995	return json.Marshal(objectMap)
24996}
24997
24998// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
24999func (vmtd VirtualMachineTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
25000	return nil, false
25001}
25002
25003// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25004func (vmtd VirtualMachineTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
25005	return nil, false
25006}
25007
25008// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25009func (vmtd VirtualMachineTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
25010	return nil, false
25011}
25012
25013// AsJobTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25014func (vmtd VirtualMachineTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
25015	return nil, false
25016}
25017
25018// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25019func (vmtd VirtualMachineTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
25020	return nil, false
25021}
25022
25023// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25024func (vmtd VirtualMachineTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
25025	return nil, false
25026}
25027
25028// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25029func (vmtd VirtualMachineTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
25030	return &vmtd, true
25031}
25032
25033// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25034func (vmtd VirtualMachineTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
25035	return nil, false
25036}
25037
25038// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25039func (vmtd VirtualMachineTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
25040	return nil, false
25041}
25042
25043// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for VirtualMachineTaskDetails.
25044func (vmtd VirtualMachineTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
25045	return &vmtd, true
25046}
25047
25048// VmmDetails VMM fabric specific details.
25049type VmmDetails struct {
25050	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
25051	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
25052}
25053
25054// MarshalJSON is the custom marshaler for VmmDetails.
25055func (vd VmmDetails) MarshalJSON() ([]byte, error) {
25056	vd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM
25057	objectMap := make(map[string]interface{})
25058	if vd.InstanceType != "" {
25059		objectMap["instanceType"] = vd.InstanceType
25060	}
25061	return json.Marshal(objectMap)
25062}
25063
25064// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25065func (vd VmmDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
25066	return nil, false
25067}
25068
25069// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25070func (vd VmmDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
25071	return nil, false
25072}
25073
25074// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25075func (vd VmmDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
25076	return nil, false
25077}
25078
25079// AsVmmDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25080func (vd VmmDetails) AsVmmDetails() (*VmmDetails, bool) {
25081	return &vd, true
25082}
25083
25084// AsVMwareDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25085func (vd VmmDetails) AsVMwareDetails() (*VMwareDetails, bool) {
25086	return nil, false
25087}
25088
25089// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25090func (vd VmmDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
25091	return nil, false
25092}
25093
25094// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25095func (vd VmmDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
25096	return nil, false
25097}
25098
25099// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VmmDetails.
25100func (vd VmmDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
25101	return &vd, true
25102}
25103
25104// VmmToAzureCreateNetworkMappingInput create network mappings input properties/behavior specific to Vmm to
25105// Azure Network mapping.
25106type VmmToAzureCreateNetworkMappingInput struct {
25107	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
25108	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
25109}
25110
25111// MarshalJSON is the custom marshaler for VmmToAzureCreateNetworkMappingInput.
25112func (vtacnmi VmmToAzureCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
25113	vtacnmi.InstanceType = InstanceTypeVmmToAzure
25114	objectMap := make(map[string]interface{})
25115	if vtacnmi.InstanceType != "" {
25116		objectMap["instanceType"] = vtacnmi.InstanceType
25117	}
25118	return json.Marshal(objectMap)
25119}
25120
25121// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
25122func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
25123	return nil, false
25124}
25125
25126// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
25127func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
25128	return &vtacnmi, true
25129}
25130
25131// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
25132func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
25133	return nil, false
25134}
25135
25136// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
25137func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
25138	return nil, false
25139}
25140
25141// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToAzureCreateNetworkMappingInput.
25142func (vtacnmi VmmToAzureCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
25143	return &vtacnmi, true
25144}
25145
25146// VmmToAzureNetworkMappingSettings e2A Network Mapping fabric specific settings.
25147type VmmToAzureNetworkMappingSettings struct {
25148	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
25149	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
25150}
25151
25152// MarshalJSON is the custom marshaler for VmmToAzureNetworkMappingSettings.
25153func (vtanms VmmToAzureNetworkMappingSettings) MarshalJSON() ([]byte, error) {
25154	vtanms.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure
25155	objectMap := make(map[string]interface{})
25156	if vtanms.InstanceType != "" {
25157		objectMap["instanceType"] = vtanms.InstanceType
25158	}
25159	return json.Marshal(objectMap)
25160}
25161
25162// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
25163func (vtanms VmmToAzureNetworkMappingSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
25164	return nil, false
25165}
25166
25167// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
25168func (vtanms VmmToAzureNetworkMappingSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
25169	return &vtanms, true
25170}
25171
25172// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
25173func (vtanms VmmToAzureNetworkMappingSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
25174	return nil, false
25175}
25176
25177// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
25178func (vtanms VmmToAzureNetworkMappingSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
25179	return nil, false
25180}
25181
25182// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToAzureNetworkMappingSettings.
25183func (vtanms VmmToAzureNetworkMappingSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
25184	return &vtanms, true
25185}
25186
25187// VmmToAzureUpdateNetworkMappingInput update network mappings input properties/behavior specific to vmm to
25188// azure.
25189type VmmToAzureUpdateNetworkMappingInput struct {
25190	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
25191	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
25192}
25193
25194// MarshalJSON is the custom marshaler for VmmToAzureUpdateNetworkMappingInput.
25195func (vtaunmi VmmToAzureUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
25196	vtaunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure
25197	objectMap := make(map[string]interface{})
25198	if vtaunmi.InstanceType != "" {
25199		objectMap["instanceType"] = vtaunmi.InstanceType
25200	}
25201	return json.Marshal(objectMap)
25202}
25203
25204// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
25205func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
25206	return nil, false
25207}
25208
25209// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
25210func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
25211	return &vtaunmi, true
25212}
25213
25214// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
25215func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
25216	return nil, false
25217}
25218
25219// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
25220func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
25221	return nil, false
25222}
25223
25224// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToAzureUpdateNetworkMappingInput.
25225func (vtaunmi VmmToAzureUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
25226	return &vtaunmi, true
25227}
25228
25229// VmmToVmmCreateNetworkMappingInput create network mappings input properties/behavior specific to vmm to
25230// vmm Network mapping.
25231type VmmToVmmCreateNetworkMappingInput struct {
25232	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreateNetworkMappingInput', 'InstanceTypeAzureToAzure', 'InstanceTypeVmmToAzure', 'InstanceTypeVmmToVmm'
25233	InstanceType InstanceTypeBasicFabricSpecificCreateNetworkMappingInput `json:"instanceType,omitempty"`
25234}
25235
25236// MarshalJSON is the custom marshaler for VmmToVmmCreateNetworkMappingInput.
25237func (vtvcnmi VmmToVmmCreateNetworkMappingInput) MarshalJSON() ([]byte, error) {
25238	vtvcnmi.InstanceType = InstanceTypeVmmToVmm
25239	objectMap := make(map[string]interface{})
25240	if vtvcnmi.InstanceType != "" {
25241		objectMap["instanceType"] = vtvcnmi.InstanceType
25242	}
25243	return json.Marshal(objectMap)
25244}
25245
25246// AsAzureToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
25247func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsAzureToAzureCreateNetworkMappingInput() (*AzureToAzureCreateNetworkMappingInput, bool) {
25248	return nil, false
25249}
25250
25251// AsVmmToAzureCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
25252func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsVmmToAzureCreateNetworkMappingInput() (*VmmToAzureCreateNetworkMappingInput, bool) {
25253	return nil, false
25254}
25255
25256// AsVmmToVmmCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
25257func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsVmmToVmmCreateNetworkMappingInput() (*VmmToVmmCreateNetworkMappingInput, bool) {
25258	return &vtvcnmi, true
25259}
25260
25261// AsFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
25262func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsFabricSpecificCreateNetworkMappingInput() (*FabricSpecificCreateNetworkMappingInput, bool) {
25263	return nil, false
25264}
25265
25266// AsBasicFabricSpecificCreateNetworkMappingInput is the BasicFabricSpecificCreateNetworkMappingInput implementation for VmmToVmmCreateNetworkMappingInput.
25267func (vtvcnmi VmmToVmmCreateNetworkMappingInput) AsBasicFabricSpecificCreateNetworkMappingInput() (BasicFabricSpecificCreateNetworkMappingInput, bool) {
25268	return &vtvcnmi, true
25269}
25270
25271// VmmToVmmNetworkMappingSettings e2E Network Mapping fabric specific settings.
25272type VmmToVmmNetworkMappingSettings struct {
25273	// InstanceType - Possible values include: 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeNetworkMappingFabricSpecificSettings', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeAzureToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToAzure', 'InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm'
25274	InstanceType InstanceTypeBasicNetworkMappingFabricSpecificSettings `json:"instanceType,omitempty"`
25275}
25276
25277// MarshalJSON is the custom marshaler for VmmToVmmNetworkMappingSettings.
25278func (vtvnms VmmToVmmNetworkMappingSettings) MarshalJSON() ([]byte, error) {
25279	vtvnms.InstanceType = InstanceTypeBasicNetworkMappingFabricSpecificSettingsInstanceTypeVmmToVmm
25280	objectMap := make(map[string]interface{})
25281	if vtvnms.InstanceType != "" {
25282		objectMap["instanceType"] = vtvnms.InstanceType
25283	}
25284	return json.Marshal(objectMap)
25285}
25286
25287// AsAzureToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
25288func (vtvnms VmmToVmmNetworkMappingSettings) AsAzureToAzureNetworkMappingSettings() (*AzureToAzureNetworkMappingSettings, bool) {
25289	return nil, false
25290}
25291
25292// AsVmmToAzureNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
25293func (vtvnms VmmToVmmNetworkMappingSettings) AsVmmToAzureNetworkMappingSettings() (*VmmToAzureNetworkMappingSettings, bool) {
25294	return nil, false
25295}
25296
25297// AsVmmToVmmNetworkMappingSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
25298func (vtvnms VmmToVmmNetworkMappingSettings) AsVmmToVmmNetworkMappingSettings() (*VmmToVmmNetworkMappingSettings, bool) {
25299	return &vtvnms, true
25300}
25301
25302// AsNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
25303func (vtvnms VmmToVmmNetworkMappingSettings) AsNetworkMappingFabricSpecificSettings() (*NetworkMappingFabricSpecificSettings, bool) {
25304	return nil, false
25305}
25306
25307// AsBasicNetworkMappingFabricSpecificSettings is the BasicNetworkMappingFabricSpecificSettings implementation for VmmToVmmNetworkMappingSettings.
25308func (vtvnms VmmToVmmNetworkMappingSettings) AsBasicNetworkMappingFabricSpecificSettings() (BasicNetworkMappingFabricSpecificSettings, bool) {
25309	return &vtvnms, true
25310}
25311
25312// VmmToVmmUpdateNetworkMappingInput update network mappings input properties/behavior specific to vmm to
25313// vmm.
25314type VmmToVmmUpdateNetworkMappingInput struct {
25315	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeFabricSpecificUpdateNetworkMappingInput', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeAzureToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToAzure', 'InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm'
25316	InstanceType InstanceTypeBasicFabricSpecificUpdateNetworkMappingInput `json:"instanceType,omitempty"`
25317}
25318
25319// MarshalJSON is the custom marshaler for VmmToVmmUpdateNetworkMappingInput.
25320func (vtvunmi VmmToVmmUpdateNetworkMappingInput) MarshalJSON() ([]byte, error) {
25321	vtvunmi.InstanceType = InstanceTypeBasicFabricSpecificUpdateNetworkMappingInputInstanceTypeVmmToVmm
25322	objectMap := make(map[string]interface{})
25323	if vtvunmi.InstanceType != "" {
25324		objectMap["instanceType"] = vtvunmi.InstanceType
25325	}
25326	return json.Marshal(objectMap)
25327}
25328
25329// AsAzureToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
25330func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsAzureToAzureUpdateNetworkMappingInput() (*AzureToAzureUpdateNetworkMappingInput, bool) {
25331	return nil, false
25332}
25333
25334// AsVmmToAzureUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
25335func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsVmmToAzureUpdateNetworkMappingInput() (*VmmToAzureUpdateNetworkMappingInput, bool) {
25336	return nil, false
25337}
25338
25339// AsVmmToVmmUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
25340func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsVmmToVmmUpdateNetworkMappingInput() (*VmmToVmmUpdateNetworkMappingInput, bool) {
25341	return &vtvunmi, true
25342}
25343
25344// AsFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
25345func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsFabricSpecificUpdateNetworkMappingInput() (*FabricSpecificUpdateNetworkMappingInput, bool) {
25346	return nil, false
25347}
25348
25349// AsBasicFabricSpecificUpdateNetworkMappingInput is the BasicFabricSpecificUpdateNetworkMappingInput implementation for VmmToVmmUpdateNetworkMappingInput.
25350func (vtvunmi VmmToVmmUpdateNetworkMappingInput) AsBasicFabricSpecificUpdateNetworkMappingInput() (BasicFabricSpecificUpdateNetworkMappingInput, bool) {
25351	return &vtvunmi, true
25352}
25353
25354// VmmVirtualMachineDetails VMM fabric provider specific VM settings.
25355type VmmVirtualMachineDetails struct {
25356	// SourceItemID - The source id of the object.
25357	SourceItemID *string `json:"sourceItemId,omitempty"`
25358	// Generation - The id of the object in fabric.
25359	Generation *string `json:"generation,omitempty"`
25360	// OsDetails - The Last replication time.
25361	OsDetails *OSDetails `json:"osDetails,omitempty"`
25362	// DiskDetails - The Last successful failover time.
25363	DiskDetails *[]DiskDetails `json:"diskDetails,omitempty"`
25364	// HasPhysicalDisk - A value indicating whether the VM has a physical disk attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
25365	HasPhysicalDisk PresenceStatus `json:"hasPhysicalDisk,omitempty"`
25366	// 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'
25367	HasFibreChannelAdapter PresenceStatus `json:"hasFibreChannelAdapter,omitempty"`
25368	// HasSharedVhd - A value indicating whether the VM has a shared VHD attached. String value of {SrsDataContract.PresenceStatus} enum. Possible values include: 'PresenceStatusUnknown', 'PresenceStatusPresent', 'PresenceStatusNotPresent'
25369	HasSharedVhd PresenceStatus `json:"hasSharedVhd,omitempty"`
25370	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
25371	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
25372}
25373
25374// MarshalJSON is the custom marshaler for VmmVirtualMachineDetails.
25375func (vvmd VmmVirtualMachineDetails) MarshalJSON() ([]byte, error) {
25376	vvmd.InstanceType = InstanceTypeVmmVirtualMachine
25377	objectMap := make(map[string]interface{})
25378	if vvmd.SourceItemID != nil {
25379		objectMap["sourceItemId"] = vvmd.SourceItemID
25380	}
25381	if vvmd.Generation != nil {
25382		objectMap["generation"] = vvmd.Generation
25383	}
25384	if vvmd.OsDetails != nil {
25385		objectMap["osDetails"] = vvmd.OsDetails
25386	}
25387	if vvmd.DiskDetails != nil {
25388		objectMap["diskDetails"] = vvmd.DiskDetails
25389	}
25390	if vvmd.HasPhysicalDisk != "" {
25391		objectMap["hasPhysicalDisk"] = vvmd.HasPhysicalDisk
25392	}
25393	if vvmd.HasFibreChannelAdapter != "" {
25394		objectMap["hasFibreChannelAdapter"] = vvmd.HasFibreChannelAdapter
25395	}
25396	if vvmd.HasSharedVhd != "" {
25397		objectMap["hasSharedVhd"] = vvmd.HasSharedVhd
25398	}
25399	if vvmd.InstanceType != "" {
25400		objectMap["instanceType"] = vvmd.InstanceType
25401	}
25402	return json.Marshal(objectMap)
25403}
25404
25405// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
25406func (vvmd VmmVirtualMachineDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
25407	return nil, false
25408}
25409
25410// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
25411func (vvmd VmmVirtualMachineDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
25412	return nil, false
25413}
25414
25415// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
25416func (vvmd VmmVirtualMachineDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
25417	return &vvmd, true
25418}
25419
25420// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
25421func (vvmd VmmVirtualMachineDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
25422	return nil, false
25423}
25424
25425// AsConfigurationSettings is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
25426func (vvmd VmmVirtualMachineDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
25427	return nil, false
25428}
25429
25430// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for VmmVirtualMachineDetails.
25431func (vvmd VmmVirtualMachineDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
25432	return &vvmd, true
25433}
25434
25435// VMNicDetails hyper V VM network details.
25436type VMNicDetails struct {
25437	// NicID - The nic Id.
25438	NicID *string `json:"nicId,omitempty"`
25439	// ReplicaNicID - The replica nic Id.
25440	ReplicaNicID *string `json:"replicaNicId,omitempty"`
25441	// SourceNicArmID - The source nic ARM Id.
25442	SourceNicArmID *string `json:"sourceNicArmId,omitempty"`
25443	// VMSubnetName - VM subnet name.
25444	VMSubnetName *string `json:"vMSubnetName,omitempty"`
25445	// VMNetworkName - VM network name.
25446	VMNetworkName *string `json:"vMNetworkName,omitempty"`
25447	// RecoveryVMNetworkID - Recovery VM network Id.
25448	RecoveryVMNetworkID *string `json:"recoveryVMNetworkId,omitempty"`
25449	// RecoveryVMSubnetName - Recovery VM subnet name.
25450	RecoveryVMSubnetName *string `json:"recoveryVMSubnetName,omitempty"`
25451	// IPAddressType - Ip address type.
25452	IPAddressType *string `json:"ipAddressType,omitempty"`
25453	// PrimaryNicStaticIPAddress - Primary nic static IP address.
25454	PrimaryNicStaticIPAddress *string `json:"primaryNicStaticIPAddress,omitempty"`
25455	// ReplicaNicStaticIPAddress - Replica nic static IP address.
25456	ReplicaNicStaticIPAddress *string `json:"replicaNicStaticIPAddress,omitempty"`
25457	// SelectionType - Selection type for failover.
25458	SelectionType *string `json:"selectionType,omitempty"`
25459	// RecoveryNicIPAddressType - IP allocation type for recovery VM.
25460	RecoveryNicIPAddressType *string `json:"recoveryNicIpAddressType,omitempty"`
25461	// RecoveryPublicIPAddressID - The id of the public IP address resource associated with the NIC.
25462	RecoveryPublicIPAddressID *string `json:"recoveryPublicIpAddressId,omitempty"`
25463	// RecoveryNetworkSecurityGroupID - The id of the NSG associated with the NIC.
25464	RecoveryNetworkSecurityGroupID *string `json:"recoveryNetworkSecurityGroupId,omitempty"`
25465	// RecoveryLBBackendAddressPoolIds - The target backend address pools for the NIC.
25466	RecoveryLBBackendAddressPoolIds *[]string `json:"recoveryLBBackendAddressPoolIds,omitempty"`
25467	// EnableAcceleratedNetworkingOnRecovery - A value indicating whether the NIC has accelerated networking enabled.
25468	EnableAcceleratedNetworkingOnRecovery *bool `json:"enableAcceleratedNetworkingOnRecovery,omitempty"`
25469	// TfoVMNetworkID - The network to be used by NIC during test failover.
25470	TfoVMNetworkID *string `json:"tfoVMNetworkId,omitempty"`
25471	// TfoVMSubnetName - The subnet to be used by NIC during test failover.
25472	TfoVMSubnetName *string `json:"tfoVMSubnetName,omitempty"`
25473	// TfoNetworkSecurityGroupID - The NSG to be used by NIC during test failover.
25474	TfoNetworkSecurityGroupID *string `json:"tfoNetworkSecurityGroupId,omitempty"`
25475	// EnableAcceleratedNetworkingOnTfo - Whether the test failover NIC has accelerated networking enabled.
25476	EnableAcceleratedNetworkingOnTfo *bool `json:"enableAcceleratedNetworkingOnTfo,omitempty"`
25477	// TfoIPConfigs - The IP configurations to be used by NIC during test failover.
25478	TfoIPConfigs *[]IPConfig `json:"tfoIPConfigs,omitempty"`
25479	// RecoveryNicName - The name of the NIC to be used when creating target NICs.
25480	RecoveryNicName *string `json:"recoveryNicName,omitempty"`
25481	// RecoveryNicResourceGroupName - The resource group of the NIC to be used when creating target NICs.
25482	RecoveryNicResourceGroupName *string `json:"recoveryNicResourceGroupName,omitempty"`
25483	// ReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during failover subject to availability.
25484	ReuseExistingNic *bool `json:"reuseExistingNic,omitempty"`
25485	// TfoRecoveryNicName - The name of the NIC to be used when creating target NICs in TFO.
25486	TfoRecoveryNicName *string `json:"tfoRecoveryNicName,omitempty"`
25487	// TfoRecoveryNicResourceGroupName - The resource group of the NIC to be used when creating target NICs in TFO.
25488	TfoRecoveryNicResourceGroupName *string `json:"tfoRecoveryNicResourceGroupName,omitempty"`
25489	// TfoReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during test failover subject to availability.
25490	TfoReuseExistingNic *bool `json:"tfoReuseExistingNic,omitempty"`
25491}
25492
25493// VMNicInputDetails hyper V VM network input details.
25494type VMNicInputDetails struct {
25495	// NicID - The nic Id.
25496	NicID *string `json:"nicId,omitempty"`
25497	// RecoveryVMSubnetName - Recovery VM subnet name.
25498	RecoveryVMSubnetName *string `json:"recoveryVMSubnetName,omitempty"`
25499	// ReplicaNicStaticIPAddress - Replica nic static IP address.
25500	ReplicaNicStaticIPAddress *string `json:"replicaNicStaticIPAddress,omitempty"`
25501	// SelectionType - Selection type for failover.
25502	SelectionType *string `json:"selectionType,omitempty"`
25503	// RecoveryPublicIPAddressID - The id of the public IP address resource associated with the NIC.
25504	RecoveryPublicIPAddressID *string `json:"recoveryPublicIpAddressId,omitempty"`
25505	// RecoveryNetworkSecurityGroupID - The id of the NSG associated with the NIC.
25506	RecoveryNetworkSecurityGroupID *string `json:"recoveryNetworkSecurityGroupId,omitempty"`
25507	// RecoveryLBBackendAddressPoolIds - The target backend address pools for the NIC.
25508	RecoveryLBBackendAddressPoolIds *[]string `json:"recoveryLBBackendAddressPoolIds,omitempty"`
25509	// EnableAcceleratedNetworkingOnRecovery - Whether the NIC has accelerated networking enabled.
25510	EnableAcceleratedNetworkingOnRecovery *bool `json:"enableAcceleratedNetworkingOnRecovery,omitempty"`
25511	// TfoVMSubnetName - The subnet to be used by NIC during test failover.
25512	TfoVMSubnetName *string `json:"tfoVMSubnetName,omitempty"`
25513	// TfoNetworkSecurityGroupID - The NSG to be used by NIC during test failover.
25514	TfoNetworkSecurityGroupID *string `json:"tfoNetworkSecurityGroupId,omitempty"`
25515	// EnableAcceleratedNetworkingOnTfo - Whether the test NIC has accelerated networking enabled.
25516	EnableAcceleratedNetworkingOnTfo *bool `json:"enableAcceleratedNetworkingOnTfo,omitempty"`
25517	// TfoIPConfigs - The IP configurations to be used by NIC during test failover.
25518	TfoIPConfigs *[]IPConfig `json:"tfoIPConfigs,omitempty"`
25519	// RecoveryNicName - The name of the NIC to be used when creating target NICs.
25520	RecoveryNicName *string `json:"recoveryNicName,omitempty"`
25521	// RecoveryNicResourceGroupName - The resource group of the NIC to be used when creating target NICs.
25522	RecoveryNicResourceGroupName *string `json:"recoveryNicResourceGroupName,omitempty"`
25523	// ReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during failover subject to availability.
25524	ReuseExistingNic *bool `json:"reuseExistingNic,omitempty"`
25525	// TfoNicName - The name of the NIC to be used when creating target NICs in TFO.
25526	TfoNicName *string `json:"tfoNicName,omitempty"`
25527	// TfoNicResourceGroupName - The resource group of the NIC to be used when creating target NICs in TFO.
25528	TfoNicResourceGroupName *string `json:"tfoNicResourceGroupName,omitempty"`
25529	// TfoReuseExistingNic - A value indicating whether an existing NIC is allowed to be reused during test failover subject to availability.
25530	TfoReuseExistingNic *bool `json:"tfoReuseExistingNic,omitempty"`
25531}
25532
25533// VMNicUpdatesTaskDetails this class represents the vm NicUpdates task details.
25534type VMNicUpdatesTaskDetails struct {
25535	// VMID - Virtual machine Id.
25536	VMID *string `json:"vmId,omitempty"`
25537	// NicID - Nic Id.
25538	NicID *string `json:"nicId,omitempty"`
25539	// Name - Name of the Nic.
25540	Name *string `json:"name,omitempty"`
25541	// InstanceType - Possible values include: 'InstanceTypeTaskTypeDetails', 'InstanceTypeAutomationRunbookTaskDetails', 'InstanceTypeConsistencyCheckTaskDetails', 'InstanceTypeFabricReplicationGroupTaskDetails', 'InstanceTypeJobTaskDetails', 'InstanceTypeManualActionTaskDetails', 'InstanceTypeScriptActionTaskDetails', 'InstanceTypeVirtualMachineTaskDetails', 'InstanceTypeVMNicUpdatesTaskDetails'
25542	InstanceType InstanceTypeBasicTaskTypeDetails `json:"instanceType,omitempty"`
25543}
25544
25545// MarshalJSON is the custom marshaler for VMNicUpdatesTaskDetails.
25546func (vnutd VMNicUpdatesTaskDetails) MarshalJSON() ([]byte, error) {
25547	vnutd.InstanceType = InstanceTypeVMNicUpdatesTaskDetails
25548	objectMap := make(map[string]interface{})
25549	if vnutd.VMID != nil {
25550		objectMap["vmId"] = vnutd.VMID
25551	}
25552	if vnutd.NicID != nil {
25553		objectMap["nicId"] = vnutd.NicID
25554	}
25555	if vnutd.Name != nil {
25556		objectMap["name"] = vnutd.Name
25557	}
25558	if vnutd.InstanceType != "" {
25559		objectMap["instanceType"] = vnutd.InstanceType
25560	}
25561	return json.Marshal(objectMap)
25562}
25563
25564// AsAutomationRunbookTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25565func (vnutd VMNicUpdatesTaskDetails) AsAutomationRunbookTaskDetails() (*AutomationRunbookTaskDetails, bool) {
25566	return nil, false
25567}
25568
25569// AsConsistencyCheckTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25570func (vnutd VMNicUpdatesTaskDetails) AsConsistencyCheckTaskDetails() (*ConsistencyCheckTaskDetails, bool) {
25571	return nil, false
25572}
25573
25574// AsFabricReplicationGroupTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25575func (vnutd VMNicUpdatesTaskDetails) AsFabricReplicationGroupTaskDetails() (*FabricReplicationGroupTaskDetails, bool) {
25576	return nil, false
25577}
25578
25579// AsJobTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25580func (vnutd VMNicUpdatesTaskDetails) AsJobTaskDetails() (*JobTaskDetails, bool) {
25581	return nil, false
25582}
25583
25584// AsManualActionTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25585func (vnutd VMNicUpdatesTaskDetails) AsManualActionTaskDetails() (*ManualActionTaskDetails, bool) {
25586	return nil, false
25587}
25588
25589// AsScriptActionTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25590func (vnutd VMNicUpdatesTaskDetails) AsScriptActionTaskDetails() (*ScriptActionTaskDetails, bool) {
25591	return nil, false
25592}
25593
25594// AsVirtualMachineTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25595func (vnutd VMNicUpdatesTaskDetails) AsVirtualMachineTaskDetails() (*VirtualMachineTaskDetails, bool) {
25596	return nil, false
25597}
25598
25599// AsVMNicUpdatesTaskDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25600func (vnutd VMNicUpdatesTaskDetails) AsVMNicUpdatesTaskDetails() (*VMNicUpdatesTaskDetails, bool) {
25601	return &vnutd, true
25602}
25603
25604// AsTaskTypeDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25605func (vnutd VMNicUpdatesTaskDetails) AsTaskTypeDetails() (*TaskTypeDetails, bool) {
25606	return nil, false
25607}
25608
25609// AsBasicTaskTypeDetails is the BasicTaskTypeDetails implementation for VMNicUpdatesTaskDetails.
25610func (vnutd VMNicUpdatesTaskDetails) AsBasicTaskTypeDetails() (BasicTaskTypeDetails, bool) {
25611	return &vnutd, true
25612}
25613
25614// VMwareCbtContainerCreationInput vMwareCbt container creation input.
25615type VMwareCbtContainerCreationInput struct {
25616	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeReplicationProviderSpecificContainerCreationInput', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero'
25617	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerCreationInput `json:"instanceType,omitempty"`
25618}
25619
25620// MarshalJSON is the custom marshaler for VMwareCbtContainerCreationInput.
25621func (vmccci VMwareCbtContainerCreationInput) MarshalJSON() ([]byte, error) {
25622	vmccci.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerCreationInputInstanceTypeSixcSevendaFourFiveFiveFiveZeroSixfFourThreeffAOneSixaEightebOneZeroOneaebbSevenZero
25623	objectMap := make(map[string]interface{})
25624	if vmccci.InstanceType != "" {
25625		objectMap["instanceType"] = vmccci.InstanceType
25626	}
25627	return json.Marshal(objectMap)
25628}
25629
25630// AsA2AContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
25631func (vmccci VMwareCbtContainerCreationInput) AsA2AContainerCreationInput() (*A2AContainerCreationInput, bool) {
25632	return nil, false
25633}
25634
25635// AsVMwareCbtContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
25636func (vmccci VMwareCbtContainerCreationInput) AsVMwareCbtContainerCreationInput() (*VMwareCbtContainerCreationInput, bool) {
25637	return &vmccci, true
25638}
25639
25640// AsReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
25641func (vmccci VMwareCbtContainerCreationInput) AsReplicationProviderSpecificContainerCreationInput() (*ReplicationProviderSpecificContainerCreationInput, bool) {
25642	return nil, false
25643}
25644
25645// AsBasicReplicationProviderSpecificContainerCreationInput is the BasicReplicationProviderSpecificContainerCreationInput implementation for VMwareCbtContainerCreationInput.
25646func (vmccci VMwareCbtContainerCreationInput) AsBasicReplicationProviderSpecificContainerCreationInput() (BasicReplicationProviderSpecificContainerCreationInput, bool) {
25647	return &vmccci, true
25648}
25649
25650// VMwareCbtContainerMappingInput vMwareCbt container mapping input.
25651type VMwareCbtContainerMappingInput struct {
25652	// KeyVaultID - The target key vault ARM Id.
25653	KeyVaultID *string `json:"keyVaultId,omitempty"`
25654	// KeyVaultURI - The target key vault URL.
25655	KeyVaultURI *string `json:"keyVaultUri,omitempty"`
25656	// StorageAccountID - The storage account ARM Id.
25657	StorageAccountID *string `json:"storageAccountId,omitempty"`
25658	// StorageAccountSasSecretName - The secret name of the storage account.
25659	StorageAccountSasSecretName *string `json:"storageAccountSasSecretName,omitempty"`
25660	// ServiceBusConnectionStringSecretName - The secret name of the service bus connection string.
25661	ServiceBusConnectionStringSecretName *string `json:"serviceBusConnectionStringSecretName,omitempty"`
25662	// TargetLocation - The target location.
25663	TargetLocation *string `json:"targetLocation,omitempty"`
25664	// InstanceType - Possible values include: 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeReplicationProviderSpecificContainerMappingInput', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeA2A', 'InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt'
25665	InstanceType InstanceTypeBasicReplicationProviderSpecificContainerMappingInput `json:"instanceType,omitempty"`
25666}
25667
25668// MarshalJSON is the custom marshaler for VMwareCbtContainerMappingInput.
25669func (vmccmi VMwareCbtContainerMappingInput) MarshalJSON() ([]byte, error) {
25670	vmccmi.InstanceType = InstanceTypeBasicReplicationProviderSpecificContainerMappingInputInstanceTypeVMwareCbt
25671	objectMap := make(map[string]interface{})
25672	if vmccmi.KeyVaultID != nil {
25673		objectMap["keyVaultId"] = vmccmi.KeyVaultID
25674	}
25675	if vmccmi.KeyVaultURI != nil {
25676		objectMap["keyVaultUri"] = vmccmi.KeyVaultURI
25677	}
25678	if vmccmi.StorageAccountID != nil {
25679		objectMap["storageAccountId"] = vmccmi.StorageAccountID
25680	}
25681	if vmccmi.StorageAccountSasSecretName != nil {
25682		objectMap["storageAccountSasSecretName"] = vmccmi.StorageAccountSasSecretName
25683	}
25684	if vmccmi.ServiceBusConnectionStringSecretName != nil {
25685		objectMap["serviceBusConnectionStringSecretName"] = vmccmi.ServiceBusConnectionStringSecretName
25686	}
25687	if vmccmi.TargetLocation != nil {
25688		objectMap["targetLocation"] = vmccmi.TargetLocation
25689	}
25690	if vmccmi.InstanceType != "" {
25691		objectMap["instanceType"] = vmccmi.InstanceType
25692	}
25693	return json.Marshal(objectMap)
25694}
25695
25696// AsA2AContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
25697func (vmccmi VMwareCbtContainerMappingInput) AsA2AContainerMappingInput() (*A2AContainerMappingInput, bool) {
25698	return nil, false
25699}
25700
25701// AsVMwareCbtContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
25702func (vmccmi VMwareCbtContainerMappingInput) AsVMwareCbtContainerMappingInput() (*VMwareCbtContainerMappingInput, bool) {
25703	return &vmccmi, true
25704}
25705
25706// AsReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
25707func (vmccmi VMwareCbtContainerMappingInput) AsReplicationProviderSpecificContainerMappingInput() (*ReplicationProviderSpecificContainerMappingInput, bool) {
25708	return nil, false
25709}
25710
25711// AsBasicReplicationProviderSpecificContainerMappingInput is the BasicReplicationProviderSpecificContainerMappingInput implementation for VMwareCbtContainerMappingInput.
25712func (vmccmi VMwareCbtContainerMappingInput) AsBasicReplicationProviderSpecificContainerMappingInput() (BasicReplicationProviderSpecificContainerMappingInput, bool) {
25713	return &vmccmi, true
25714}
25715
25716// VMwareCbtDiskInput vMwareCbt disk input.
25717type VMwareCbtDiskInput struct {
25718	// DiskID - The disk Id.
25719	DiskID *string `json:"diskId,omitempty"`
25720	// IsOSDisk - A value indicating whether the disk is the OS disk.
25721	IsOSDisk *string `json:"isOSDisk,omitempty"`
25722	// LogStorageAccountID - The log storage account ARM Id.
25723	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
25724	// LogStorageAccountSasSecretName - The key vault secret name of the log storage account.
25725	LogStorageAccountSasSecretName *string `json:"logStorageAccountSasSecretName,omitempty"`
25726	// DiskType - The disk type. Possible values include: 'StandardLRS', 'PremiumLRS', 'StandardSSDLRS'
25727	DiskType DiskAccountType `json:"diskType,omitempty"`
25728}
25729
25730// VMwareCbtEnableMigrationInput vMwareCbt specific enable migration input.
25731type VMwareCbtEnableMigrationInput struct {
25732	// VmwareMachineID - The ARM Id of the VM discovered in VMware.
25733	VmwareMachineID *string `json:"vmwareMachineId,omitempty"`
25734	// DisksToInclude - The disks to include list.
25735	DisksToInclude *[]VMwareCbtDiskInput `json:"disksToInclude,omitempty"`
25736	// LicenseType - License type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
25737	LicenseType LicenseType `json:"licenseType,omitempty"`
25738	// DataMoverRunAsAccountID - The data mover RunAs account Id.
25739	DataMoverRunAsAccountID *string `json:"dataMoverRunAsAccountId,omitempty"`
25740	// SnapshotRunAsAccountID - The snapshot RunAs account Id.
25741	SnapshotRunAsAccountID *string `json:"snapshotRunAsAccountId,omitempty"`
25742	// TargetVMName - The target VM name.
25743	TargetVMName *string `json:"targetVmName,omitempty"`
25744	// TargetVMSize - The target VM size.
25745	TargetVMSize *string `json:"targetVmSize,omitempty"`
25746	// TargetResourceGroupID - The target resource group ARM Id.
25747	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
25748	// TargetNetworkID - The target network ARM Id.
25749	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
25750	// TargetSubnetName - The target subnet name.
25751	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
25752	// TargetAvailabilitySetID - The target availability set ARM Id.
25753	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
25754	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
25755	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
25756	// InstanceType - Possible values include: 'InstanceTypeEnableMigrationProviderSpecificInput', 'InstanceTypeVMwareCbt'
25757	InstanceType InstanceTypeBasicEnableMigrationProviderSpecificInput `json:"instanceType,omitempty"`
25758}
25759
25760// MarshalJSON is the custom marshaler for VMwareCbtEnableMigrationInput.
25761func (vmcemi VMwareCbtEnableMigrationInput) MarshalJSON() ([]byte, error) {
25762	vmcemi.InstanceType = InstanceTypeVMwareCbt
25763	objectMap := make(map[string]interface{})
25764	if vmcemi.VmwareMachineID != nil {
25765		objectMap["vmwareMachineId"] = vmcemi.VmwareMachineID
25766	}
25767	if vmcemi.DisksToInclude != nil {
25768		objectMap["disksToInclude"] = vmcemi.DisksToInclude
25769	}
25770	if vmcemi.LicenseType != "" {
25771		objectMap["licenseType"] = vmcemi.LicenseType
25772	}
25773	if vmcemi.DataMoverRunAsAccountID != nil {
25774		objectMap["dataMoverRunAsAccountId"] = vmcemi.DataMoverRunAsAccountID
25775	}
25776	if vmcemi.SnapshotRunAsAccountID != nil {
25777		objectMap["snapshotRunAsAccountId"] = vmcemi.SnapshotRunAsAccountID
25778	}
25779	if vmcemi.TargetVMName != nil {
25780		objectMap["targetVmName"] = vmcemi.TargetVMName
25781	}
25782	if vmcemi.TargetVMSize != nil {
25783		objectMap["targetVmSize"] = vmcemi.TargetVMSize
25784	}
25785	if vmcemi.TargetResourceGroupID != nil {
25786		objectMap["targetResourceGroupId"] = vmcemi.TargetResourceGroupID
25787	}
25788	if vmcemi.TargetNetworkID != nil {
25789		objectMap["targetNetworkId"] = vmcemi.TargetNetworkID
25790	}
25791	if vmcemi.TargetSubnetName != nil {
25792		objectMap["targetSubnetName"] = vmcemi.TargetSubnetName
25793	}
25794	if vmcemi.TargetAvailabilitySetID != nil {
25795		objectMap["targetAvailabilitySetId"] = vmcemi.TargetAvailabilitySetID
25796	}
25797	if vmcemi.TargetBootDiagnosticsStorageAccountID != nil {
25798		objectMap["targetBootDiagnosticsStorageAccountId"] = vmcemi.TargetBootDiagnosticsStorageAccountID
25799	}
25800	if vmcemi.InstanceType != "" {
25801		objectMap["instanceType"] = vmcemi.InstanceType
25802	}
25803	return json.Marshal(objectMap)
25804}
25805
25806// AsVMwareCbtEnableMigrationInput is the BasicEnableMigrationProviderSpecificInput implementation for VMwareCbtEnableMigrationInput.
25807func (vmcemi VMwareCbtEnableMigrationInput) AsVMwareCbtEnableMigrationInput() (*VMwareCbtEnableMigrationInput, bool) {
25808	return &vmcemi, true
25809}
25810
25811// AsEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for VMwareCbtEnableMigrationInput.
25812func (vmcemi VMwareCbtEnableMigrationInput) AsEnableMigrationProviderSpecificInput() (*EnableMigrationProviderSpecificInput, bool) {
25813	return nil, false
25814}
25815
25816// AsBasicEnableMigrationProviderSpecificInput is the BasicEnableMigrationProviderSpecificInput implementation for VMwareCbtEnableMigrationInput.
25817func (vmcemi VMwareCbtEnableMigrationInput) AsBasicEnableMigrationProviderSpecificInput() (BasicEnableMigrationProviderSpecificInput, bool) {
25818	return &vmcemi, true
25819}
25820
25821// VMwareCbtMigrateInput vMwareCbt specific migrate input.
25822type VMwareCbtMigrateInput struct {
25823	// PerformShutdown - A value indicating whether VM is to be shutdown.
25824	PerformShutdown *string `json:"performShutdown,omitempty"`
25825	// InstanceType - Possible values include: 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeMigrateProviderSpecificInput', 'InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt'
25826	InstanceType InstanceTypeBasicMigrateProviderSpecificInput `json:"instanceType,omitempty"`
25827}
25828
25829// MarshalJSON is the custom marshaler for VMwareCbtMigrateInput.
25830func (vmcmi VMwareCbtMigrateInput) MarshalJSON() ([]byte, error) {
25831	vmcmi.InstanceType = InstanceTypeBasicMigrateProviderSpecificInputInstanceTypeVMwareCbt
25832	objectMap := make(map[string]interface{})
25833	if vmcmi.PerformShutdown != nil {
25834		objectMap["performShutdown"] = vmcmi.PerformShutdown
25835	}
25836	if vmcmi.InstanceType != "" {
25837		objectMap["instanceType"] = vmcmi.InstanceType
25838	}
25839	return json.Marshal(objectMap)
25840}
25841
25842// AsVMwareCbtMigrateInput is the BasicMigrateProviderSpecificInput implementation for VMwareCbtMigrateInput.
25843func (vmcmi VMwareCbtMigrateInput) AsVMwareCbtMigrateInput() (*VMwareCbtMigrateInput, bool) {
25844	return &vmcmi, true
25845}
25846
25847// AsMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for VMwareCbtMigrateInput.
25848func (vmcmi VMwareCbtMigrateInput) AsMigrateProviderSpecificInput() (*MigrateProviderSpecificInput, bool) {
25849	return nil, false
25850}
25851
25852// AsBasicMigrateProviderSpecificInput is the BasicMigrateProviderSpecificInput implementation for VMwareCbtMigrateInput.
25853func (vmcmi VMwareCbtMigrateInput) AsBasicMigrateProviderSpecificInput() (BasicMigrateProviderSpecificInput, bool) {
25854	return &vmcmi, true
25855}
25856
25857// VMwareCbtMigrationDetails vMwareCbt provider specific settings
25858type VMwareCbtMigrationDetails struct {
25859	// VmwareMachineID - READ-ONLY; The ARM Id of the VM discovered in VMware.
25860	VmwareMachineID *string `json:"vmwareMachineId,omitempty"`
25861	// OsType - READ-ONLY; The type of the OS on the VM.
25862	OsType *string `json:"osType,omitempty"`
25863	// LicenseType - License Type of the VM to be used.
25864	LicenseType *string `json:"licenseType,omitempty"`
25865	// DataMoverRunAsAccountID - READ-ONLY; The data mover RunAs account Id.
25866	DataMoverRunAsAccountID *string `json:"dataMoverRunAsAccountId,omitempty"`
25867	// SnapshotRunAsAccountID - READ-ONLY; The snapshot RunAs account Id.
25868	SnapshotRunAsAccountID *string `json:"snapshotRunAsAccountId,omitempty"`
25869	// TargetVMName - Target VM name.
25870	TargetVMName *string `json:"targetVmName,omitempty"`
25871	// TargetVMSize - The target VM size.
25872	TargetVMSize *string `json:"targetVmSize,omitempty"`
25873	// TargetLocation - READ-ONLY; The target location.
25874	TargetLocation *string `json:"targetLocation,omitempty"`
25875	// TargetResourceGroupID - The target resource group Id.
25876	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
25877	// TargetAvailabilitySetID - The target availability set Id.
25878	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
25879	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
25880	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
25881	// ProtectedDisks - The list of protected disks.
25882	ProtectedDisks *[]VMwareCbtProtectedDiskDetails `json:"protectedDisks,omitempty"`
25883	// TargetNetworkID - The target network Id.
25884	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
25885	// VMNics - The network details.
25886	VMNics *[]VMwareCbtNicDetails `json:"vmNics,omitempty"`
25887	// MigrationRecoveryPointID - READ-ONLY; The recovery point Id to which the VM was migrated.
25888	MigrationRecoveryPointID *string `json:"migrationRecoveryPointId,omitempty"`
25889	// LastRecoveryPointReceived - READ-ONLY; The last recovery point received time.
25890	LastRecoveryPointReceived *date.Time `json:"lastRecoveryPointReceived,omitempty"`
25891	// InstanceType - Possible values include: 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeMigrationProviderSpecificSettings', 'InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt'
25892	InstanceType InstanceTypeBasicMigrationProviderSpecificSettings `json:"instanceType,omitempty"`
25893}
25894
25895// MarshalJSON is the custom marshaler for VMwareCbtMigrationDetails.
25896func (vmcmd VMwareCbtMigrationDetails) MarshalJSON() ([]byte, error) {
25897	vmcmd.InstanceType = InstanceTypeBasicMigrationProviderSpecificSettingsInstanceTypeVMwareCbt
25898	objectMap := make(map[string]interface{})
25899	if vmcmd.LicenseType != nil {
25900		objectMap["licenseType"] = vmcmd.LicenseType
25901	}
25902	if vmcmd.TargetVMName != nil {
25903		objectMap["targetVmName"] = vmcmd.TargetVMName
25904	}
25905	if vmcmd.TargetVMSize != nil {
25906		objectMap["targetVmSize"] = vmcmd.TargetVMSize
25907	}
25908	if vmcmd.TargetResourceGroupID != nil {
25909		objectMap["targetResourceGroupId"] = vmcmd.TargetResourceGroupID
25910	}
25911	if vmcmd.TargetAvailabilitySetID != nil {
25912		objectMap["targetAvailabilitySetId"] = vmcmd.TargetAvailabilitySetID
25913	}
25914	if vmcmd.TargetBootDiagnosticsStorageAccountID != nil {
25915		objectMap["targetBootDiagnosticsStorageAccountId"] = vmcmd.TargetBootDiagnosticsStorageAccountID
25916	}
25917	if vmcmd.ProtectedDisks != nil {
25918		objectMap["protectedDisks"] = vmcmd.ProtectedDisks
25919	}
25920	if vmcmd.TargetNetworkID != nil {
25921		objectMap["targetNetworkId"] = vmcmd.TargetNetworkID
25922	}
25923	if vmcmd.VMNics != nil {
25924		objectMap["vmNics"] = vmcmd.VMNics
25925	}
25926	if vmcmd.InstanceType != "" {
25927		objectMap["instanceType"] = vmcmd.InstanceType
25928	}
25929	return json.Marshal(objectMap)
25930}
25931
25932// AsVMwareCbtMigrationDetails is the BasicMigrationProviderSpecificSettings implementation for VMwareCbtMigrationDetails.
25933func (vmcmd VMwareCbtMigrationDetails) AsVMwareCbtMigrationDetails() (*VMwareCbtMigrationDetails, bool) {
25934	return &vmcmd, true
25935}
25936
25937// AsMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for VMwareCbtMigrationDetails.
25938func (vmcmd VMwareCbtMigrationDetails) AsMigrationProviderSpecificSettings() (*MigrationProviderSpecificSettings, bool) {
25939	return nil, false
25940}
25941
25942// AsBasicMigrationProviderSpecificSettings is the BasicMigrationProviderSpecificSettings implementation for VMwareCbtMigrationDetails.
25943func (vmcmd VMwareCbtMigrationDetails) AsBasicMigrationProviderSpecificSettings() (BasicMigrationProviderSpecificSettings, bool) {
25944	return &vmcmd, true
25945}
25946
25947// VMwareCbtNicDetails vMwareCbt NIC details.
25948type VMwareCbtNicDetails struct {
25949	// NicID - READ-ONLY; The NIC Id.
25950	NicID *string `json:"nicId,omitempty"`
25951	// IsPrimaryNic - A value indicating whether this is the primary NIC.
25952	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
25953	// SourceIPAddress - READ-ONLY; The source IP address.
25954	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
25955	// SourceIPAddressType - READ-ONLY; The source IP address type. Possible values include: 'Dynamic', 'Static'
25956	SourceIPAddressType EthernetAddressType `json:"sourceIPAddressType,omitempty"`
25957	// SourceNetworkID - READ-ONLY; Source network Id.
25958	SourceNetworkID *string `json:"sourceNetworkId,omitempty"`
25959	// TargetIPAddress - The target IP address.
25960	TargetIPAddress *string `json:"targetIPAddress,omitempty"`
25961	// TargetIPAddressType - The target IP address type. Possible values include: 'Dynamic', 'Static'
25962	TargetIPAddressType EthernetAddressType `json:"targetIPAddressType,omitempty"`
25963	// TargetSubnetName - Target subnet name.
25964	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
25965	// IsSelectedForMigration - A value indicating whether this NIC is selected for migration.
25966	IsSelectedForMigration *string `json:"isSelectedForMigration,omitempty"`
25967}
25968
25969// MarshalJSON is the custom marshaler for VMwareCbtNicDetails.
25970func (vmcnd VMwareCbtNicDetails) MarshalJSON() ([]byte, error) {
25971	objectMap := make(map[string]interface{})
25972	if vmcnd.IsPrimaryNic != nil {
25973		objectMap["isPrimaryNic"] = vmcnd.IsPrimaryNic
25974	}
25975	if vmcnd.TargetIPAddress != nil {
25976		objectMap["targetIPAddress"] = vmcnd.TargetIPAddress
25977	}
25978	if vmcnd.TargetIPAddressType != "" {
25979		objectMap["targetIPAddressType"] = vmcnd.TargetIPAddressType
25980	}
25981	if vmcnd.TargetSubnetName != nil {
25982		objectMap["targetSubnetName"] = vmcnd.TargetSubnetName
25983	}
25984	if vmcnd.IsSelectedForMigration != nil {
25985		objectMap["isSelectedForMigration"] = vmcnd.IsSelectedForMigration
25986	}
25987	return json.Marshal(objectMap)
25988}
25989
25990// VMwareCbtNicInput vMwareCbt NIC input.
25991type VMwareCbtNicInput struct {
25992	// NicID - The NIC Id.
25993	NicID *string `json:"nicId,omitempty"`
25994	// IsPrimaryNic - A value indicating whether this is the primary NIC.
25995	IsPrimaryNic *string `json:"isPrimaryNic,omitempty"`
25996	// TargetSubnetName - Target subnet name.
25997	TargetSubnetName *string `json:"targetSubnetName,omitempty"`
25998	// TargetStaticIPAddress - The static IP address.
25999	TargetStaticIPAddress *string `json:"targetStaticIPAddress,omitempty"`
26000	// IsSelectedForMigration - A value indicating whether this NIC is selected for migration.
26001	IsSelectedForMigration *string `json:"isSelectedForMigration,omitempty"`
26002}
26003
26004// VMwareCbtPolicyCreationInput vMware Cbt policy creation input.
26005type VMwareCbtPolicyCreationInput struct {
26006	// RecoveryPointHistoryInMinutes - The duration in minutes until which the recovery points need to be stored.
26007	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
26008	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency (in minutes).
26009	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
26010	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency (in minutes).
26011	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
26012	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypePolicyProviderSpecificInput', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt'
26013	InstanceType InstanceTypeBasicPolicyProviderSpecificInput `json:"instanceType,omitempty"`
26014}
26015
26016// MarshalJSON is the custom marshaler for VMwareCbtPolicyCreationInput.
26017func (vmcpci VMwareCbtPolicyCreationInput) MarshalJSON() ([]byte, error) {
26018	vmcpci.InstanceType = InstanceTypeBasicPolicyProviderSpecificInputInstanceTypeVMwareCbt
26019	objectMap := make(map[string]interface{})
26020	if vmcpci.RecoveryPointHistoryInMinutes != nil {
26021		objectMap["recoveryPointHistoryInMinutes"] = vmcpci.RecoveryPointHistoryInMinutes
26022	}
26023	if vmcpci.CrashConsistentFrequencyInMinutes != nil {
26024		objectMap["crashConsistentFrequencyInMinutes"] = vmcpci.CrashConsistentFrequencyInMinutes
26025	}
26026	if vmcpci.AppConsistentFrequencyInMinutes != nil {
26027		objectMap["appConsistentFrequencyInMinutes"] = vmcpci.AppConsistentFrequencyInMinutes
26028	}
26029	if vmcpci.InstanceType != "" {
26030		objectMap["instanceType"] = vmcpci.InstanceType
26031	}
26032	return json.Marshal(objectMap)
26033}
26034
26035// AsA2APolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26036func (vmcpci VMwareCbtPolicyCreationInput) AsA2APolicyCreationInput() (*A2APolicyCreationInput, bool) {
26037	return nil, false
26038}
26039
26040// AsHyperVReplicaAzurePolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26041func (vmcpci VMwareCbtPolicyCreationInput) AsHyperVReplicaAzurePolicyInput() (*HyperVReplicaAzurePolicyInput, bool) {
26042	return nil, false
26043}
26044
26045// AsHyperVReplicaBluePolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26046func (vmcpci VMwareCbtPolicyCreationInput) AsHyperVReplicaBluePolicyInput() (*HyperVReplicaBluePolicyInput, bool) {
26047	return nil, false
26048}
26049
26050// AsHyperVReplicaPolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26051func (vmcpci VMwareCbtPolicyCreationInput) AsHyperVReplicaPolicyInput() (*HyperVReplicaPolicyInput, bool) {
26052	return nil, false
26053}
26054
26055// AsInMageAzureV2PolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26056func (vmcpci VMwareCbtPolicyCreationInput) AsInMageAzureV2PolicyInput() (*InMageAzureV2PolicyInput, bool) {
26057	return nil, false
26058}
26059
26060// AsInMagePolicyInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26061func (vmcpci VMwareCbtPolicyCreationInput) AsInMagePolicyInput() (*InMagePolicyInput, bool) {
26062	return nil, false
26063}
26064
26065// AsInMageRcmPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26066func (vmcpci VMwareCbtPolicyCreationInput) AsInMageRcmPolicyCreationInput() (*InMageRcmPolicyCreationInput, bool) {
26067	return nil, false
26068}
26069
26070// AsVMwareCbtPolicyCreationInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26071func (vmcpci VMwareCbtPolicyCreationInput) AsVMwareCbtPolicyCreationInput() (*VMwareCbtPolicyCreationInput, bool) {
26072	return &vmcpci, true
26073}
26074
26075// AsPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26076func (vmcpci VMwareCbtPolicyCreationInput) AsPolicyProviderSpecificInput() (*PolicyProviderSpecificInput, bool) {
26077	return nil, false
26078}
26079
26080// AsBasicPolicyProviderSpecificInput is the BasicPolicyProviderSpecificInput implementation for VMwareCbtPolicyCreationInput.
26081func (vmcpci VMwareCbtPolicyCreationInput) AsBasicPolicyProviderSpecificInput() (BasicPolicyProviderSpecificInput, bool) {
26082	return &vmcpci, true
26083}
26084
26085// VmwareCbtPolicyDetails vMware Cbt specific policy details.
26086type VmwareCbtPolicyDetails struct {
26087	// RecoveryPointHistoryInMinutes - The duration in minutes until which the recovery points need to be stored.
26088	RecoveryPointHistoryInMinutes *int32 `json:"recoveryPointHistoryInMinutes,omitempty"`
26089	// AppConsistentFrequencyInMinutes - The app consistent snapshot frequency in minutes.
26090	AppConsistentFrequencyInMinutes *int32 `json:"appConsistentFrequencyInMinutes,omitempty"`
26091	// CrashConsistentFrequencyInMinutes - The crash consistent snapshot frequency in minutes.
26092	CrashConsistentFrequencyInMinutes *int32 `json:"crashConsistentFrequencyInMinutes,omitempty"`
26093	// InstanceType - Possible values include: 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypePolicyProviderSpecificDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaAzure', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplicaBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012R2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeHyperVReplica2012', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageAzureV2', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageBasePolicyDetails', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMage', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeRcmAzureMigration', 'InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt'
26094	InstanceType InstanceTypeBasicPolicyProviderSpecificDetails `json:"instanceType,omitempty"`
26095}
26096
26097// MarshalJSON is the custom marshaler for VmwareCbtPolicyDetails.
26098func (vcpd VmwareCbtPolicyDetails) MarshalJSON() ([]byte, error) {
26099	vcpd.InstanceType = InstanceTypeBasicPolicyProviderSpecificDetailsInstanceTypeVMwareCbt
26100	objectMap := make(map[string]interface{})
26101	if vcpd.RecoveryPointHistoryInMinutes != nil {
26102		objectMap["recoveryPointHistoryInMinutes"] = vcpd.RecoveryPointHistoryInMinutes
26103	}
26104	if vcpd.AppConsistentFrequencyInMinutes != nil {
26105		objectMap["appConsistentFrequencyInMinutes"] = vcpd.AppConsistentFrequencyInMinutes
26106	}
26107	if vcpd.CrashConsistentFrequencyInMinutes != nil {
26108		objectMap["crashConsistentFrequencyInMinutes"] = vcpd.CrashConsistentFrequencyInMinutes
26109	}
26110	if vcpd.InstanceType != "" {
26111		objectMap["instanceType"] = vcpd.InstanceType
26112	}
26113	return json.Marshal(objectMap)
26114}
26115
26116// AsA2APolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26117func (vcpd VmwareCbtPolicyDetails) AsA2APolicyDetails() (*A2APolicyDetails, bool) {
26118	return nil, false
26119}
26120
26121// AsHyperVReplicaAzurePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26122func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaAzurePolicyDetails() (*HyperVReplicaAzurePolicyDetails, bool) {
26123	return nil, false
26124}
26125
26126// AsHyperVReplicaBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26127func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaBasePolicyDetails() (*HyperVReplicaBasePolicyDetails, bool) {
26128	return nil, false
26129}
26130
26131// AsHyperVReplicaBluePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26132func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaBluePolicyDetails() (*HyperVReplicaBluePolicyDetails, bool) {
26133	return nil, false
26134}
26135
26136// AsHyperVReplicaPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26137func (vcpd VmwareCbtPolicyDetails) AsHyperVReplicaPolicyDetails() (*HyperVReplicaPolicyDetails, bool) {
26138	return nil, false
26139}
26140
26141// AsInMageAzureV2PolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26142func (vcpd VmwareCbtPolicyDetails) AsInMageAzureV2PolicyDetails() (*InMageAzureV2PolicyDetails, bool) {
26143	return nil, false
26144}
26145
26146// AsInMageBasePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26147func (vcpd VmwareCbtPolicyDetails) AsInMageBasePolicyDetails() (*InMageBasePolicyDetails, bool) {
26148	return nil, false
26149}
26150
26151// AsInMagePolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26152func (vcpd VmwareCbtPolicyDetails) AsInMagePolicyDetails() (*InMagePolicyDetails, bool) {
26153	return nil, false
26154}
26155
26156// AsInMageRcmPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26157func (vcpd VmwareCbtPolicyDetails) AsInMageRcmPolicyDetails() (*InMageRcmPolicyDetails, bool) {
26158	return nil, false
26159}
26160
26161// AsRcmAzureMigrationPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26162func (vcpd VmwareCbtPolicyDetails) AsRcmAzureMigrationPolicyDetails() (*RcmAzureMigrationPolicyDetails, bool) {
26163	return nil, false
26164}
26165
26166// AsVmwareCbtPolicyDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26167func (vcpd VmwareCbtPolicyDetails) AsVmwareCbtPolicyDetails() (*VmwareCbtPolicyDetails, bool) {
26168	return &vcpd, true
26169}
26170
26171// AsPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26172func (vcpd VmwareCbtPolicyDetails) AsPolicyProviderSpecificDetails() (*PolicyProviderSpecificDetails, bool) {
26173	return nil, false
26174}
26175
26176// AsBasicPolicyProviderSpecificDetails is the BasicPolicyProviderSpecificDetails implementation for VmwareCbtPolicyDetails.
26177func (vcpd VmwareCbtPolicyDetails) AsBasicPolicyProviderSpecificDetails() (BasicPolicyProviderSpecificDetails, bool) {
26178	return &vcpd, true
26179}
26180
26181// VMwareCbtProtectedDiskDetails vMwareCbt protected disk details.
26182type VMwareCbtProtectedDiskDetails struct {
26183	// DiskID - READ-ONLY; The disk id.
26184	DiskID *string `json:"diskId,omitempty"`
26185	// DiskName - READ-ONLY; The disk name.
26186	DiskName *string `json:"diskName,omitempty"`
26187	// DiskPath - READ-ONLY; The disk path.
26188	DiskPath *string `json:"diskPath,omitempty"`
26189	// IsOSDisk - READ-ONLY; A value indicating whether the disk is the OS disk.
26190	IsOSDisk *string `json:"isOSDisk,omitempty"`
26191	// CapacityInBytes - READ-ONLY; The disk capacity in bytes.
26192	CapacityInBytes *int64 `json:"capacityInBytes,omitempty"`
26193	// LogStorageAccountID - READ-ONLY; The log storage account ARM Id.
26194	LogStorageAccountID *string `json:"logStorageAccountId,omitempty"`
26195	// LogStorageAccountSasSecretName - READ-ONLY; The key vault secret name of the log storage account.
26196	LogStorageAccountSasSecretName *string `json:"logStorageAccountSasSecretName,omitempty"`
26197	// SeedManagedDiskID - READ-ONLY; The ARM Id of the seed managed disk.
26198	SeedManagedDiskID *string `json:"seedManagedDiskId,omitempty"`
26199	// TargetManagedDiskID - READ-ONLY; The ARM Id of the target managed disk.
26200	TargetManagedDiskID *string `json:"targetManagedDiskId,omitempty"`
26201	// DiskType - The disk type. Possible values include: 'DiskTypeStandardLRS', 'DiskTypePremiumLRS', 'DiskTypeStandardSSDLRS'
26202	DiskType DiskType `json:"diskType,omitempty"`
26203}
26204
26205// MarshalJSON is the custom marshaler for VMwareCbtProtectedDiskDetails.
26206func (vmcpdd VMwareCbtProtectedDiskDetails) MarshalJSON() ([]byte, error) {
26207	objectMap := make(map[string]interface{})
26208	if vmcpdd.DiskType != "" {
26209		objectMap["diskType"] = vmcpdd.DiskType
26210	}
26211	return json.Marshal(objectMap)
26212}
26213
26214// VMwareCbtProtectionContainerMappingDetails vMwareCbt provider specific container mapping details.
26215type VMwareCbtProtectionContainerMappingDetails struct {
26216	// KeyVaultID - READ-ONLY; The target key vault ARM Id.
26217	KeyVaultID *string `json:"keyVaultId,omitempty"`
26218	// KeyVaultURI - READ-ONLY; The target key vault URI.
26219	KeyVaultURI *string `json:"keyVaultUri,omitempty"`
26220	// StorageAccountID - READ-ONLY; The storage account ARM Id.
26221	StorageAccountID *string `json:"storageAccountId,omitempty"`
26222	// StorageAccountSasSecretName - READ-ONLY; The secret name of the storage account.
26223	StorageAccountSasSecretName *string `json:"storageAccountSasSecretName,omitempty"`
26224	// ServiceBusConnectionStringSecretName - READ-ONLY; The secret name of the service bus connection string.
26225	ServiceBusConnectionStringSecretName *string `json:"serviceBusConnectionStringSecretName,omitempty"`
26226	// TargetLocation - READ-ONLY; The target location.
26227	TargetLocation *string `json:"targetLocation,omitempty"`
26228	// InstanceType - Possible values include: 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeProtectionContainerMappingProviderSpecificDetails', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeA2A', 'InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt'
26229	InstanceType InstanceTypeBasicProtectionContainerMappingProviderSpecificDetails `json:"instanceType,omitempty"`
26230}
26231
26232// MarshalJSON is the custom marshaler for VMwareCbtProtectionContainerMappingDetails.
26233func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) MarshalJSON() ([]byte, error) {
26234	vmcpcmd.InstanceType = InstanceTypeBasicProtectionContainerMappingProviderSpecificDetailsInstanceTypeVMwareCbt
26235	objectMap := make(map[string]interface{})
26236	if vmcpcmd.InstanceType != "" {
26237		objectMap["instanceType"] = vmcpcmd.InstanceType
26238	}
26239	return json.Marshal(objectMap)
26240}
26241
26242// AsA2AProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
26243func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsA2AProtectionContainerMappingDetails() (*A2AProtectionContainerMappingDetails, bool) {
26244	return nil, false
26245}
26246
26247// AsVMwareCbtProtectionContainerMappingDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
26248func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsVMwareCbtProtectionContainerMappingDetails() (*VMwareCbtProtectionContainerMappingDetails, bool) {
26249	return &vmcpcmd, true
26250}
26251
26252// AsProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
26253func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsProtectionContainerMappingProviderSpecificDetails() (*ProtectionContainerMappingProviderSpecificDetails, bool) {
26254	return nil, false
26255}
26256
26257// AsBasicProtectionContainerMappingProviderSpecificDetails is the BasicProtectionContainerMappingProviderSpecificDetails implementation for VMwareCbtProtectionContainerMappingDetails.
26258func (vmcpcmd VMwareCbtProtectionContainerMappingDetails) AsBasicProtectionContainerMappingProviderSpecificDetails() (BasicProtectionContainerMappingProviderSpecificDetails, bool) {
26259	return &vmcpcmd, true
26260}
26261
26262// VMwareCbtTestMigrateInput vMwareCbt specific test migrate input.
26263type VMwareCbtTestMigrateInput struct {
26264	// RecoveryPointID - The recovery point Id.
26265	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
26266	// NetworkID - The test network Id.
26267	NetworkID *string `json:"networkId,omitempty"`
26268	// InstanceType - Possible values include: 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeTestMigrateProviderSpecificInput', 'InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt'
26269	InstanceType InstanceTypeBasicTestMigrateProviderSpecificInput `json:"instanceType,omitempty"`
26270}
26271
26272// MarshalJSON is the custom marshaler for VMwareCbtTestMigrateInput.
26273func (vmctmi VMwareCbtTestMigrateInput) MarshalJSON() ([]byte, error) {
26274	vmctmi.InstanceType = InstanceTypeBasicTestMigrateProviderSpecificInputInstanceTypeVMwareCbt
26275	objectMap := make(map[string]interface{})
26276	if vmctmi.RecoveryPointID != nil {
26277		objectMap["recoveryPointId"] = vmctmi.RecoveryPointID
26278	}
26279	if vmctmi.NetworkID != nil {
26280		objectMap["networkId"] = vmctmi.NetworkID
26281	}
26282	if vmctmi.InstanceType != "" {
26283		objectMap["instanceType"] = vmctmi.InstanceType
26284	}
26285	return json.Marshal(objectMap)
26286}
26287
26288// AsVMwareCbtTestMigrateInput is the BasicTestMigrateProviderSpecificInput implementation for VMwareCbtTestMigrateInput.
26289func (vmctmi VMwareCbtTestMigrateInput) AsVMwareCbtTestMigrateInput() (*VMwareCbtTestMigrateInput, bool) {
26290	return &vmctmi, true
26291}
26292
26293// AsTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for VMwareCbtTestMigrateInput.
26294func (vmctmi VMwareCbtTestMigrateInput) AsTestMigrateProviderSpecificInput() (*TestMigrateProviderSpecificInput, bool) {
26295	return nil, false
26296}
26297
26298// AsBasicTestMigrateProviderSpecificInput is the BasicTestMigrateProviderSpecificInput implementation for VMwareCbtTestMigrateInput.
26299func (vmctmi VMwareCbtTestMigrateInput) AsBasicTestMigrateProviderSpecificInput() (BasicTestMigrateProviderSpecificInput, bool) {
26300	return &vmctmi, true
26301}
26302
26303// VMwareCbtUpdateMigrationItemInput vMwareCbt specific update migration item input.
26304type VMwareCbtUpdateMigrationItemInput struct {
26305	// TargetVMName - The target VM name.
26306	TargetVMName *string `json:"targetVmName,omitempty"`
26307	// TargetVMSize - The target VM size.
26308	TargetVMSize *string `json:"targetVmSize,omitempty"`
26309	// TargetResourceGroupID - The target resource group ARM Id.
26310	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
26311	// TargetAvailabilitySetID - The target availability set ARM Id.
26312	TargetAvailabilitySetID *string `json:"targetAvailabilitySetId,omitempty"`
26313	// TargetBootDiagnosticsStorageAccountID - The target boot diagnostics storage account ARM Id.
26314	TargetBootDiagnosticsStorageAccountID *string `json:"targetBootDiagnosticsStorageAccountId,omitempty"`
26315	// TargetNetworkID - The target network ARM Id.
26316	TargetNetworkID *string `json:"targetNetworkId,omitempty"`
26317	// VMNics - The list of NIC details.
26318	VMNics *[]VMwareCbtNicInput `json:"vmNics,omitempty"`
26319	// LicenseType - The license type. Possible values include: 'LicenseTypeNotSpecified', 'LicenseTypeNoLicenseType', 'LicenseTypeWindowsServer'
26320	LicenseType LicenseType `json:"licenseType,omitempty"`
26321	// InstanceType - Possible values include: 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeUpdateMigrationItemProviderSpecificInput', 'InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt'
26322	InstanceType InstanceTypeBasicUpdateMigrationItemProviderSpecificInput `json:"instanceType,omitempty"`
26323}
26324
26325// MarshalJSON is the custom marshaler for VMwareCbtUpdateMigrationItemInput.
26326func (vmcumii VMwareCbtUpdateMigrationItemInput) MarshalJSON() ([]byte, error) {
26327	vmcumii.InstanceType = InstanceTypeBasicUpdateMigrationItemProviderSpecificInputInstanceTypeVMwareCbt
26328	objectMap := make(map[string]interface{})
26329	if vmcumii.TargetVMName != nil {
26330		objectMap["targetVmName"] = vmcumii.TargetVMName
26331	}
26332	if vmcumii.TargetVMSize != nil {
26333		objectMap["targetVmSize"] = vmcumii.TargetVMSize
26334	}
26335	if vmcumii.TargetResourceGroupID != nil {
26336		objectMap["targetResourceGroupId"] = vmcumii.TargetResourceGroupID
26337	}
26338	if vmcumii.TargetAvailabilitySetID != nil {
26339		objectMap["targetAvailabilitySetId"] = vmcumii.TargetAvailabilitySetID
26340	}
26341	if vmcumii.TargetBootDiagnosticsStorageAccountID != nil {
26342		objectMap["targetBootDiagnosticsStorageAccountId"] = vmcumii.TargetBootDiagnosticsStorageAccountID
26343	}
26344	if vmcumii.TargetNetworkID != nil {
26345		objectMap["targetNetworkId"] = vmcumii.TargetNetworkID
26346	}
26347	if vmcumii.VMNics != nil {
26348		objectMap["vmNics"] = vmcumii.VMNics
26349	}
26350	if vmcumii.LicenseType != "" {
26351		objectMap["licenseType"] = vmcumii.LicenseType
26352	}
26353	if vmcumii.InstanceType != "" {
26354		objectMap["instanceType"] = vmcumii.InstanceType
26355	}
26356	return json.Marshal(objectMap)
26357}
26358
26359// AsVMwareCbtUpdateMigrationItemInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for VMwareCbtUpdateMigrationItemInput.
26360func (vmcumii VMwareCbtUpdateMigrationItemInput) AsVMwareCbtUpdateMigrationItemInput() (*VMwareCbtUpdateMigrationItemInput, bool) {
26361	return &vmcumii, true
26362}
26363
26364// AsUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for VMwareCbtUpdateMigrationItemInput.
26365func (vmcumii VMwareCbtUpdateMigrationItemInput) AsUpdateMigrationItemProviderSpecificInput() (*UpdateMigrationItemProviderSpecificInput, bool) {
26366	return nil, false
26367}
26368
26369// AsBasicUpdateMigrationItemProviderSpecificInput is the BasicUpdateMigrationItemProviderSpecificInput implementation for VMwareCbtUpdateMigrationItemInput.
26370func (vmcumii VMwareCbtUpdateMigrationItemInput) AsBasicUpdateMigrationItemProviderSpecificInput() (BasicUpdateMigrationItemProviderSpecificInput, bool) {
26371	return &vmcumii, true
26372}
26373
26374// VMwareDetails store the fabric details specific to the VMware fabric.
26375type VMwareDetails struct {
26376	// ProcessServers - The list of Process Servers associated with the fabric.
26377	ProcessServers *[]ProcessServer `json:"processServers,omitempty"`
26378	// MasterTargetServers - The list of Master Target servers associated with the fabric.
26379	MasterTargetServers *[]MasterTargetServer `json:"masterTargetServers,omitempty"`
26380	// RunAsAccounts - The list of run as accounts created on the server.
26381	RunAsAccounts *[]RunAsAccount `json:"runAsAccounts,omitempty"`
26382	// ReplicationPairCount - The number of replication pairs configured in this CS.
26383	ReplicationPairCount *string `json:"replicationPairCount,omitempty"`
26384	// ProcessServerCount - The number of process servers.
26385	ProcessServerCount *string `json:"processServerCount,omitempty"`
26386	// AgentCount - The number of source and target servers configured to talk to this CS.
26387	AgentCount *string `json:"agentCount,omitempty"`
26388	// ProtectedServers - The number of protected servers.
26389	ProtectedServers *string `json:"protectedServers,omitempty"`
26390	// SystemLoad - The percentage of the system load.
26391	SystemLoad *string `json:"systemLoad,omitempty"`
26392	// SystemLoadStatus - The system load status.
26393	SystemLoadStatus *string `json:"systemLoadStatus,omitempty"`
26394	// CPULoad - The percentage of the CPU load.
26395	CPULoad *string `json:"cpuLoad,omitempty"`
26396	// CPULoadStatus - The CPU load status.
26397	CPULoadStatus *string `json:"cpuLoadStatus,omitempty"`
26398	// TotalMemoryInBytes - The total memory.
26399	TotalMemoryInBytes *int64 `json:"totalMemoryInBytes,omitempty"`
26400	// AvailableMemoryInBytes - The available memory.
26401	AvailableMemoryInBytes *int64 `json:"availableMemoryInBytes,omitempty"`
26402	// MemoryUsageStatus - The memory usage status.
26403	MemoryUsageStatus *string `json:"memoryUsageStatus,omitempty"`
26404	// TotalSpaceInBytes - The total space.
26405	TotalSpaceInBytes *int64 `json:"totalSpaceInBytes,omitempty"`
26406	// AvailableSpaceInBytes - The available space.
26407	AvailableSpaceInBytes *int64 `json:"availableSpaceInBytes,omitempty"`
26408	// SpaceUsageStatus - The space usage status.
26409	SpaceUsageStatus *string `json:"spaceUsageStatus,omitempty"`
26410	// WebLoad - The web load.
26411	WebLoad *string `json:"webLoad,omitempty"`
26412	// WebLoadStatus - The web load status.
26413	WebLoadStatus *string `json:"webLoadStatus,omitempty"`
26414	// DatabaseServerLoad - The database server load.
26415	DatabaseServerLoad *string `json:"databaseServerLoad,omitempty"`
26416	// DatabaseServerLoadStatus - The database server load status.
26417	DatabaseServerLoadStatus *string `json:"databaseServerLoadStatus,omitempty"`
26418	// CsServiceStatus - The CS service status.
26419	CsServiceStatus *string `json:"csServiceStatus,omitempty"`
26420	// IPAddress - The IP address.
26421	IPAddress *string `json:"ipAddress,omitempty"`
26422	// AgentVersion - The agent Version.
26423	AgentVersion *string `json:"agentVersion,omitempty"`
26424	// HostName - The host name.
26425	HostName *string `json:"hostName,omitempty"`
26426	// LastHeartbeat - The last heartbeat received from CS server.
26427	LastHeartbeat *date.Time `json:"lastHeartbeat,omitempty"`
26428	// VersionStatus - Version status
26429	VersionStatus *string `json:"versionStatus,omitempty"`
26430	// SslCertExpiryDate - CS SSL cert expiry date.
26431	SslCertExpiryDate *date.Time `json:"sslCertExpiryDate,omitempty"`
26432	// SslCertExpiryRemainingDays - CS SSL cert expiry date.
26433	SslCertExpiryRemainingDays *int32 `json:"sslCertExpiryRemainingDays,omitempty"`
26434	// PsTemplateVersion - PS template version.
26435	PsTemplateVersion *string `json:"psTemplateVersion,omitempty"`
26436	// AgentExpiryDate - Agent expiry date.
26437	AgentExpiryDate *date.Time `json:"agentExpiryDate,omitempty"`
26438	// AgentVersionDetails - The agent version details.
26439	AgentVersionDetails *VersionDetails `json:"agentVersionDetails,omitempty"`
26440	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
26441	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
26442}
26443
26444// MarshalJSON is the custom marshaler for VMwareDetails.
26445func (vmd VMwareDetails) MarshalJSON() ([]byte, error) {
26446	vmd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware
26447	objectMap := make(map[string]interface{})
26448	if vmd.ProcessServers != nil {
26449		objectMap["processServers"] = vmd.ProcessServers
26450	}
26451	if vmd.MasterTargetServers != nil {
26452		objectMap["masterTargetServers"] = vmd.MasterTargetServers
26453	}
26454	if vmd.RunAsAccounts != nil {
26455		objectMap["runAsAccounts"] = vmd.RunAsAccounts
26456	}
26457	if vmd.ReplicationPairCount != nil {
26458		objectMap["replicationPairCount"] = vmd.ReplicationPairCount
26459	}
26460	if vmd.ProcessServerCount != nil {
26461		objectMap["processServerCount"] = vmd.ProcessServerCount
26462	}
26463	if vmd.AgentCount != nil {
26464		objectMap["agentCount"] = vmd.AgentCount
26465	}
26466	if vmd.ProtectedServers != nil {
26467		objectMap["protectedServers"] = vmd.ProtectedServers
26468	}
26469	if vmd.SystemLoad != nil {
26470		objectMap["systemLoad"] = vmd.SystemLoad
26471	}
26472	if vmd.SystemLoadStatus != nil {
26473		objectMap["systemLoadStatus"] = vmd.SystemLoadStatus
26474	}
26475	if vmd.CPULoad != nil {
26476		objectMap["cpuLoad"] = vmd.CPULoad
26477	}
26478	if vmd.CPULoadStatus != nil {
26479		objectMap["cpuLoadStatus"] = vmd.CPULoadStatus
26480	}
26481	if vmd.TotalMemoryInBytes != nil {
26482		objectMap["totalMemoryInBytes"] = vmd.TotalMemoryInBytes
26483	}
26484	if vmd.AvailableMemoryInBytes != nil {
26485		objectMap["availableMemoryInBytes"] = vmd.AvailableMemoryInBytes
26486	}
26487	if vmd.MemoryUsageStatus != nil {
26488		objectMap["memoryUsageStatus"] = vmd.MemoryUsageStatus
26489	}
26490	if vmd.TotalSpaceInBytes != nil {
26491		objectMap["totalSpaceInBytes"] = vmd.TotalSpaceInBytes
26492	}
26493	if vmd.AvailableSpaceInBytes != nil {
26494		objectMap["availableSpaceInBytes"] = vmd.AvailableSpaceInBytes
26495	}
26496	if vmd.SpaceUsageStatus != nil {
26497		objectMap["spaceUsageStatus"] = vmd.SpaceUsageStatus
26498	}
26499	if vmd.WebLoad != nil {
26500		objectMap["webLoad"] = vmd.WebLoad
26501	}
26502	if vmd.WebLoadStatus != nil {
26503		objectMap["webLoadStatus"] = vmd.WebLoadStatus
26504	}
26505	if vmd.DatabaseServerLoad != nil {
26506		objectMap["databaseServerLoad"] = vmd.DatabaseServerLoad
26507	}
26508	if vmd.DatabaseServerLoadStatus != nil {
26509		objectMap["databaseServerLoadStatus"] = vmd.DatabaseServerLoadStatus
26510	}
26511	if vmd.CsServiceStatus != nil {
26512		objectMap["csServiceStatus"] = vmd.CsServiceStatus
26513	}
26514	if vmd.IPAddress != nil {
26515		objectMap["ipAddress"] = vmd.IPAddress
26516	}
26517	if vmd.AgentVersion != nil {
26518		objectMap["agentVersion"] = vmd.AgentVersion
26519	}
26520	if vmd.HostName != nil {
26521		objectMap["hostName"] = vmd.HostName
26522	}
26523	if vmd.LastHeartbeat != nil {
26524		objectMap["lastHeartbeat"] = vmd.LastHeartbeat
26525	}
26526	if vmd.VersionStatus != nil {
26527		objectMap["versionStatus"] = vmd.VersionStatus
26528	}
26529	if vmd.SslCertExpiryDate != nil {
26530		objectMap["sslCertExpiryDate"] = vmd.SslCertExpiryDate
26531	}
26532	if vmd.SslCertExpiryRemainingDays != nil {
26533		objectMap["sslCertExpiryRemainingDays"] = vmd.SslCertExpiryRemainingDays
26534	}
26535	if vmd.PsTemplateVersion != nil {
26536		objectMap["psTemplateVersion"] = vmd.PsTemplateVersion
26537	}
26538	if vmd.AgentExpiryDate != nil {
26539		objectMap["agentExpiryDate"] = vmd.AgentExpiryDate
26540	}
26541	if vmd.AgentVersionDetails != nil {
26542		objectMap["agentVersionDetails"] = vmd.AgentVersionDetails
26543	}
26544	if vmd.InstanceType != "" {
26545		objectMap["instanceType"] = vmd.InstanceType
26546	}
26547	return json.Marshal(objectMap)
26548}
26549
26550// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26551func (vmd VMwareDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
26552	return nil, false
26553}
26554
26555// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26556func (vmd VMwareDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
26557	return nil, false
26558}
26559
26560// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26561func (vmd VMwareDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
26562	return nil, false
26563}
26564
26565// AsVmmDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26566func (vmd VMwareDetails) AsVmmDetails() (*VmmDetails, bool) {
26567	return nil, false
26568}
26569
26570// AsVMwareDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26571func (vmd VMwareDetails) AsVMwareDetails() (*VMwareDetails, bool) {
26572	return &vmd, true
26573}
26574
26575// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26576func (vmd VMwareDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
26577	return nil, false
26578}
26579
26580// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26581func (vmd VMwareDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
26582	return nil, false
26583}
26584
26585// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareDetails.
26586func (vmd VMwareDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
26587	return &vmd, true
26588}
26589
26590// VMwareV2FabricCreationInput vMwareV2 fabric provider specific settings.
26591type VMwareV2FabricCreationInput struct {
26592	// VmwareSiteID - The ARM Id of the VMware site.
26593	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
26594	// MigrationSolutionID - The ARM Id of the migration solution.
26595	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
26596	// InstanceType - Possible values include: 'InstanceTypeFabricSpecificCreationInput', 'InstanceTypeAzure', 'InstanceTypeInMageRcm', 'InstanceTypeVMwareV2'
26597	InstanceType InstanceTypeBasicFabricSpecificCreationInput `json:"instanceType,omitempty"`
26598}
26599
26600// MarshalJSON is the custom marshaler for VMwareV2FabricCreationInput.
26601func (vmvfci VMwareV2FabricCreationInput) MarshalJSON() ([]byte, error) {
26602	vmvfci.InstanceType = InstanceTypeVMwareV2
26603	objectMap := make(map[string]interface{})
26604	if vmvfci.VmwareSiteID != nil {
26605		objectMap["vmwareSiteId"] = vmvfci.VmwareSiteID
26606	}
26607	if vmvfci.MigrationSolutionID != nil {
26608		objectMap["migrationSolutionId"] = vmvfci.MigrationSolutionID
26609	}
26610	if vmvfci.InstanceType != "" {
26611		objectMap["instanceType"] = vmvfci.InstanceType
26612	}
26613	return json.Marshal(objectMap)
26614}
26615
26616// AsAzureFabricCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
26617func (vmvfci VMwareV2FabricCreationInput) AsAzureFabricCreationInput() (*AzureFabricCreationInput, bool) {
26618	return nil, false
26619}
26620
26621// AsInMageRcmFabricCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
26622func (vmvfci VMwareV2FabricCreationInput) AsInMageRcmFabricCreationInput() (*InMageRcmFabricCreationInput, bool) {
26623	return nil, false
26624}
26625
26626// AsVMwareV2FabricCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
26627func (vmvfci VMwareV2FabricCreationInput) AsVMwareV2FabricCreationInput() (*VMwareV2FabricCreationInput, bool) {
26628	return &vmvfci, true
26629}
26630
26631// AsFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
26632func (vmvfci VMwareV2FabricCreationInput) AsFabricSpecificCreationInput() (*FabricSpecificCreationInput, bool) {
26633	return nil, false
26634}
26635
26636// AsBasicFabricSpecificCreationInput is the BasicFabricSpecificCreationInput implementation for VMwareV2FabricCreationInput.
26637func (vmvfci VMwareV2FabricCreationInput) AsBasicFabricSpecificCreationInput() (BasicFabricSpecificCreationInput, bool) {
26638	return &vmvfci, true
26639}
26640
26641// VMwareV2FabricSpecificDetails vMwareV2 fabric specific details.
26642type VMwareV2FabricSpecificDetails struct {
26643	// VmwareSiteID - READ-ONLY; The ARM Id of the VMware site.
26644	VmwareSiteID *string `json:"vmwareSiteId,omitempty"`
26645	// MigrationSolutionID - READ-ONLY; The Migration solution ARM Id.
26646	MigrationSolutionID *string `json:"migrationSolutionId,omitempty"`
26647	// ServiceEndpoint - READ-ONLY; The service endpoint.
26648	ServiceEndpoint *string `json:"serviceEndpoint,omitempty"`
26649	// ServiceResourceID - READ-ONLY; The service resource Id.
26650	ServiceResourceID *string `json:"serviceResourceId,omitempty"`
26651	// InstanceType - Possible values include: 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeFabricSpecificDetails', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeAzure', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeHyperVSite', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeInMageRcm', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMM', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMware', 'InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2'
26652	InstanceType InstanceTypeBasicFabricSpecificDetails `json:"instanceType,omitempty"`
26653}
26654
26655// MarshalJSON is the custom marshaler for VMwareV2FabricSpecificDetails.
26656func (vmvfsd VMwareV2FabricSpecificDetails) MarshalJSON() ([]byte, error) {
26657	vmvfsd.InstanceType = InstanceTypeBasicFabricSpecificDetailsInstanceTypeVMwareV2
26658	objectMap := make(map[string]interface{})
26659	if vmvfsd.InstanceType != "" {
26660		objectMap["instanceType"] = vmvfsd.InstanceType
26661	}
26662	return json.Marshal(objectMap)
26663}
26664
26665// AsAzureFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26666func (vmvfsd VMwareV2FabricSpecificDetails) AsAzureFabricSpecificDetails() (*AzureFabricSpecificDetails, bool) {
26667	return nil, false
26668}
26669
26670// AsHyperVSiteDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26671func (vmvfsd VMwareV2FabricSpecificDetails) AsHyperVSiteDetails() (*HyperVSiteDetails, bool) {
26672	return nil, false
26673}
26674
26675// AsInMageRcmFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26676func (vmvfsd VMwareV2FabricSpecificDetails) AsInMageRcmFabricSpecificDetails() (*InMageRcmFabricSpecificDetails, bool) {
26677	return nil, false
26678}
26679
26680// AsVmmDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26681func (vmvfsd VMwareV2FabricSpecificDetails) AsVmmDetails() (*VmmDetails, bool) {
26682	return nil, false
26683}
26684
26685// AsVMwareDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26686func (vmvfsd VMwareV2FabricSpecificDetails) AsVMwareDetails() (*VMwareDetails, bool) {
26687	return nil, false
26688}
26689
26690// AsVMwareV2FabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26691func (vmvfsd VMwareV2FabricSpecificDetails) AsVMwareV2FabricSpecificDetails() (*VMwareV2FabricSpecificDetails, bool) {
26692	return &vmvfsd, true
26693}
26694
26695// AsFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26696func (vmvfsd VMwareV2FabricSpecificDetails) AsFabricSpecificDetails() (*FabricSpecificDetails, bool) {
26697	return nil, false
26698}
26699
26700// AsBasicFabricSpecificDetails is the BasicFabricSpecificDetails implementation for VMwareV2FabricSpecificDetails.
26701func (vmvfsd VMwareV2FabricSpecificDetails) AsBasicFabricSpecificDetails() (BasicFabricSpecificDetails, bool) {
26702	return &vmvfsd, true
26703}
26704
26705// VMwareVirtualMachineDetails vMware provider specific settings
26706type VMwareVirtualMachineDetails struct {
26707	// AgentGeneratedID - The ID generated by the InMage agent after it gets installed on guest. This is the ID to be used during InMage CreateProtection.
26708	AgentGeneratedID *string `json:"agentGeneratedId,omitempty"`
26709	// AgentInstalled - The value indicating if InMage scout agent is installed on guest.
26710	AgentInstalled *string `json:"agentInstalled,omitempty"`
26711	// OsType - The OsType installed on VM.
26712	OsType *string `json:"osType,omitempty"`
26713	// AgentVersion - The agent version.
26714	AgentVersion *string `json:"agentVersion,omitempty"`
26715	// IPAddress - The IP address.
26716	IPAddress *string `json:"ipAddress,omitempty"`
26717	// PoweredOn - The value indicating whether VM is powered on.
26718	PoweredOn *string `json:"poweredOn,omitempty"`
26719	// VCenterInfrastructureID - The VCenter infrastructure Id.
26720	VCenterInfrastructureID *string `json:"vCenterInfrastructureId,omitempty"`
26721	// DiscoveryType - A value indicating the discovery type of the machine. Value can be vCenter or physical.
26722	DiscoveryType *string `json:"discoveryType,omitempty"`
26723	// DiskDetails - The disk details.
26724	DiskDetails *[]InMageDiskDetails `json:"diskDetails,omitempty"`
26725	// ValidationErrors - The validation errors.
26726	ValidationErrors *[]HealthError `json:"validationErrors,omitempty"`
26727	// InstanceType - Possible values include: 'InstanceTypeConfigurationSettings', 'InstanceTypeHyperVVirtualMachine', 'InstanceTypeReplicationGroupDetails', 'InstanceTypeVmmVirtualMachine', 'InstanceTypeVMwareVirtualMachine'
26728	InstanceType InstanceTypeBasicConfigurationSettings `json:"instanceType,omitempty"`
26729}
26730
26731// MarshalJSON is the custom marshaler for VMwareVirtualMachineDetails.
26732func (vmvmd VMwareVirtualMachineDetails) MarshalJSON() ([]byte, error) {
26733	vmvmd.InstanceType = InstanceTypeVMwareVirtualMachine
26734	objectMap := make(map[string]interface{})
26735	if vmvmd.AgentGeneratedID != nil {
26736		objectMap["agentGeneratedId"] = vmvmd.AgentGeneratedID
26737	}
26738	if vmvmd.AgentInstalled != nil {
26739		objectMap["agentInstalled"] = vmvmd.AgentInstalled
26740	}
26741	if vmvmd.OsType != nil {
26742		objectMap["osType"] = vmvmd.OsType
26743	}
26744	if vmvmd.AgentVersion != nil {
26745		objectMap["agentVersion"] = vmvmd.AgentVersion
26746	}
26747	if vmvmd.IPAddress != nil {
26748		objectMap["ipAddress"] = vmvmd.IPAddress
26749	}
26750	if vmvmd.PoweredOn != nil {
26751		objectMap["poweredOn"] = vmvmd.PoweredOn
26752	}
26753	if vmvmd.VCenterInfrastructureID != nil {
26754		objectMap["vCenterInfrastructureId"] = vmvmd.VCenterInfrastructureID
26755	}
26756	if vmvmd.DiscoveryType != nil {
26757		objectMap["discoveryType"] = vmvmd.DiscoveryType
26758	}
26759	if vmvmd.DiskDetails != nil {
26760		objectMap["diskDetails"] = vmvmd.DiskDetails
26761	}
26762	if vmvmd.ValidationErrors != nil {
26763		objectMap["validationErrors"] = vmvmd.ValidationErrors
26764	}
26765	if vmvmd.InstanceType != "" {
26766		objectMap["instanceType"] = vmvmd.InstanceType
26767	}
26768	return json.Marshal(objectMap)
26769}
26770
26771// AsHyperVVirtualMachineDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
26772func (vmvmd VMwareVirtualMachineDetails) AsHyperVVirtualMachineDetails() (*HyperVVirtualMachineDetails, bool) {
26773	return nil, false
26774}
26775
26776// AsReplicationGroupDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
26777func (vmvmd VMwareVirtualMachineDetails) AsReplicationGroupDetails() (*ReplicationGroupDetails, bool) {
26778	return nil, false
26779}
26780
26781// AsVmmVirtualMachineDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
26782func (vmvmd VMwareVirtualMachineDetails) AsVmmVirtualMachineDetails() (*VmmVirtualMachineDetails, bool) {
26783	return nil, false
26784}
26785
26786// AsVMwareVirtualMachineDetails is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
26787func (vmvmd VMwareVirtualMachineDetails) AsVMwareVirtualMachineDetails() (*VMwareVirtualMachineDetails, bool) {
26788	return &vmvmd, true
26789}
26790
26791// AsConfigurationSettings is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
26792func (vmvmd VMwareVirtualMachineDetails) AsConfigurationSettings() (*ConfigurationSettings, bool) {
26793	return nil, false
26794}
26795
26796// AsBasicConfigurationSettings is the BasicConfigurationSettings implementation for VMwareVirtualMachineDetails.
26797func (vmvmd VMwareVirtualMachineDetails) AsBasicConfigurationSettings() (BasicConfigurationSettings, bool) {
26798	return &vmvmd, true
26799}
26800