1package backup
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"encoding/json"
12	"github.com/Azure/go-autorest/autorest"
13	"github.com/Azure/go-autorest/autorest/azure"
14	"github.com/Azure/go-autorest/autorest/date"
15	"github.com/Azure/go-autorest/autorest/to"
16	"github.com/Azure/go-autorest/tracing"
17	"net/http"
18)
19
20// The package's fully qualified name.
21const fqdn = "github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2020-02-02/backup"
22
23// AzureBackupGoalFeatureSupportRequest azure backup goal feature specific request.
24type AzureBackupGoalFeatureSupportRequest struct {
25	// FeatureType - Possible values include: 'FeatureTypeFeatureSupportRequest', 'FeatureTypeAzureBackupGoals', 'FeatureTypeAzureVMResourceBackup'
26	FeatureType FeatureType `json:"featureType,omitempty"`
27}
28
29// MarshalJSON is the custom marshaler for AzureBackupGoalFeatureSupportRequest.
30func (abgfsr AzureBackupGoalFeatureSupportRequest) MarshalJSON() ([]byte, error) {
31	abgfsr.FeatureType = FeatureTypeAzureBackupGoals
32	objectMap := make(map[string]interface{})
33	if abgfsr.FeatureType != "" {
34		objectMap["featureType"] = abgfsr.FeatureType
35	}
36	return json.Marshal(objectMap)
37}
38
39// AsAzureBackupGoalFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureBackupGoalFeatureSupportRequest.
40func (abgfsr AzureBackupGoalFeatureSupportRequest) AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool) {
41	return &abgfsr, true
42}
43
44// AsAzureVMResourceFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureBackupGoalFeatureSupportRequest.
45func (abgfsr AzureBackupGoalFeatureSupportRequest) AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool) {
46	return nil, false
47}
48
49// AsFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureBackupGoalFeatureSupportRequest.
50func (abgfsr AzureBackupGoalFeatureSupportRequest) AsFeatureSupportRequest() (*FeatureSupportRequest, bool) {
51	return nil, false
52}
53
54// AsBasicFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureBackupGoalFeatureSupportRequest.
55func (abgfsr AzureBackupGoalFeatureSupportRequest) AsBasicFeatureSupportRequest() (BasicFeatureSupportRequest, bool) {
56	return &abgfsr, true
57}
58
59// AzureBackupServerContainer azureBackupServer (DPMVenus) workload-specific protection container.
60type AzureBackupServerContainer struct {
61	// CanReRegister - Specifies whether the container is re-registrable.
62	CanReRegister *bool `json:"canReRegister,omitempty"`
63	// ContainerID - ID of container.
64	ContainerID *string `json:"containerId,omitempty"`
65	// ProtectedItemCount - Number of protected items in the BackupEngine
66	ProtectedItemCount *int64 `json:"protectedItemCount,omitempty"`
67	// DpmAgentVersion - Backup engine Agent version
68	DpmAgentVersion *string `json:"dpmAgentVersion,omitempty"`
69	// DpmServers - List of BackupEngines protecting the container
70	DpmServers *[]string `json:"dpmServers,omitempty"`
71	// UpgradeAvailable - To check if upgrade available
72	UpgradeAvailable *bool `json:"upgradeAvailable,omitempty"`
73	// ProtectionStatus - Protection status of the container.
74	ProtectionStatus *string `json:"protectionStatus,omitempty"`
75	// ExtendedInfo - Extended Info of the container.
76	ExtendedInfo *DPMContainerExtendedInfo `json:"extendedInfo,omitempty"`
77	// FriendlyName - Friendly name of the container.
78	FriendlyName *string `json:"friendlyName,omitempty"`
79	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
80	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
81	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
82	RegistrationStatus *string `json:"registrationStatus,omitempty"`
83	// HealthStatus - Status of health of the container.
84	HealthStatus *string `json:"healthStatus,omitempty"`
85	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
86	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
87}
88
89// MarshalJSON is the custom marshaler for AzureBackupServerContainer.
90func (absc AzureBackupServerContainer) MarshalJSON() ([]byte, error) {
91	absc.ContainerType = ContainerTypeAzureBackupServerContainer1
92	objectMap := make(map[string]interface{})
93	if absc.CanReRegister != nil {
94		objectMap["canReRegister"] = absc.CanReRegister
95	}
96	if absc.ContainerID != nil {
97		objectMap["containerId"] = absc.ContainerID
98	}
99	if absc.ProtectedItemCount != nil {
100		objectMap["protectedItemCount"] = absc.ProtectedItemCount
101	}
102	if absc.DpmAgentVersion != nil {
103		objectMap["dpmAgentVersion"] = absc.DpmAgentVersion
104	}
105	if absc.DpmServers != nil {
106		objectMap["dpmServers"] = absc.DpmServers
107	}
108	if absc.UpgradeAvailable != nil {
109		objectMap["upgradeAvailable"] = absc.UpgradeAvailable
110	}
111	if absc.ProtectionStatus != nil {
112		objectMap["protectionStatus"] = absc.ProtectionStatus
113	}
114	if absc.ExtendedInfo != nil {
115		objectMap["extendedInfo"] = absc.ExtendedInfo
116	}
117	if absc.FriendlyName != nil {
118		objectMap["friendlyName"] = absc.FriendlyName
119	}
120	if absc.BackupManagementType != "" {
121		objectMap["backupManagementType"] = absc.BackupManagementType
122	}
123	if absc.RegistrationStatus != nil {
124		objectMap["registrationStatus"] = absc.RegistrationStatus
125	}
126	if absc.HealthStatus != nil {
127		objectMap["healthStatus"] = absc.HealthStatus
128	}
129	if absc.ContainerType != "" {
130		objectMap["containerType"] = absc.ContainerType
131	}
132	return json.Marshal(objectMap)
133}
134
135// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
136func (absc AzureBackupServerContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
137	return &absc, true
138}
139
140// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
141func (absc AzureBackupServerContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
142	return nil, false
143}
144
145// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
146func (absc AzureBackupServerContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
147	return nil, false
148}
149
150// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
151func (absc AzureBackupServerContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
152	return nil, false
153}
154
155// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
156func (absc AzureBackupServerContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
157	return nil, false
158}
159
160// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
161func (absc AzureBackupServerContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
162	return nil, false
163}
164
165// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
166func (absc AzureBackupServerContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
167	return nil, false
168}
169
170// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
171func (absc AzureBackupServerContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
172	return nil, false
173}
174
175// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
176func (absc AzureBackupServerContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
177	return nil, false
178}
179
180// AsDpmContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
181func (absc AzureBackupServerContainer) AsDpmContainer() (*DpmContainer, bool) {
182	return nil, false
183}
184
185// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
186func (absc AzureBackupServerContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
187	return &absc, true
188}
189
190// AsGenericContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
191func (absc AzureBackupServerContainer) AsGenericContainer() (*GenericContainer, bool) {
192	return nil, false
193}
194
195// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
196func (absc AzureBackupServerContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
197	return nil, false
198}
199
200// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
201func (absc AzureBackupServerContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
202	return nil, false
203}
204
205// AsMabContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
206func (absc AzureBackupServerContainer) AsMabContainer() (*MabContainer, bool) {
207	return nil, false
208}
209
210// AsProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
211func (absc AzureBackupServerContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
212	return nil, false
213}
214
215// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
216func (absc AzureBackupServerContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
217	return &absc, true
218}
219
220// AzureBackupServerEngine backup engine type when Azure Backup Server is used to manage the backups.
221type AzureBackupServerEngine struct {
222	// FriendlyName - Friendly name of the backup engine.
223	FriendlyName *string `json:"friendlyName,omitempty"`
224	// BackupManagementType - Type of backup management for the backup engine. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
225	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
226	// RegistrationStatus - Registration status of the backup engine with the Recovery Services Vault.
227	RegistrationStatus *string `json:"registrationStatus,omitempty"`
228	// BackupEngineState - Status of the backup engine with the Recovery Services Vault. = {Active/Deleting/DeleteFailed}
229	BackupEngineState *string `json:"backupEngineState,omitempty"`
230	// HealthStatus - Backup status of the backup engine.
231	HealthStatus *string `json:"healthStatus,omitempty"`
232	// CanReRegister - Flag indicating if the backup engine be registered, once already registered.
233	CanReRegister *bool `json:"canReRegister,omitempty"`
234	// BackupEngineID - ID of the backup engine.
235	BackupEngineID *string `json:"backupEngineId,omitempty"`
236	// DpmVersion - Backup engine version
237	DpmVersion *string `json:"dpmVersion,omitempty"`
238	// AzureBackupAgentVersion - Backup agent version
239	AzureBackupAgentVersion *string `json:"azureBackupAgentVersion,omitempty"`
240	// IsAzureBackupAgentUpgradeAvailable - To check if backup agent upgrade available
241	IsAzureBackupAgentUpgradeAvailable *bool `json:"isAzureBackupAgentUpgradeAvailable,omitempty"`
242	// IsDpmUpgradeAvailable - To check if backup engine upgrade available
243	IsDpmUpgradeAvailable *bool `json:"isDpmUpgradeAvailable,omitempty"`
244	// ExtendedInfo - Extended info of the backupengine
245	ExtendedInfo *EngineExtendedInfo `json:"extendedInfo,omitempty"`
246	// BackupEngineType - Possible values include: 'BackupEngineTypeBackupEngineBase', 'BackupEngineTypeAzureBackupServerEngine', 'BackupEngineTypeDpmBackupEngine'
247	BackupEngineType EngineType `json:"backupEngineType,omitempty"`
248}
249
250// MarshalJSON is the custom marshaler for AzureBackupServerEngine.
251func (abse AzureBackupServerEngine) MarshalJSON() ([]byte, error) {
252	abse.BackupEngineType = BackupEngineTypeAzureBackupServerEngine
253	objectMap := make(map[string]interface{})
254	if abse.FriendlyName != nil {
255		objectMap["friendlyName"] = abse.FriendlyName
256	}
257	if abse.BackupManagementType != "" {
258		objectMap["backupManagementType"] = abse.BackupManagementType
259	}
260	if abse.RegistrationStatus != nil {
261		objectMap["registrationStatus"] = abse.RegistrationStatus
262	}
263	if abse.BackupEngineState != nil {
264		objectMap["backupEngineState"] = abse.BackupEngineState
265	}
266	if abse.HealthStatus != nil {
267		objectMap["healthStatus"] = abse.HealthStatus
268	}
269	if abse.CanReRegister != nil {
270		objectMap["canReRegister"] = abse.CanReRegister
271	}
272	if abse.BackupEngineID != nil {
273		objectMap["backupEngineId"] = abse.BackupEngineID
274	}
275	if abse.DpmVersion != nil {
276		objectMap["dpmVersion"] = abse.DpmVersion
277	}
278	if abse.AzureBackupAgentVersion != nil {
279		objectMap["azureBackupAgentVersion"] = abse.AzureBackupAgentVersion
280	}
281	if abse.IsAzureBackupAgentUpgradeAvailable != nil {
282		objectMap["isAzureBackupAgentUpgradeAvailable"] = abse.IsAzureBackupAgentUpgradeAvailable
283	}
284	if abse.IsDpmUpgradeAvailable != nil {
285		objectMap["isDpmUpgradeAvailable"] = abse.IsDpmUpgradeAvailable
286	}
287	if abse.ExtendedInfo != nil {
288		objectMap["extendedInfo"] = abse.ExtendedInfo
289	}
290	if abse.BackupEngineType != "" {
291		objectMap["backupEngineType"] = abse.BackupEngineType
292	}
293	return json.Marshal(objectMap)
294}
295
296// AsAzureBackupServerEngine is the BasicEngineBase implementation for AzureBackupServerEngine.
297func (abse AzureBackupServerEngine) AsAzureBackupServerEngine() (*AzureBackupServerEngine, bool) {
298	return &abse, true
299}
300
301// AsDpmBackupEngine is the BasicEngineBase implementation for AzureBackupServerEngine.
302func (abse AzureBackupServerEngine) AsDpmBackupEngine() (*DpmBackupEngine, bool) {
303	return nil, false
304}
305
306// AsEngineBase is the BasicEngineBase implementation for AzureBackupServerEngine.
307func (abse AzureBackupServerEngine) AsEngineBase() (*EngineBase, bool) {
308	return nil, false
309}
310
311// AsBasicEngineBase is the BasicEngineBase implementation for AzureBackupServerEngine.
312func (abse AzureBackupServerEngine) AsBasicEngineBase() (BasicEngineBase, bool) {
313	return &abse, true
314}
315
316// AzureFileShareBackupRequest azureFileShare workload-specific backup request.
317type AzureFileShareBackupRequest struct {
318	// RecoveryPointExpiryTimeInUTC - Backup copy will expire after the time specified (UTC).
319	RecoveryPointExpiryTimeInUTC *date.Time `json:"recoveryPointExpiryTimeInUTC,omitempty"`
320	// ObjectType - Possible values include: 'ObjectTypeBackupRequest', 'ObjectTypeAzureFileShareBackupRequest', 'ObjectTypeAzureWorkloadBackupRequest', 'ObjectTypeIaasVMBackupRequest'
321	ObjectType ObjectTypeBasicRequest `json:"objectType,omitempty"`
322}
323
324// MarshalJSON is the custom marshaler for AzureFileShareBackupRequest.
325func (afsbr AzureFileShareBackupRequest) MarshalJSON() ([]byte, error) {
326	afsbr.ObjectType = ObjectTypeAzureFileShareBackupRequest
327	objectMap := make(map[string]interface{})
328	if afsbr.RecoveryPointExpiryTimeInUTC != nil {
329		objectMap["recoveryPointExpiryTimeInUTC"] = afsbr.RecoveryPointExpiryTimeInUTC
330	}
331	if afsbr.ObjectType != "" {
332		objectMap["objectType"] = afsbr.ObjectType
333	}
334	return json.Marshal(objectMap)
335}
336
337// AsAzureFileShareBackupRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
338func (afsbr AzureFileShareBackupRequest) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
339	return &afsbr, true
340}
341
342// AsAzureWorkloadBackupRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
343func (afsbr AzureFileShareBackupRequest) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
344	return nil, false
345}
346
347// AsIaasVMBackupRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
348func (afsbr AzureFileShareBackupRequest) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
349	return nil, false
350}
351
352// AsRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
353func (afsbr AzureFileShareBackupRequest) AsRequest() (*Request, bool) {
354	return nil, false
355}
356
357// AsBasicRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
358func (afsbr AzureFileShareBackupRequest) AsBasicRequest() (BasicRequest, bool) {
359	return &afsbr, true
360}
361
362// AzureFileShareProtectableItem protectable item for Azure Fileshare workloads.
363type AzureFileShareProtectableItem struct {
364	// ParentContainerFabricID - Full Fabric ID of container to which this protectable item belongs. For example, ARM ID.
365	ParentContainerFabricID *string `json:"parentContainerFabricId,omitempty"`
366	// ParentContainerFriendlyName - Friendly name of container to which this protectable item belongs.
367	ParentContainerFriendlyName *string `json:"parentContainerFriendlyName,omitempty"`
368	// AzureFileShareType - File Share type XSync or XSMB. Possible values include: 'Invalid', 'XSMB', 'XSync'
369	AzureFileShareType AzureFileShareType `json:"azureFileShareType,omitempty"`
370	// BackupManagementType - Type of backup management to backup an item.
371	BackupManagementType *string `json:"backupManagementType,omitempty"`
372	// WorkloadType - Type of workload for the backup management
373	WorkloadType *string `json:"workloadType,omitempty"`
374	// FriendlyName - Friendly name of the backup item.
375	FriendlyName *string `json:"friendlyName,omitempty"`
376	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
377	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
378	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
379	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
380}
381
382// MarshalJSON is the custom marshaler for AzureFileShareProtectableItem.
383func (afspi AzureFileShareProtectableItem) MarshalJSON() ([]byte, error) {
384	afspi.ProtectableItemType = ProtectableItemTypeAzureFileShare
385	objectMap := make(map[string]interface{})
386	if afspi.ParentContainerFabricID != nil {
387		objectMap["parentContainerFabricId"] = afspi.ParentContainerFabricID
388	}
389	if afspi.ParentContainerFriendlyName != nil {
390		objectMap["parentContainerFriendlyName"] = afspi.ParentContainerFriendlyName
391	}
392	if afspi.AzureFileShareType != "" {
393		objectMap["azureFileShareType"] = afspi.AzureFileShareType
394	}
395	if afspi.BackupManagementType != nil {
396		objectMap["backupManagementType"] = afspi.BackupManagementType
397	}
398	if afspi.WorkloadType != nil {
399		objectMap["workloadType"] = afspi.WorkloadType
400	}
401	if afspi.FriendlyName != nil {
402		objectMap["friendlyName"] = afspi.FriendlyName
403	}
404	if afspi.ProtectionState != "" {
405		objectMap["protectionState"] = afspi.ProtectionState
406	}
407	if afspi.ProtectableItemType != "" {
408		objectMap["protectableItemType"] = afspi.ProtectableItemType
409	}
410	return json.Marshal(objectMap)
411}
412
413// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
414func (afspi AzureFileShareProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
415	return &afspi, true
416}
417
418// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
419func (afspi AzureFileShareProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
420	return nil, false
421}
422
423// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
424func (afspi AzureFileShareProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
425	return nil, false
426}
427
428// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
429func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
430	return nil, false
431}
432
433// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
434func (afspi AzureFileShareProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
435	return nil, false
436}
437
438// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
439func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
440	return nil, false
441}
442
443// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
444func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
445	return nil, false
446}
447
448// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
449func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
450	return nil, false
451}
452
453// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
454func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
455	return nil, false
456}
457
458// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
459func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
460	return nil, false
461}
462
463// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
464func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
465	return nil, false
466}
467
468// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
469func (afspi AzureFileShareProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
470	return nil, false
471}
472
473// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
474func (afspi AzureFileShareProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
475	return nil, false
476}
477
478// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
479func (afspi AzureFileShareProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
480	return nil, false
481}
482
483// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
484func (afspi AzureFileShareProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
485	return &afspi, true
486}
487
488// AzureFileshareProtectedItem azure File Share workload-specific backup item.
489type AzureFileshareProtectedItem struct {
490	// FriendlyName - Friendly name of the fileshare represented by this backup item.
491	FriendlyName *string `json:"friendlyName,omitempty"`
492	// ProtectionStatus - Backup status of this backup item.
493	ProtectionStatus *string `json:"protectionStatus,omitempty"`
494	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
495	ProtectionState ProtectionState `json:"protectionState,omitempty"`
496	// LastBackupStatus - Last backup operation status. Possible values: Healthy, Unhealthy.
497	LastBackupStatus *string `json:"lastBackupStatus,omitempty"`
498	// LastBackupTime - Timestamp of the last backup operation on this backup item.
499	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
500	// KpisHealths - Health details of different KPIs
501	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
502	// ExtendedInfo - Additional information with this backup item.
503	ExtendedInfo *AzureFileshareProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
504	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
505	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
506	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
507	WorkloadType DataSourceType `json:"workloadType,omitempty"`
508	// ContainerName - Unique name of container
509	ContainerName *string `json:"containerName,omitempty"`
510	// SourceResourceID - ARM ID of the resource to be backed up.
511	SourceResourceID *string `json:"sourceResourceId,omitempty"`
512	// PolicyID - ID of the backup policy with which this item is backed up.
513	PolicyID *string `json:"policyId,omitempty"`
514	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
515	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
516	// BackupSetName - Name of the backup set the backup item belongs to
517	BackupSetName *string `json:"backupSetName,omitempty"`
518	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
519	CreateMode CreateMode `json:"createMode,omitempty"`
520	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
521	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
522	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
523	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
524	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
525	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
526	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
527	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
528	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
529	IsRehydrate *bool `json:"isRehydrate,omitempty"`
530	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
531	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
532}
533
534// MarshalJSON is the custom marshaler for AzureFileshareProtectedItem.
535func (afpi AzureFileshareProtectedItem) MarshalJSON() ([]byte, error) {
536	afpi.ProtectedItemType = ProtectedItemTypeAzureFileShareProtectedItem
537	objectMap := make(map[string]interface{})
538	if afpi.FriendlyName != nil {
539		objectMap["friendlyName"] = afpi.FriendlyName
540	}
541	if afpi.ProtectionStatus != nil {
542		objectMap["protectionStatus"] = afpi.ProtectionStatus
543	}
544	if afpi.ProtectionState != "" {
545		objectMap["protectionState"] = afpi.ProtectionState
546	}
547	if afpi.LastBackupStatus != nil {
548		objectMap["lastBackupStatus"] = afpi.LastBackupStatus
549	}
550	if afpi.LastBackupTime != nil {
551		objectMap["lastBackupTime"] = afpi.LastBackupTime
552	}
553	if afpi.KpisHealths != nil {
554		objectMap["kpisHealths"] = afpi.KpisHealths
555	}
556	if afpi.ExtendedInfo != nil {
557		objectMap["extendedInfo"] = afpi.ExtendedInfo
558	}
559	if afpi.BackupManagementType != "" {
560		objectMap["backupManagementType"] = afpi.BackupManagementType
561	}
562	if afpi.WorkloadType != "" {
563		objectMap["workloadType"] = afpi.WorkloadType
564	}
565	if afpi.ContainerName != nil {
566		objectMap["containerName"] = afpi.ContainerName
567	}
568	if afpi.SourceResourceID != nil {
569		objectMap["sourceResourceId"] = afpi.SourceResourceID
570	}
571	if afpi.PolicyID != nil {
572		objectMap["policyId"] = afpi.PolicyID
573	}
574	if afpi.LastRecoveryPoint != nil {
575		objectMap["lastRecoveryPoint"] = afpi.LastRecoveryPoint
576	}
577	if afpi.BackupSetName != nil {
578		objectMap["backupSetName"] = afpi.BackupSetName
579	}
580	if afpi.CreateMode != "" {
581		objectMap["createMode"] = afpi.CreateMode
582	}
583	if afpi.DeferredDeleteTimeInUTC != nil {
584		objectMap["deferredDeleteTimeInUTC"] = afpi.DeferredDeleteTimeInUTC
585	}
586	if afpi.IsScheduledForDeferredDelete != nil {
587		objectMap["isScheduledForDeferredDelete"] = afpi.IsScheduledForDeferredDelete
588	}
589	if afpi.DeferredDeleteTimeRemaining != nil {
590		objectMap["deferredDeleteTimeRemaining"] = afpi.DeferredDeleteTimeRemaining
591	}
592	if afpi.IsDeferredDeleteScheduleUpcoming != nil {
593		objectMap["isDeferredDeleteScheduleUpcoming"] = afpi.IsDeferredDeleteScheduleUpcoming
594	}
595	if afpi.IsRehydrate != nil {
596		objectMap["isRehydrate"] = afpi.IsRehydrate
597	}
598	if afpi.ProtectedItemType != "" {
599		objectMap["protectedItemType"] = afpi.ProtectedItemType
600	}
601	return json.Marshal(objectMap)
602}
603
604// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
605func (afpi AzureFileshareProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
606	return &afpi, true
607}
608
609// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
610func (afpi AzureFileshareProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
611	return nil, false
612}
613
614// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
615func (afpi AzureFileshareProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
616	return nil, false
617}
618
619// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
620func (afpi AzureFileshareProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
621	return nil, false
622}
623
624// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
625func (afpi AzureFileshareProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
626	return nil, false
627}
628
629// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
630func (afpi AzureFileshareProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
631	return nil, false
632}
633
634// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
635func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
636	return nil, false
637}
638
639// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
640func (afpi AzureFileshareProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
641	return nil, false
642}
643
644// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
645func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
646	return nil, false
647}
648
649// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
650func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
651	return nil, false
652}
653
654// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
655func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
656	return nil, false
657}
658
659// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
660func (afpi AzureFileshareProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
661	return nil, false
662}
663
664// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
665func (afpi AzureFileshareProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
666	return nil, false
667}
668
669// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
670func (afpi AzureFileshareProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
671	return nil, false
672}
673
674// AsProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
675func (afpi AzureFileshareProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
676	return nil, false
677}
678
679// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
680func (afpi AzureFileshareProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
681	return &afpi, true
682}
683
684// AzureFileshareProtectedItemExtendedInfo additional information about Azure File Share backup item.
685type AzureFileshareProtectedItemExtendedInfo struct {
686	// OldestRecoveryPoint - The oldest backup copy available for this item in the service.
687	OldestRecoveryPoint *date.Time `json:"oldestRecoveryPoint,omitempty"`
688	// RecoveryPointCount - Number of available backup copies associated with this backup item.
689	RecoveryPointCount *int32 `json:"recoveryPointCount,omitempty"`
690	// PolicyState - Indicates consistency of policy object and policy applied to this backup item.
691	PolicyState *string `json:"policyState,omitempty"`
692	// ResourceState - READ-ONLY; Indicates the state of this resource. Possible values are from enum ResourceState {Invalid, Active, SoftDeleted, Deleted}
693	ResourceState *string `json:"resourceState,omitempty"`
694	// ResourceStateSyncTime - READ-ONLY; The resource state sync time for this backup item.
695	ResourceStateSyncTime *date.Time `json:"resourceStateSyncTime,omitempty"`
696}
697
698// MarshalJSON is the custom marshaler for AzureFileshareProtectedItemExtendedInfo.
699func (afpiei AzureFileshareProtectedItemExtendedInfo) MarshalJSON() ([]byte, error) {
700	objectMap := make(map[string]interface{})
701	if afpiei.OldestRecoveryPoint != nil {
702		objectMap["oldestRecoveryPoint"] = afpiei.OldestRecoveryPoint
703	}
704	if afpiei.RecoveryPointCount != nil {
705		objectMap["recoveryPointCount"] = afpiei.RecoveryPointCount
706	}
707	if afpiei.PolicyState != nil {
708		objectMap["policyState"] = afpiei.PolicyState
709	}
710	return json.Marshal(objectMap)
711}
712
713// AzureFileShareProtectionPolicy azureStorage backup policy.
714type AzureFileShareProtectionPolicy struct {
715	// WorkLoadType - Type of workload for the backup management. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
716	WorkLoadType WorkloadType `json:"workLoadType,omitempty"`
717	// SchedulePolicy - Backup schedule specified as part of backup policy.
718	SchedulePolicy BasicSchedulePolicy `json:"schedulePolicy,omitempty"`
719	// RetentionPolicy - Retention policy with the details on backup copy retention ranges.
720	RetentionPolicy BasicRetentionPolicy `json:"retentionPolicy,omitempty"`
721	// TimeZone - TimeZone optional input as string. For example: TimeZone = "Pacific Standard Time".
722	TimeZone *string `json:"timeZone,omitempty"`
723	// ProtectedItemsCount - Number of items associated with this policy.
724	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
725	// BackupManagementType - Possible values include: 'BackupManagementTypeProtectionPolicy', 'BackupManagementTypeAzureWorkload', 'BackupManagementTypeAzureStorage', 'BackupManagementTypeAzureIaasVM', 'BackupManagementTypeAzureSQL', 'BackupManagementTypeGenericProtectionPolicy', 'BackupManagementTypeMAB'
726	BackupManagementType ManagementTypeBasicProtectionPolicy `json:"backupManagementType,omitempty"`
727}
728
729// MarshalJSON is the custom marshaler for AzureFileShareProtectionPolicy.
730func (afspp AzureFileShareProtectionPolicy) MarshalJSON() ([]byte, error) {
731	afspp.BackupManagementType = BackupManagementTypeAzureStorage
732	objectMap := make(map[string]interface{})
733	if afspp.WorkLoadType != "" {
734		objectMap["workLoadType"] = afspp.WorkLoadType
735	}
736	objectMap["schedulePolicy"] = afspp.SchedulePolicy
737	objectMap["retentionPolicy"] = afspp.RetentionPolicy
738	if afspp.TimeZone != nil {
739		objectMap["timeZone"] = afspp.TimeZone
740	}
741	if afspp.ProtectedItemsCount != nil {
742		objectMap["protectedItemsCount"] = afspp.ProtectedItemsCount
743	}
744	if afspp.BackupManagementType != "" {
745		objectMap["backupManagementType"] = afspp.BackupManagementType
746	}
747	return json.Marshal(objectMap)
748}
749
750// AsAzureVMWorkloadProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
751func (afspp AzureFileShareProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
752	return nil, false
753}
754
755// AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
756func (afspp AzureFileShareProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
757	return &afspp, true
758}
759
760// AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
761func (afspp AzureFileShareProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
762	return nil, false
763}
764
765// AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
766func (afspp AzureFileShareProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
767	return nil, false
768}
769
770// AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
771func (afspp AzureFileShareProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
772	return nil, false
773}
774
775// AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
776func (afspp AzureFileShareProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
777	return nil, false
778}
779
780// AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
781func (afspp AzureFileShareProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
782	return nil, false
783}
784
785// AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
786func (afspp AzureFileShareProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
787	return &afspp, true
788}
789
790// UnmarshalJSON is the custom unmarshaler for AzureFileShareProtectionPolicy struct.
791func (afspp *AzureFileShareProtectionPolicy) UnmarshalJSON(body []byte) error {
792	var m map[string]*json.RawMessage
793	err := json.Unmarshal(body, &m)
794	if err != nil {
795		return err
796	}
797	for k, v := range m {
798		switch k {
799		case "workLoadType":
800			if v != nil {
801				var workLoadType WorkloadType
802				err = json.Unmarshal(*v, &workLoadType)
803				if err != nil {
804					return err
805				}
806				afspp.WorkLoadType = workLoadType
807			}
808		case "schedulePolicy":
809			if v != nil {
810				schedulePolicy, err := unmarshalBasicSchedulePolicy(*v)
811				if err != nil {
812					return err
813				}
814				afspp.SchedulePolicy = schedulePolicy
815			}
816		case "retentionPolicy":
817			if v != nil {
818				retentionPolicy, err := unmarshalBasicRetentionPolicy(*v)
819				if err != nil {
820					return err
821				}
822				afspp.RetentionPolicy = retentionPolicy
823			}
824		case "timeZone":
825			if v != nil {
826				var timeZone string
827				err = json.Unmarshal(*v, &timeZone)
828				if err != nil {
829					return err
830				}
831				afspp.TimeZone = &timeZone
832			}
833		case "protectedItemsCount":
834			if v != nil {
835				var protectedItemsCount int32
836				err = json.Unmarshal(*v, &protectedItemsCount)
837				if err != nil {
838					return err
839				}
840				afspp.ProtectedItemsCount = &protectedItemsCount
841			}
842		case "backupManagementType":
843			if v != nil {
844				var backupManagementType ManagementTypeBasicProtectionPolicy
845				err = json.Unmarshal(*v, &backupManagementType)
846				if err != nil {
847					return err
848				}
849				afspp.BackupManagementType = backupManagementType
850			}
851		}
852	}
853
854	return nil
855}
856
857// AzureFileShareProvisionILRRequest update snapshot Uri with the correct friendly Name of the source Azure
858// file share.
859type AzureFileShareProvisionILRRequest struct {
860	// RecoveryPointID - Recovery point ID.
861	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
862	// SourceResourceID - Source Storage account ARM Id
863	SourceResourceID *string `json:"sourceResourceId,omitempty"`
864	// ObjectType - Possible values include: 'ObjectTypeILRRequest', 'ObjectTypeAzureFileShareProvisionILRRequest', 'ObjectTypeIaasVMILRRegistrationRequest'
865	ObjectType ObjectTypeBasicILRRequest `json:"objectType,omitempty"`
866}
867
868// MarshalJSON is the custom marshaler for AzureFileShareProvisionILRRequest.
869func (afspir AzureFileShareProvisionILRRequest) MarshalJSON() ([]byte, error) {
870	afspir.ObjectType = ObjectTypeAzureFileShareProvisionILRRequest
871	objectMap := make(map[string]interface{})
872	if afspir.RecoveryPointID != nil {
873		objectMap["recoveryPointId"] = afspir.RecoveryPointID
874	}
875	if afspir.SourceResourceID != nil {
876		objectMap["sourceResourceId"] = afspir.SourceResourceID
877	}
878	if afspir.ObjectType != "" {
879		objectMap["objectType"] = afspir.ObjectType
880	}
881	return json.Marshal(objectMap)
882}
883
884// AsAzureFileShareProvisionILRRequest is the BasicILRRequest implementation for AzureFileShareProvisionILRRequest.
885func (afspir AzureFileShareProvisionILRRequest) AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool) {
886	return &afspir, true
887}
888
889// AsIaasVMILRRegistrationRequest is the BasicILRRequest implementation for AzureFileShareProvisionILRRequest.
890func (afspir AzureFileShareProvisionILRRequest) AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool) {
891	return nil, false
892}
893
894// AsILRRequest is the BasicILRRequest implementation for AzureFileShareProvisionILRRequest.
895func (afspir AzureFileShareProvisionILRRequest) AsILRRequest() (*ILRRequest, bool) {
896	return nil, false
897}
898
899// AsBasicILRRequest is the BasicILRRequest implementation for AzureFileShareProvisionILRRequest.
900func (afspir AzureFileShareProvisionILRRequest) AsBasicILRRequest() (BasicILRRequest, bool) {
901	return &afspir, true
902}
903
904// AzureFileShareRecoveryPoint azure File Share workload specific backup copy.
905type AzureFileShareRecoveryPoint struct {
906	// RecoveryPointType - READ-ONLY; Type of the backup copy. Specifies whether it is a crash consistent backup or app consistent.
907	RecoveryPointType *string `json:"recoveryPointType,omitempty"`
908	// RecoveryPointTime - READ-ONLY; Time at which this backup copy was created.
909	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
910	// FileShareSnapshotURI - READ-ONLY; Contains Url to the snapshot of fileshare, if applicable
911	FileShareSnapshotURI *string `json:"fileShareSnapshotUri,omitempty"`
912	// RecoveryPointSizeInGB - READ-ONLY; Contains recovery point size
913	RecoveryPointSizeInGB *int32 `json:"recoveryPointSizeInGB,omitempty"`
914	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
915	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
916}
917
918// MarshalJSON is the custom marshaler for AzureFileShareRecoveryPoint.
919func (afsrp AzureFileShareRecoveryPoint) MarshalJSON() ([]byte, error) {
920	afsrp.ObjectType = ObjectTypeAzureFileShareRecoveryPoint
921	objectMap := make(map[string]interface{})
922	if afsrp.ObjectType != "" {
923		objectMap["objectType"] = afsrp.ObjectType
924	}
925	return json.Marshal(objectMap)
926}
927
928// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
929func (afsrp AzureFileShareRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
930	return &afsrp, true
931}
932
933// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
934func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
935	return nil, false
936}
937
938// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
939func (afsrp AzureFileShareRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
940	return nil, false
941}
942
943// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
944func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
945	return nil, false
946}
947
948// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
949func (afsrp AzureFileShareRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
950	return nil, false
951}
952
953// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
954func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
955	return nil, false
956}
957
958// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
959func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
960	return nil, false
961}
962
963// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
964func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
965	return nil, false
966}
967
968// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
969func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
970	return nil, false
971}
972
973// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
974func (afsrp AzureFileShareRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
975	return nil, false
976}
977
978// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
979func (afsrp AzureFileShareRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
980	return nil, false
981}
982
983// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
984func (afsrp AzureFileShareRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
985	return nil, false
986}
987
988// AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
989func (afsrp AzureFileShareRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
990	return nil, false
991}
992
993// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
994func (afsrp AzureFileShareRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
995	return &afsrp, true
996}
997
998// AzureFileShareRestoreRequest azureFileShare Restore Request
999type AzureFileShareRestoreRequest struct {
1000	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
1001	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
1002	// SourceResourceID - Source storage account ARM Id
1003	SourceResourceID *string `json:"sourceResourceId,omitempty"`
1004	// CopyOptions - Options to resolve copy conflicts. Possible values include: 'CopyOptionsInvalid', 'CopyOptionsCreateCopy', 'CopyOptionsSkip', 'CopyOptionsOverwrite', 'CopyOptionsFailOnConflict'
1005	CopyOptions CopyOptions `json:"copyOptions,omitempty"`
1006	// RestoreRequestType - Restore Type (FullShareRestore or ItemLevelRestore). Possible values include: 'RestoreRequestTypeInvalid', 'RestoreRequestTypeFullShareRestore', 'RestoreRequestTypeItemLevelRestore'
1007	RestoreRequestType RestoreRequestType `json:"restoreRequestType,omitempty"`
1008	// RestoreFileSpecs - List of Source Files/Folders(which need to recover) and TargetFolderPath details
1009	RestoreFileSpecs *[]RestoreFileSpecs `json:"restoreFileSpecs,omitempty"`
1010	// TargetDetails - Target File Share Details
1011	TargetDetails *TargetAFSRestoreInfo `json:"targetDetails,omitempty"`
1012	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
1013	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
1014}
1015
1016// MarshalJSON is the custom marshaler for AzureFileShareRestoreRequest.
1017func (afsrr AzureFileShareRestoreRequest) MarshalJSON() ([]byte, error) {
1018	afsrr.ObjectType = ObjectTypeAzureFileShareRestoreRequest
1019	objectMap := make(map[string]interface{})
1020	if afsrr.RecoveryType != "" {
1021		objectMap["recoveryType"] = afsrr.RecoveryType
1022	}
1023	if afsrr.SourceResourceID != nil {
1024		objectMap["sourceResourceId"] = afsrr.SourceResourceID
1025	}
1026	if afsrr.CopyOptions != "" {
1027		objectMap["copyOptions"] = afsrr.CopyOptions
1028	}
1029	if afsrr.RestoreRequestType != "" {
1030		objectMap["restoreRequestType"] = afsrr.RestoreRequestType
1031	}
1032	if afsrr.RestoreFileSpecs != nil {
1033		objectMap["restoreFileSpecs"] = afsrr.RestoreFileSpecs
1034	}
1035	if afsrr.TargetDetails != nil {
1036		objectMap["targetDetails"] = afsrr.TargetDetails
1037	}
1038	if afsrr.ObjectType != "" {
1039		objectMap["objectType"] = afsrr.ObjectType
1040	}
1041	return json.Marshal(objectMap)
1042}
1043
1044// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1045func (afsrr AzureFileShareRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
1046	return &afsrr, true
1047}
1048
1049// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1050func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
1051	return nil, false
1052}
1053
1054// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1055func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
1056	return nil, false
1057}
1058
1059// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1060func (afsrr AzureFileShareRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
1061	return nil, false
1062}
1063
1064// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1065func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
1066	return nil, false
1067}
1068
1069// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1070func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
1071	return nil, false
1072}
1073
1074// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1075func (afsrr AzureFileShareRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
1076	return nil, false
1077}
1078
1079// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1080func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
1081	return nil, false
1082}
1083
1084// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1085func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
1086	return nil, false
1087}
1088
1089// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1090func (afsrr AzureFileShareRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
1091	return nil, false
1092}
1093
1094// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1095func (afsrr AzureFileShareRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
1096	return nil, false
1097}
1098
1099// AsRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1100func (afsrr AzureFileShareRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
1101	return nil, false
1102}
1103
1104// AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
1105func (afsrr AzureFileShareRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
1106	return &afsrr, true
1107}
1108
1109// AzureIaaSClassicComputeVMContainer iaaS VM workload-specific backup item representing a classic virtual
1110// machine.
1111type AzureIaaSClassicComputeVMContainer struct {
1112	// VirtualMachineID - Fully qualified ARM url of the virtual machine represented by this Azure IaaS VM container.
1113	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
1114	// VirtualMachineVersion - Specifies whether the container represents a Classic or an Azure Resource Manager VM.
1115	VirtualMachineVersion *string `json:"virtualMachineVersion,omitempty"`
1116	// ResourceGroup - Resource group name of Recovery Services Vault.
1117	ResourceGroup *string `json:"resourceGroup,omitempty"`
1118	// FriendlyName - Friendly name of the container.
1119	FriendlyName *string `json:"friendlyName,omitempty"`
1120	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
1121	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
1122	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
1123	RegistrationStatus *string `json:"registrationStatus,omitempty"`
1124	// HealthStatus - Status of health of the container.
1125	HealthStatus *string `json:"healthStatus,omitempty"`
1126	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
1127	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
1128}
1129
1130// MarshalJSON is the custom marshaler for AzureIaaSClassicComputeVMContainer.
1131func (aisccvc AzureIaaSClassicComputeVMContainer) MarshalJSON() ([]byte, error) {
1132	aisccvc.ContainerType = ContainerTypeMicrosoftClassicComputevirtualMachines
1133	objectMap := make(map[string]interface{})
1134	if aisccvc.VirtualMachineID != nil {
1135		objectMap["virtualMachineId"] = aisccvc.VirtualMachineID
1136	}
1137	if aisccvc.VirtualMachineVersion != nil {
1138		objectMap["virtualMachineVersion"] = aisccvc.VirtualMachineVersion
1139	}
1140	if aisccvc.ResourceGroup != nil {
1141		objectMap["resourceGroup"] = aisccvc.ResourceGroup
1142	}
1143	if aisccvc.FriendlyName != nil {
1144		objectMap["friendlyName"] = aisccvc.FriendlyName
1145	}
1146	if aisccvc.BackupManagementType != "" {
1147		objectMap["backupManagementType"] = aisccvc.BackupManagementType
1148	}
1149	if aisccvc.RegistrationStatus != nil {
1150		objectMap["registrationStatus"] = aisccvc.RegistrationStatus
1151	}
1152	if aisccvc.HealthStatus != nil {
1153		objectMap["healthStatus"] = aisccvc.HealthStatus
1154	}
1155	if aisccvc.ContainerType != "" {
1156		objectMap["containerType"] = aisccvc.ContainerType
1157	}
1158	return json.Marshal(objectMap)
1159}
1160
1161// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1162func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
1163	return nil, false
1164}
1165
1166// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1167func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
1168	return &aisccvc, true
1169}
1170
1171// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1172func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
1173	return nil, false
1174}
1175
1176// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1177func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
1178	return nil, false
1179}
1180
1181// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1182func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
1183	return nil, false
1184}
1185
1186// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1187func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
1188	return nil, false
1189}
1190
1191// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1192func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
1193	return nil, false
1194}
1195
1196// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1197func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
1198	return nil, false
1199}
1200
1201// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1202func (aisccvc AzureIaaSClassicComputeVMContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
1203	return nil, false
1204}
1205
1206// AsDpmContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1207func (aisccvc AzureIaaSClassicComputeVMContainer) AsDpmContainer() (*DpmContainer, bool) {
1208	return nil, false
1209}
1210
1211// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1212func (aisccvc AzureIaaSClassicComputeVMContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
1213	return nil, false
1214}
1215
1216// AsGenericContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1217func (aisccvc AzureIaaSClassicComputeVMContainer) AsGenericContainer() (*GenericContainer, bool) {
1218	return nil, false
1219}
1220
1221// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1222func (aisccvc AzureIaaSClassicComputeVMContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
1223	return nil, false
1224}
1225
1226// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1227func (aisccvc AzureIaaSClassicComputeVMContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
1228	return &aisccvc, true
1229}
1230
1231// AsMabContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1232func (aisccvc AzureIaaSClassicComputeVMContainer) AsMabContainer() (*MabContainer, bool) {
1233	return nil, false
1234}
1235
1236// AsProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1237func (aisccvc AzureIaaSClassicComputeVMContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
1238	return nil, false
1239}
1240
1241// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
1242func (aisccvc AzureIaaSClassicComputeVMContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
1243	return &aisccvc, true
1244}
1245
1246// AzureIaaSClassicComputeVMProtectableItem iaaS VM workload-specific backup item representing the Classic
1247// Compute VM.
1248type AzureIaaSClassicComputeVMProtectableItem struct {
1249	// VirtualMachineID - Fully qualified ARM ID of the virtual machine.
1250	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
1251	// BackupManagementType - Type of backup management to backup an item.
1252	BackupManagementType *string `json:"backupManagementType,omitempty"`
1253	// WorkloadType - Type of workload for the backup management
1254	WorkloadType *string `json:"workloadType,omitempty"`
1255	// FriendlyName - Friendly name of the backup item.
1256	FriendlyName *string `json:"friendlyName,omitempty"`
1257	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
1258	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
1259	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
1260	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
1261}
1262
1263// MarshalJSON is the custom marshaler for AzureIaaSClassicComputeVMProtectableItem.
1264func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) MarshalJSON() ([]byte, error) {
1265	aisccvpi.ProtectableItemType = ProtectableItemTypeMicrosoftClassicComputevirtualMachines
1266	objectMap := make(map[string]interface{})
1267	if aisccvpi.VirtualMachineID != nil {
1268		objectMap["virtualMachineId"] = aisccvpi.VirtualMachineID
1269	}
1270	if aisccvpi.BackupManagementType != nil {
1271		objectMap["backupManagementType"] = aisccvpi.BackupManagementType
1272	}
1273	if aisccvpi.WorkloadType != nil {
1274		objectMap["workloadType"] = aisccvpi.WorkloadType
1275	}
1276	if aisccvpi.FriendlyName != nil {
1277		objectMap["friendlyName"] = aisccvpi.FriendlyName
1278	}
1279	if aisccvpi.ProtectionState != "" {
1280		objectMap["protectionState"] = aisccvpi.ProtectionState
1281	}
1282	if aisccvpi.ProtectableItemType != "" {
1283		objectMap["protectableItemType"] = aisccvpi.ProtectableItemType
1284	}
1285	return json.Marshal(objectMap)
1286}
1287
1288// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1289func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
1290	return nil, false
1291}
1292
1293// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1294func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
1295	return &aisccvpi, true
1296}
1297
1298// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1299func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
1300	return nil, false
1301}
1302
1303// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1304func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
1305	return nil, false
1306}
1307
1308// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1309func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
1310	return nil, false
1311}
1312
1313// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1314func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
1315	return nil, false
1316}
1317
1318// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1319func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
1320	return nil, false
1321}
1322
1323// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1324func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
1325	return nil, false
1326}
1327
1328// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1329func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
1330	return nil, false
1331}
1332
1333// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1334func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
1335	return nil, false
1336}
1337
1338// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1339func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
1340	return nil, false
1341}
1342
1343// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1344func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
1345	return nil, false
1346}
1347
1348// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1349func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
1350	return &aisccvpi, true
1351}
1352
1353// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1354func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
1355	return nil, false
1356}
1357
1358// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
1359func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
1360	return &aisccvpi, true
1361}
1362
1363// AzureIaaSClassicComputeVMProtectedItem iaaS VM workload-specific backup item representing the Classic
1364// Compute VM.
1365type AzureIaaSClassicComputeVMProtectedItem struct {
1366	// FriendlyName - Friendly name of the VM represented by this backup item.
1367	FriendlyName *string `json:"friendlyName,omitempty"`
1368	// VirtualMachineID - Fully qualified ARM ID of the virtual machine represented by this item.
1369	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
1370	// ProtectionStatus - Backup status of this backup item.
1371	ProtectionStatus *string `json:"protectionStatus,omitempty"`
1372	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
1373	ProtectionState ProtectionState `json:"protectionState,omitempty"`
1374	// HealthStatus - Health status of protected item. Possible values include: 'HealthStatusPassed', 'HealthStatusActionRequired', 'HealthStatusActionSuggested', 'HealthStatusInvalid'
1375	HealthStatus HealthStatus `json:"healthStatus,omitempty"`
1376	// HealthDetails - Health details on this backup item.
1377	HealthDetails *[]AzureIaaSVMHealthDetails `json:"healthDetails,omitempty"`
1378	// KpisHealths - Health details of different KPIs
1379	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
1380	// LastBackupStatus - Last backup operation status.
1381	LastBackupStatus *string `json:"lastBackupStatus,omitempty"`
1382	// LastBackupTime - Timestamp of the last backup operation on this backup item.
1383	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
1384	// ProtectedItemDataID - Data ID of the protected item.
1385	ProtectedItemDataID *string `json:"protectedItemDataId,omitempty"`
1386	// ExtendedInfo - Additional information for this backup item.
1387	ExtendedInfo       *AzureIaaSVMProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
1388	ExtendedProperties *ExtendedProperties                   `json:"extendedProperties,omitempty"`
1389	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
1390	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
1391	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
1392	WorkloadType DataSourceType `json:"workloadType,omitempty"`
1393	// ContainerName - Unique name of container
1394	ContainerName *string `json:"containerName,omitempty"`
1395	// SourceResourceID - ARM ID of the resource to be backed up.
1396	SourceResourceID *string `json:"sourceResourceId,omitempty"`
1397	// PolicyID - ID of the backup policy with which this item is backed up.
1398	PolicyID *string `json:"policyId,omitempty"`
1399	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
1400	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
1401	// BackupSetName - Name of the backup set the backup item belongs to
1402	BackupSetName *string `json:"backupSetName,omitempty"`
1403	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
1404	CreateMode CreateMode `json:"createMode,omitempty"`
1405	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
1406	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
1407	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
1408	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
1409	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
1410	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
1411	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
1412	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
1413	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
1414	IsRehydrate *bool `json:"isRehydrate,omitempty"`
1415	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
1416	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
1417}
1418
1419// MarshalJSON is the custom marshaler for AzureIaaSClassicComputeVMProtectedItem.
1420func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) MarshalJSON() ([]byte, error) {
1421	aisccvpi.ProtectedItemType = ProtectedItemTypeMicrosoftClassicComputevirtualMachines
1422	objectMap := make(map[string]interface{})
1423	if aisccvpi.FriendlyName != nil {
1424		objectMap["friendlyName"] = aisccvpi.FriendlyName
1425	}
1426	if aisccvpi.VirtualMachineID != nil {
1427		objectMap["virtualMachineId"] = aisccvpi.VirtualMachineID
1428	}
1429	if aisccvpi.ProtectionStatus != nil {
1430		objectMap["protectionStatus"] = aisccvpi.ProtectionStatus
1431	}
1432	if aisccvpi.ProtectionState != "" {
1433		objectMap["protectionState"] = aisccvpi.ProtectionState
1434	}
1435	if aisccvpi.HealthStatus != "" {
1436		objectMap["healthStatus"] = aisccvpi.HealthStatus
1437	}
1438	if aisccvpi.HealthDetails != nil {
1439		objectMap["healthDetails"] = aisccvpi.HealthDetails
1440	}
1441	if aisccvpi.KpisHealths != nil {
1442		objectMap["kpisHealths"] = aisccvpi.KpisHealths
1443	}
1444	if aisccvpi.LastBackupStatus != nil {
1445		objectMap["lastBackupStatus"] = aisccvpi.LastBackupStatus
1446	}
1447	if aisccvpi.LastBackupTime != nil {
1448		objectMap["lastBackupTime"] = aisccvpi.LastBackupTime
1449	}
1450	if aisccvpi.ProtectedItemDataID != nil {
1451		objectMap["protectedItemDataId"] = aisccvpi.ProtectedItemDataID
1452	}
1453	if aisccvpi.ExtendedInfo != nil {
1454		objectMap["extendedInfo"] = aisccvpi.ExtendedInfo
1455	}
1456	if aisccvpi.ExtendedProperties != nil {
1457		objectMap["extendedProperties"] = aisccvpi.ExtendedProperties
1458	}
1459	if aisccvpi.BackupManagementType != "" {
1460		objectMap["backupManagementType"] = aisccvpi.BackupManagementType
1461	}
1462	if aisccvpi.WorkloadType != "" {
1463		objectMap["workloadType"] = aisccvpi.WorkloadType
1464	}
1465	if aisccvpi.ContainerName != nil {
1466		objectMap["containerName"] = aisccvpi.ContainerName
1467	}
1468	if aisccvpi.SourceResourceID != nil {
1469		objectMap["sourceResourceId"] = aisccvpi.SourceResourceID
1470	}
1471	if aisccvpi.PolicyID != nil {
1472		objectMap["policyId"] = aisccvpi.PolicyID
1473	}
1474	if aisccvpi.LastRecoveryPoint != nil {
1475		objectMap["lastRecoveryPoint"] = aisccvpi.LastRecoveryPoint
1476	}
1477	if aisccvpi.BackupSetName != nil {
1478		objectMap["backupSetName"] = aisccvpi.BackupSetName
1479	}
1480	if aisccvpi.CreateMode != "" {
1481		objectMap["createMode"] = aisccvpi.CreateMode
1482	}
1483	if aisccvpi.DeferredDeleteTimeInUTC != nil {
1484		objectMap["deferredDeleteTimeInUTC"] = aisccvpi.DeferredDeleteTimeInUTC
1485	}
1486	if aisccvpi.IsScheduledForDeferredDelete != nil {
1487		objectMap["isScheduledForDeferredDelete"] = aisccvpi.IsScheduledForDeferredDelete
1488	}
1489	if aisccvpi.DeferredDeleteTimeRemaining != nil {
1490		objectMap["deferredDeleteTimeRemaining"] = aisccvpi.DeferredDeleteTimeRemaining
1491	}
1492	if aisccvpi.IsDeferredDeleteScheduleUpcoming != nil {
1493		objectMap["isDeferredDeleteScheduleUpcoming"] = aisccvpi.IsDeferredDeleteScheduleUpcoming
1494	}
1495	if aisccvpi.IsRehydrate != nil {
1496		objectMap["isRehydrate"] = aisccvpi.IsRehydrate
1497	}
1498	if aisccvpi.ProtectedItemType != "" {
1499		objectMap["protectedItemType"] = aisccvpi.ProtectedItemType
1500	}
1501	return json.Marshal(objectMap)
1502}
1503
1504// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1505func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
1506	return nil, false
1507}
1508
1509// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1510func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
1511	return &aisccvpi, true
1512}
1513
1514// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1515func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
1516	return nil, false
1517}
1518
1519// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1520func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
1521	return nil, false
1522}
1523
1524// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1525func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
1526	return &aisccvpi, true
1527}
1528
1529// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1530func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
1531	return nil, false
1532}
1533
1534// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1535func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
1536	return nil, false
1537}
1538
1539// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1540func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
1541	return nil, false
1542}
1543
1544// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1545func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
1546	return nil, false
1547}
1548
1549// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1550func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
1551	return nil, false
1552}
1553
1554// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1555func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
1556	return nil, false
1557}
1558
1559// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1560func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
1561	return nil, false
1562}
1563
1564// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1565func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
1566	return nil, false
1567}
1568
1569// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1570func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
1571	return nil, false
1572}
1573
1574// AsProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1575func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
1576	return nil, false
1577}
1578
1579// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
1580func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
1581	return &aisccvpi, true
1582}
1583
1584// AzureIaaSComputeVMContainer iaaS VM workload-specific backup item representing an Azure Resource Manager
1585// virtual machine.
1586type AzureIaaSComputeVMContainer struct {
1587	// VirtualMachineID - Fully qualified ARM url of the virtual machine represented by this Azure IaaS VM container.
1588	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
1589	// VirtualMachineVersion - Specifies whether the container represents a Classic or an Azure Resource Manager VM.
1590	VirtualMachineVersion *string `json:"virtualMachineVersion,omitempty"`
1591	// ResourceGroup - Resource group name of Recovery Services Vault.
1592	ResourceGroup *string `json:"resourceGroup,omitempty"`
1593	// FriendlyName - Friendly name of the container.
1594	FriendlyName *string `json:"friendlyName,omitempty"`
1595	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
1596	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
1597	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
1598	RegistrationStatus *string `json:"registrationStatus,omitempty"`
1599	// HealthStatus - Status of health of the container.
1600	HealthStatus *string `json:"healthStatus,omitempty"`
1601	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
1602	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
1603}
1604
1605// MarshalJSON is the custom marshaler for AzureIaaSComputeVMContainer.
1606func (aiscvc AzureIaaSComputeVMContainer) MarshalJSON() ([]byte, error) {
1607	aiscvc.ContainerType = ContainerTypeMicrosoftComputevirtualMachines
1608	objectMap := make(map[string]interface{})
1609	if aiscvc.VirtualMachineID != nil {
1610		objectMap["virtualMachineId"] = aiscvc.VirtualMachineID
1611	}
1612	if aiscvc.VirtualMachineVersion != nil {
1613		objectMap["virtualMachineVersion"] = aiscvc.VirtualMachineVersion
1614	}
1615	if aiscvc.ResourceGroup != nil {
1616		objectMap["resourceGroup"] = aiscvc.ResourceGroup
1617	}
1618	if aiscvc.FriendlyName != nil {
1619		objectMap["friendlyName"] = aiscvc.FriendlyName
1620	}
1621	if aiscvc.BackupManagementType != "" {
1622		objectMap["backupManagementType"] = aiscvc.BackupManagementType
1623	}
1624	if aiscvc.RegistrationStatus != nil {
1625		objectMap["registrationStatus"] = aiscvc.RegistrationStatus
1626	}
1627	if aiscvc.HealthStatus != nil {
1628		objectMap["healthStatus"] = aiscvc.HealthStatus
1629	}
1630	if aiscvc.ContainerType != "" {
1631		objectMap["containerType"] = aiscvc.ContainerType
1632	}
1633	return json.Marshal(objectMap)
1634}
1635
1636// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1637func (aiscvc AzureIaaSComputeVMContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
1638	return nil, false
1639}
1640
1641// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1642func (aiscvc AzureIaaSComputeVMContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
1643	return nil, false
1644}
1645
1646// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1647func (aiscvc AzureIaaSComputeVMContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
1648	return &aiscvc, true
1649}
1650
1651// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1652func (aiscvc AzureIaaSComputeVMContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
1653	return nil, false
1654}
1655
1656// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1657func (aiscvc AzureIaaSComputeVMContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
1658	return nil, false
1659}
1660
1661// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1662func (aiscvc AzureIaaSComputeVMContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
1663	return nil, false
1664}
1665
1666// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1667func (aiscvc AzureIaaSComputeVMContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
1668	return nil, false
1669}
1670
1671// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1672func (aiscvc AzureIaaSComputeVMContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
1673	return nil, false
1674}
1675
1676// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1677func (aiscvc AzureIaaSComputeVMContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
1678	return nil, false
1679}
1680
1681// AsDpmContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1682func (aiscvc AzureIaaSComputeVMContainer) AsDpmContainer() (*DpmContainer, bool) {
1683	return nil, false
1684}
1685
1686// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1687func (aiscvc AzureIaaSComputeVMContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
1688	return nil, false
1689}
1690
1691// AsGenericContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1692func (aiscvc AzureIaaSComputeVMContainer) AsGenericContainer() (*GenericContainer, bool) {
1693	return nil, false
1694}
1695
1696// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1697func (aiscvc AzureIaaSComputeVMContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
1698	return nil, false
1699}
1700
1701// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1702func (aiscvc AzureIaaSComputeVMContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
1703	return &aiscvc, true
1704}
1705
1706// AsMabContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1707func (aiscvc AzureIaaSComputeVMContainer) AsMabContainer() (*MabContainer, bool) {
1708	return nil, false
1709}
1710
1711// AsProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1712func (aiscvc AzureIaaSComputeVMContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
1713	return nil, false
1714}
1715
1716// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
1717func (aiscvc AzureIaaSComputeVMContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
1718	return &aiscvc, true
1719}
1720
1721// AzureIaaSComputeVMProtectableItem iaaS VM workload-specific backup item representing the Azure Resource
1722// Manager VM.
1723type AzureIaaSComputeVMProtectableItem struct {
1724	// VirtualMachineID - Fully qualified ARM ID of the virtual machine.
1725	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
1726	// BackupManagementType - Type of backup management to backup an item.
1727	BackupManagementType *string `json:"backupManagementType,omitempty"`
1728	// WorkloadType - Type of workload for the backup management
1729	WorkloadType *string `json:"workloadType,omitempty"`
1730	// FriendlyName - Friendly name of the backup item.
1731	FriendlyName *string `json:"friendlyName,omitempty"`
1732	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
1733	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
1734	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
1735	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
1736}
1737
1738// MarshalJSON is the custom marshaler for AzureIaaSComputeVMProtectableItem.
1739func (aiscvpi AzureIaaSComputeVMProtectableItem) MarshalJSON() ([]byte, error) {
1740	aiscvpi.ProtectableItemType = ProtectableItemTypeMicrosoftComputevirtualMachines
1741	objectMap := make(map[string]interface{})
1742	if aiscvpi.VirtualMachineID != nil {
1743		objectMap["virtualMachineId"] = aiscvpi.VirtualMachineID
1744	}
1745	if aiscvpi.BackupManagementType != nil {
1746		objectMap["backupManagementType"] = aiscvpi.BackupManagementType
1747	}
1748	if aiscvpi.WorkloadType != nil {
1749		objectMap["workloadType"] = aiscvpi.WorkloadType
1750	}
1751	if aiscvpi.FriendlyName != nil {
1752		objectMap["friendlyName"] = aiscvpi.FriendlyName
1753	}
1754	if aiscvpi.ProtectionState != "" {
1755		objectMap["protectionState"] = aiscvpi.ProtectionState
1756	}
1757	if aiscvpi.ProtectableItemType != "" {
1758		objectMap["protectableItemType"] = aiscvpi.ProtectableItemType
1759	}
1760	return json.Marshal(objectMap)
1761}
1762
1763// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1764func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
1765	return nil, false
1766}
1767
1768// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1769func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
1770	return nil, false
1771}
1772
1773// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1774func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
1775	return &aiscvpi, true
1776}
1777
1778// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1779func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
1780	return nil, false
1781}
1782
1783// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1784func (aiscvpi AzureIaaSComputeVMProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
1785	return nil, false
1786}
1787
1788// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1789func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
1790	return nil, false
1791}
1792
1793// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1794func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
1795	return nil, false
1796}
1797
1798// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1799func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
1800	return nil, false
1801}
1802
1803// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1804func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
1805	return nil, false
1806}
1807
1808// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1809func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
1810	return nil, false
1811}
1812
1813// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1814func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
1815	return nil, false
1816}
1817
1818// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1819func (aiscvpi AzureIaaSComputeVMProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
1820	return nil, false
1821}
1822
1823// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1824func (aiscvpi AzureIaaSComputeVMProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
1825	return &aiscvpi, true
1826}
1827
1828// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1829func (aiscvpi AzureIaaSComputeVMProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
1830	return nil, false
1831}
1832
1833// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
1834func (aiscvpi AzureIaaSComputeVMProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
1835	return &aiscvpi, true
1836}
1837
1838// AzureIaaSComputeVMProtectedItem iaaS VM workload-specific backup item representing the Azure Resource
1839// Manager VM.
1840type AzureIaaSComputeVMProtectedItem struct {
1841	// FriendlyName - Friendly name of the VM represented by this backup item.
1842	FriendlyName *string `json:"friendlyName,omitempty"`
1843	// VirtualMachineID - Fully qualified ARM ID of the virtual machine represented by this item.
1844	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
1845	// ProtectionStatus - Backup status of this backup item.
1846	ProtectionStatus *string `json:"protectionStatus,omitempty"`
1847	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
1848	ProtectionState ProtectionState `json:"protectionState,omitempty"`
1849	// HealthStatus - Health status of protected item. Possible values include: 'HealthStatusPassed', 'HealthStatusActionRequired', 'HealthStatusActionSuggested', 'HealthStatusInvalid'
1850	HealthStatus HealthStatus `json:"healthStatus,omitempty"`
1851	// HealthDetails - Health details on this backup item.
1852	HealthDetails *[]AzureIaaSVMHealthDetails `json:"healthDetails,omitempty"`
1853	// KpisHealths - Health details of different KPIs
1854	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
1855	// LastBackupStatus - Last backup operation status.
1856	LastBackupStatus *string `json:"lastBackupStatus,omitempty"`
1857	// LastBackupTime - Timestamp of the last backup operation on this backup item.
1858	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
1859	// ProtectedItemDataID - Data ID of the protected item.
1860	ProtectedItemDataID *string `json:"protectedItemDataId,omitempty"`
1861	// ExtendedInfo - Additional information for this backup item.
1862	ExtendedInfo       *AzureIaaSVMProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
1863	ExtendedProperties *ExtendedProperties                   `json:"extendedProperties,omitempty"`
1864	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
1865	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
1866	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
1867	WorkloadType DataSourceType `json:"workloadType,omitempty"`
1868	// ContainerName - Unique name of container
1869	ContainerName *string `json:"containerName,omitempty"`
1870	// SourceResourceID - ARM ID of the resource to be backed up.
1871	SourceResourceID *string `json:"sourceResourceId,omitempty"`
1872	// PolicyID - ID of the backup policy with which this item is backed up.
1873	PolicyID *string `json:"policyId,omitempty"`
1874	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
1875	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
1876	// BackupSetName - Name of the backup set the backup item belongs to
1877	BackupSetName *string `json:"backupSetName,omitempty"`
1878	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
1879	CreateMode CreateMode `json:"createMode,omitempty"`
1880	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
1881	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
1882	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
1883	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
1884	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
1885	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
1886	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
1887	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
1888	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
1889	IsRehydrate *bool `json:"isRehydrate,omitempty"`
1890	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
1891	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
1892}
1893
1894// MarshalJSON is the custom marshaler for AzureIaaSComputeVMProtectedItem.
1895func (aiscvpi AzureIaaSComputeVMProtectedItem) MarshalJSON() ([]byte, error) {
1896	aiscvpi.ProtectedItemType = ProtectedItemTypeMicrosoftComputevirtualMachines
1897	objectMap := make(map[string]interface{})
1898	if aiscvpi.FriendlyName != nil {
1899		objectMap["friendlyName"] = aiscvpi.FriendlyName
1900	}
1901	if aiscvpi.VirtualMachineID != nil {
1902		objectMap["virtualMachineId"] = aiscvpi.VirtualMachineID
1903	}
1904	if aiscvpi.ProtectionStatus != nil {
1905		objectMap["protectionStatus"] = aiscvpi.ProtectionStatus
1906	}
1907	if aiscvpi.ProtectionState != "" {
1908		objectMap["protectionState"] = aiscvpi.ProtectionState
1909	}
1910	if aiscvpi.HealthStatus != "" {
1911		objectMap["healthStatus"] = aiscvpi.HealthStatus
1912	}
1913	if aiscvpi.HealthDetails != nil {
1914		objectMap["healthDetails"] = aiscvpi.HealthDetails
1915	}
1916	if aiscvpi.KpisHealths != nil {
1917		objectMap["kpisHealths"] = aiscvpi.KpisHealths
1918	}
1919	if aiscvpi.LastBackupStatus != nil {
1920		objectMap["lastBackupStatus"] = aiscvpi.LastBackupStatus
1921	}
1922	if aiscvpi.LastBackupTime != nil {
1923		objectMap["lastBackupTime"] = aiscvpi.LastBackupTime
1924	}
1925	if aiscvpi.ProtectedItemDataID != nil {
1926		objectMap["protectedItemDataId"] = aiscvpi.ProtectedItemDataID
1927	}
1928	if aiscvpi.ExtendedInfo != nil {
1929		objectMap["extendedInfo"] = aiscvpi.ExtendedInfo
1930	}
1931	if aiscvpi.ExtendedProperties != nil {
1932		objectMap["extendedProperties"] = aiscvpi.ExtendedProperties
1933	}
1934	if aiscvpi.BackupManagementType != "" {
1935		objectMap["backupManagementType"] = aiscvpi.BackupManagementType
1936	}
1937	if aiscvpi.WorkloadType != "" {
1938		objectMap["workloadType"] = aiscvpi.WorkloadType
1939	}
1940	if aiscvpi.ContainerName != nil {
1941		objectMap["containerName"] = aiscvpi.ContainerName
1942	}
1943	if aiscvpi.SourceResourceID != nil {
1944		objectMap["sourceResourceId"] = aiscvpi.SourceResourceID
1945	}
1946	if aiscvpi.PolicyID != nil {
1947		objectMap["policyId"] = aiscvpi.PolicyID
1948	}
1949	if aiscvpi.LastRecoveryPoint != nil {
1950		objectMap["lastRecoveryPoint"] = aiscvpi.LastRecoveryPoint
1951	}
1952	if aiscvpi.BackupSetName != nil {
1953		objectMap["backupSetName"] = aiscvpi.BackupSetName
1954	}
1955	if aiscvpi.CreateMode != "" {
1956		objectMap["createMode"] = aiscvpi.CreateMode
1957	}
1958	if aiscvpi.DeferredDeleteTimeInUTC != nil {
1959		objectMap["deferredDeleteTimeInUTC"] = aiscvpi.DeferredDeleteTimeInUTC
1960	}
1961	if aiscvpi.IsScheduledForDeferredDelete != nil {
1962		objectMap["isScheduledForDeferredDelete"] = aiscvpi.IsScheduledForDeferredDelete
1963	}
1964	if aiscvpi.DeferredDeleteTimeRemaining != nil {
1965		objectMap["deferredDeleteTimeRemaining"] = aiscvpi.DeferredDeleteTimeRemaining
1966	}
1967	if aiscvpi.IsDeferredDeleteScheduleUpcoming != nil {
1968		objectMap["isDeferredDeleteScheduleUpcoming"] = aiscvpi.IsDeferredDeleteScheduleUpcoming
1969	}
1970	if aiscvpi.IsRehydrate != nil {
1971		objectMap["isRehydrate"] = aiscvpi.IsRehydrate
1972	}
1973	if aiscvpi.ProtectedItemType != "" {
1974		objectMap["protectedItemType"] = aiscvpi.ProtectedItemType
1975	}
1976	return json.Marshal(objectMap)
1977}
1978
1979// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
1980func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
1981	return nil, false
1982}
1983
1984// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
1985func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
1986	return nil, false
1987}
1988
1989// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
1990func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
1991	return &aiscvpi, true
1992}
1993
1994// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
1995func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
1996	return nil, false
1997}
1998
1999// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2000func (aiscvpi AzureIaaSComputeVMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
2001	return &aiscvpi, true
2002}
2003
2004// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2005func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
2006	return nil, false
2007}
2008
2009// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2010func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
2011	return nil, false
2012}
2013
2014// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2015func (aiscvpi AzureIaaSComputeVMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
2016	return nil, false
2017}
2018
2019// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2020func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
2021	return nil, false
2022}
2023
2024// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2025func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
2026	return nil, false
2027}
2028
2029// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2030func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
2031	return nil, false
2032}
2033
2034// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2035func (aiscvpi AzureIaaSComputeVMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
2036	return nil, false
2037}
2038
2039// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2040func (aiscvpi AzureIaaSComputeVMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
2041	return nil, false
2042}
2043
2044// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2045func (aiscvpi AzureIaaSComputeVMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
2046	return nil, false
2047}
2048
2049// AsProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2050func (aiscvpi AzureIaaSComputeVMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
2051	return nil, false
2052}
2053
2054// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
2055func (aiscvpi AzureIaaSComputeVMProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
2056	return &aiscvpi, true
2057}
2058
2059// AzureIaaSVMErrorInfo azure IaaS VM workload-specific error information.
2060type AzureIaaSVMErrorInfo struct {
2061	// ErrorCode - READ-ONLY; Error code.
2062	ErrorCode *int32 `json:"errorCode,omitempty"`
2063	// ErrorTitle - READ-ONLY; Title: Typically, the entity that the error pertains to.
2064	ErrorTitle *string `json:"errorTitle,omitempty"`
2065	// ErrorString - READ-ONLY; Localized error string.
2066	ErrorString *string `json:"errorString,omitempty"`
2067	// Recommendations - READ-ONLY; List of localized recommendations for above error code.
2068	Recommendations *[]string `json:"recommendations,omitempty"`
2069}
2070
2071// MarshalJSON is the custom marshaler for AzureIaaSVMErrorInfo.
2072func (aisei AzureIaaSVMErrorInfo) MarshalJSON() ([]byte, error) {
2073	objectMap := make(map[string]interface{})
2074	return json.Marshal(objectMap)
2075}
2076
2077// AzureIaaSVMHealthDetails azure IaaS VM workload-specific Health Details.
2078type AzureIaaSVMHealthDetails struct {
2079	// Code - READ-ONLY; Health Code
2080	Code *int32 `json:"code,omitempty"`
2081	// Title - READ-ONLY; Health Title
2082	Title *string `json:"title,omitempty"`
2083	// Message - READ-ONLY; Health Message
2084	Message *string `json:"message,omitempty"`
2085	// Recommendations - READ-ONLY; Health Recommended Actions
2086	Recommendations *[]string `json:"recommendations,omitempty"`
2087}
2088
2089// MarshalJSON is the custom marshaler for AzureIaaSVMHealthDetails.
2090func (aishd AzureIaaSVMHealthDetails) MarshalJSON() ([]byte, error) {
2091	objectMap := make(map[string]interface{})
2092	return json.Marshal(objectMap)
2093}
2094
2095// AzureIaaSVMJob azure IaaS VM workload-specific job object.
2096type AzureIaaSVMJob struct {
2097	// Duration - Time elapsed during the execution of this job.
2098	Duration *string `json:"duration,omitempty"`
2099	// ActionsInfo - Gets or sets the state/actions applicable on this job like cancel/retry.
2100	ActionsInfo *[]JobSupportedAction `json:"actionsInfo,omitempty"`
2101	// ErrorDetails - Error details on execution of this job.
2102	ErrorDetails *[]AzureIaaSVMErrorInfo `json:"errorDetails,omitempty"`
2103	// VirtualMachineVersion - Specifies whether the backup item is a Classic or an Azure Resource Manager VM.
2104	VirtualMachineVersion *string `json:"virtualMachineVersion,omitempty"`
2105	// ExtendedInfo - Additional information for this job.
2106	ExtendedInfo *AzureIaaSVMJobExtendedInfo `json:"extendedInfo,omitempty"`
2107	// EntityFriendlyName - Friendly name of the entity on which the current job is executing.
2108	EntityFriendlyName *string `json:"entityFriendlyName,omitempty"`
2109	// BackupManagementType - Backup management type to execute the current job. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
2110	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
2111	// Operation - The operation name.
2112	Operation *string `json:"operation,omitempty"`
2113	// Status - Job status.
2114	Status *string `json:"status,omitempty"`
2115	// StartTime - The start time.
2116	StartTime *date.Time `json:"startTime,omitempty"`
2117	// EndTime - The end time.
2118	EndTime *date.Time `json:"endTime,omitempty"`
2119	// ActivityID - ActivityId of job.
2120	ActivityID *string `json:"activityId,omitempty"`
2121	// JobType - Possible values include: 'JobTypeJob', 'JobTypeAzureIaaSVMJob', 'JobTypeAzureStorageJob', 'JobTypeAzureWorkloadJob', 'JobTypeDpmJob', 'JobTypeMabJob'
2122	JobType JobType `json:"jobType,omitempty"`
2123}
2124
2125// MarshalJSON is the custom marshaler for AzureIaaSVMJob.
2126func (aisj AzureIaaSVMJob) MarshalJSON() ([]byte, error) {
2127	aisj.JobType = JobTypeAzureIaaSVMJob
2128	objectMap := make(map[string]interface{})
2129	if aisj.Duration != nil {
2130		objectMap["duration"] = aisj.Duration
2131	}
2132	if aisj.ActionsInfo != nil {
2133		objectMap["actionsInfo"] = aisj.ActionsInfo
2134	}
2135	if aisj.ErrorDetails != nil {
2136		objectMap["errorDetails"] = aisj.ErrorDetails
2137	}
2138	if aisj.VirtualMachineVersion != nil {
2139		objectMap["virtualMachineVersion"] = aisj.VirtualMachineVersion
2140	}
2141	if aisj.ExtendedInfo != nil {
2142		objectMap["extendedInfo"] = aisj.ExtendedInfo
2143	}
2144	if aisj.EntityFriendlyName != nil {
2145		objectMap["entityFriendlyName"] = aisj.EntityFriendlyName
2146	}
2147	if aisj.BackupManagementType != "" {
2148		objectMap["backupManagementType"] = aisj.BackupManagementType
2149	}
2150	if aisj.Operation != nil {
2151		objectMap["operation"] = aisj.Operation
2152	}
2153	if aisj.Status != nil {
2154		objectMap["status"] = aisj.Status
2155	}
2156	if aisj.StartTime != nil {
2157		objectMap["startTime"] = aisj.StartTime
2158	}
2159	if aisj.EndTime != nil {
2160		objectMap["endTime"] = aisj.EndTime
2161	}
2162	if aisj.ActivityID != nil {
2163		objectMap["activityId"] = aisj.ActivityID
2164	}
2165	if aisj.JobType != "" {
2166		objectMap["jobType"] = aisj.JobType
2167	}
2168	return json.Marshal(objectMap)
2169}
2170
2171// AsAzureIaaSVMJob is the BasicJob implementation for AzureIaaSVMJob.
2172func (aisj AzureIaaSVMJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
2173	return &aisj, true
2174}
2175
2176// AsAzureStorageJob is the BasicJob implementation for AzureIaaSVMJob.
2177func (aisj AzureIaaSVMJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
2178	return nil, false
2179}
2180
2181// AsAzureWorkloadJob is the BasicJob implementation for AzureIaaSVMJob.
2182func (aisj AzureIaaSVMJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
2183	return nil, false
2184}
2185
2186// AsDpmJob is the BasicJob implementation for AzureIaaSVMJob.
2187func (aisj AzureIaaSVMJob) AsDpmJob() (*DpmJob, bool) {
2188	return nil, false
2189}
2190
2191// AsMabJob is the BasicJob implementation for AzureIaaSVMJob.
2192func (aisj AzureIaaSVMJob) AsMabJob() (*MabJob, bool) {
2193	return nil, false
2194}
2195
2196// AsJob is the BasicJob implementation for AzureIaaSVMJob.
2197func (aisj AzureIaaSVMJob) AsJob() (*Job, bool) {
2198	return nil, false
2199}
2200
2201// AsBasicJob is the BasicJob implementation for AzureIaaSVMJob.
2202func (aisj AzureIaaSVMJob) AsBasicJob() (BasicJob, bool) {
2203	return &aisj, true
2204}
2205
2206// AzureIaaSVMJobExtendedInfo azure IaaS VM workload-specific additional information for job.
2207type AzureIaaSVMJobExtendedInfo struct {
2208	// TasksList - List of tasks associated with this job.
2209	TasksList *[]AzureIaaSVMJobTaskDetails `json:"tasksList,omitempty"`
2210	// PropertyBag - Job properties.
2211	PropertyBag map[string]*string `json:"propertyBag"`
2212	// InternalPropertyBag - Job internal properties.
2213	InternalPropertyBag map[string]*string `json:"internalPropertyBag"`
2214	// ProgressPercentage - Indicates progress of the job. Null if it has not started or completed.
2215	ProgressPercentage *float64 `json:"progressPercentage,omitempty"`
2216	// EstimatedRemainingDuration - Time remaining for execution of this job.
2217	EstimatedRemainingDuration *string `json:"estimatedRemainingDuration,omitempty"`
2218	// DynamicErrorMessage - Non localized error message on job execution.
2219	DynamicErrorMessage *string `json:"dynamicErrorMessage,omitempty"`
2220}
2221
2222// MarshalJSON is the custom marshaler for AzureIaaSVMJobExtendedInfo.
2223func (aisjei AzureIaaSVMJobExtendedInfo) MarshalJSON() ([]byte, error) {
2224	objectMap := make(map[string]interface{})
2225	if aisjei.TasksList != nil {
2226		objectMap["tasksList"] = aisjei.TasksList
2227	}
2228	if aisjei.PropertyBag != nil {
2229		objectMap["propertyBag"] = aisjei.PropertyBag
2230	}
2231	if aisjei.InternalPropertyBag != nil {
2232		objectMap["internalPropertyBag"] = aisjei.InternalPropertyBag
2233	}
2234	if aisjei.ProgressPercentage != nil {
2235		objectMap["progressPercentage"] = aisjei.ProgressPercentage
2236	}
2237	if aisjei.EstimatedRemainingDuration != nil {
2238		objectMap["estimatedRemainingDuration"] = aisjei.EstimatedRemainingDuration
2239	}
2240	if aisjei.DynamicErrorMessage != nil {
2241		objectMap["dynamicErrorMessage"] = aisjei.DynamicErrorMessage
2242	}
2243	return json.Marshal(objectMap)
2244}
2245
2246// AzureIaaSVMJobTaskDetails azure IaaS VM workload-specific job task details.
2247type AzureIaaSVMJobTaskDetails struct {
2248	// TaskID - The task display name.
2249	TaskID *string `json:"taskId,omitempty"`
2250	// StartTime - The start time.
2251	StartTime *date.Time `json:"startTime,omitempty"`
2252	// EndTime - The end time.
2253	EndTime *date.Time `json:"endTime,omitempty"`
2254	// InstanceID - The instanceId.
2255	InstanceID *string `json:"instanceId,omitempty"`
2256	// Duration - Time elapsed for task.
2257	Duration *string `json:"duration,omitempty"`
2258	// Status - The status.
2259	Status *string `json:"status,omitempty"`
2260	// ProgressPercentage - Progress of the task.
2261	ProgressPercentage *float64 `json:"progressPercentage,omitempty"`
2262	// TaskExecutionDetails - Details about execution of the task.
2263	// eg: number of bytes transferred etc
2264	TaskExecutionDetails *string `json:"taskExecutionDetails,omitempty"`
2265}
2266
2267// BasicAzureIaaSVMProtectedItem iaaS VM workload-specific backup item.
2268type BasicAzureIaaSVMProtectedItem interface {
2269	AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool)
2270	AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool)
2271	AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool)
2272}
2273
2274// AzureIaaSVMProtectedItem iaaS VM workload-specific backup item.
2275type AzureIaaSVMProtectedItem struct {
2276	// FriendlyName - Friendly name of the VM represented by this backup item.
2277	FriendlyName *string `json:"friendlyName,omitempty"`
2278	// VirtualMachineID - Fully qualified ARM ID of the virtual machine represented by this item.
2279	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
2280	// ProtectionStatus - Backup status of this backup item.
2281	ProtectionStatus *string `json:"protectionStatus,omitempty"`
2282	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
2283	ProtectionState ProtectionState `json:"protectionState,omitempty"`
2284	// HealthStatus - Health status of protected item. Possible values include: 'HealthStatusPassed', 'HealthStatusActionRequired', 'HealthStatusActionSuggested', 'HealthStatusInvalid'
2285	HealthStatus HealthStatus `json:"healthStatus,omitempty"`
2286	// HealthDetails - Health details on this backup item.
2287	HealthDetails *[]AzureIaaSVMHealthDetails `json:"healthDetails,omitempty"`
2288	// KpisHealths - Health details of different KPIs
2289	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
2290	// LastBackupStatus - Last backup operation status.
2291	LastBackupStatus *string `json:"lastBackupStatus,omitempty"`
2292	// LastBackupTime - Timestamp of the last backup operation on this backup item.
2293	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
2294	// ProtectedItemDataID - Data ID of the protected item.
2295	ProtectedItemDataID *string `json:"protectedItemDataId,omitempty"`
2296	// ExtendedInfo - Additional information for this backup item.
2297	ExtendedInfo       *AzureIaaSVMProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
2298	ExtendedProperties *ExtendedProperties                   `json:"extendedProperties,omitempty"`
2299	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
2300	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
2301	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
2302	WorkloadType DataSourceType `json:"workloadType,omitempty"`
2303	// ContainerName - Unique name of container
2304	ContainerName *string `json:"containerName,omitempty"`
2305	// SourceResourceID - ARM ID of the resource to be backed up.
2306	SourceResourceID *string `json:"sourceResourceId,omitempty"`
2307	// PolicyID - ID of the backup policy with which this item is backed up.
2308	PolicyID *string `json:"policyId,omitempty"`
2309	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
2310	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
2311	// BackupSetName - Name of the backup set the backup item belongs to
2312	BackupSetName *string `json:"backupSetName,omitempty"`
2313	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
2314	CreateMode CreateMode `json:"createMode,omitempty"`
2315	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
2316	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
2317	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
2318	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
2319	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
2320	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
2321	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
2322	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
2323	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
2324	IsRehydrate *bool `json:"isRehydrate,omitempty"`
2325	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
2326	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
2327}
2328
2329func unmarshalBasicAzureIaaSVMProtectedItem(body []byte) (BasicAzureIaaSVMProtectedItem, error) {
2330	var m map[string]interface{}
2331	err := json.Unmarshal(body, &m)
2332	if err != nil {
2333		return nil, err
2334	}
2335
2336	switch m["protectedItemType"] {
2337	case string(ProtectedItemTypeMicrosoftClassicComputevirtualMachines):
2338		var aisccvpi AzureIaaSClassicComputeVMProtectedItem
2339		err := json.Unmarshal(body, &aisccvpi)
2340		return aisccvpi, err
2341	case string(ProtectedItemTypeMicrosoftComputevirtualMachines):
2342		var aiscvpi AzureIaaSComputeVMProtectedItem
2343		err := json.Unmarshal(body, &aiscvpi)
2344		return aiscvpi, err
2345	default:
2346		var aispi AzureIaaSVMProtectedItem
2347		err := json.Unmarshal(body, &aispi)
2348		return aispi, err
2349	}
2350}
2351func unmarshalBasicAzureIaaSVMProtectedItemArray(body []byte) ([]BasicAzureIaaSVMProtectedItem, error) {
2352	var rawMessages []*json.RawMessage
2353	err := json.Unmarshal(body, &rawMessages)
2354	if err != nil {
2355		return nil, err
2356	}
2357
2358	aispiArray := make([]BasicAzureIaaSVMProtectedItem, len(rawMessages))
2359
2360	for index, rawMessage := range rawMessages {
2361		aispi, err := unmarshalBasicAzureIaaSVMProtectedItem(*rawMessage)
2362		if err != nil {
2363			return nil, err
2364		}
2365		aispiArray[index] = aispi
2366	}
2367	return aispiArray, nil
2368}
2369
2370// MarshalJSON is the custom marshaler for AzureIaaSVMProtectedItem.
2371func (aispi AzureIaaSVMProtectedItem) MarshalJSON() ([]byte, error) {
2372	aispi.ProtectedItemType = ProtectedItemTypeAzureIaaSVMProtectedItem
2373	objectMap := make(map[string]interface{})
2374	if aispi.FriendlyName != nil {
2375		objectMap["friendlyName"] = aispi.FriendlyName
2376	}
2377	if aispi.VirtualMachineID != nil {
2378		objectMap["virtualMachineId"] = aispi.VirtualMachineID
2379	}
2380	if aispi.ProtectionStatus != nil {
2381		objectMap["protectionStatus"] = aispi.ProtectionStatus
2382	}
2383	if aispi.ProtectionState != "" {
2384		objectMap["protectionState"] = aispi.ProtectionState
2385	}
2386	if aispi.HealthStatus != "" {
2387		objectMap["healthStatus"] = aispi.HealthStatus
2388	}
2389	if aispi.HealthDetails != nil {
2390		objectMap["healthDetails"] = aispi.HealthDetails
2391	}
2392	if aispi.KpisHealths != nil {
2393		objectMap["kpisHealths"] = aispi.KpisHealths
2394	}
2395	if aispi.LastBackupStatus != nil {
2396		objectMap["lastBackupStatus"] = aispi.LastBackupStatus
2397	}
2398	if aispi.LastBackupTime != nil {
2399		objectMap["lastBackupTime"] = aispi.LastBackupTime
2400	}
2401	if aispi.ProtectedItemDataID != nil {
2402		objectMap["protectedItemDataId"] = aispi.ProtectedItemDataID
2403	}
2404	if aispi.ExtendedInfo != nil {
2405		objectMap["extendedInfo"] = aispi.ExtendedInfo
2406	}
2407	if aispi.ExtendedProperties != nil {
2408		objectMap["extendedProperties"] = aispi.ExtendedProperties
2409	}
2410	if aispi.BackupManagementType != "" {
2411		objectMap["backupManagementType"] = aispi.BackupManagementType
2412	}
2413	if aispi.WorkloadType != "" {
2414		objectMap["workloadType"] = aispi.WorkloadType
2415	}
2416	if aispi.ContainerName != nil {
2417		objectMap["containerName"] = aispi.ContainerName
2418	}
2419	if aispi.SourceResourceID != nil {
2420		objectMap["sourceResourceId"] = aispi.SourceResourceID
2421	}
2422	if aispi.PolicyID != nil {
2423		objectMap["policyId"] = aispi.PolicyID
2424	}
2425	if aispi.LastRecoveryPoint != nil {
2426		objectMap["lastRecoveryPoint"] = aispi.LastRecoveryPoint
2427	}
2428	if aispi.BackupSetName != nil {
2429		objectMap["backupSetName"] = aispi.BackupSetName
2430	}
2431	if aispi.CreateMode != "" {
2432		objectMap["createMode"] = aispi.CreateMode
2433	}
2434	if aispi.DeferredDeleteTimeInUTC != nil {
2435		objectMap["deferredDeleteTimeInUTC"] = aispi.DeferredDeleteTimeInUTC
2436	}
2437	if aispi.IsScheduledForDeferredDelete != nil {
2438		objectMap["isScheduledForDeferredDelete"] = aispi.IsScheduledForDeferredDelete
2439	}
2440	if aispi.DeferredDeleteTimeRemaining != nil {
2441		objectMap["deferredDeleteTimeRemaining"] = aispi.DeferredDeleteTimeRemaining
2442	}
2443	if aispi.IsDeferredDeleteScheduleUpcoming != nil {
2444		objectMap["isDeferredDeleteScheduleUpcoming"] = aispi.IsDeferredDeleteScheduleUpcoming
2445	}
2446	if aispi.IsRehydrate != nil {
2447		objectMap["isRehydrate"] = aispi.IsRehydrate
2448	}
2449	if aispi.ProtectedItemType != "" {
2450		objectMap["protectedItemType"] = aispi.ProtectedItemType
2451	}
2452	return json.Marshal(objectMap)
2453}
2454
2455// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2456func (aispi AzureIaaSVMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
2457	return nil, false
2458}
2459
2460// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2461func (aispi AzureIaaSVMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
2462	return nil, false
2463}
2464
2465// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2466func (aispi AzureIaaSVMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
2467	return nil, false
2468}
2469
2470// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2471func (aispi AzureIaaSVMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
2472	return &aispi, true
2473}
2474
2475// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2476func (aispi AzureIaaSVMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
2477	return &aispi, true
2478}
2479
2480// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2481func (aispi AzureIaaSVMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
2482	return nil, false
2483}
2484
2485// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2486func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
2487	return nil, false
2488}
2489
2490// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2491func (aispi AzureIaaSVMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
2492	return nil, false
2493}
2494
2495// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2496func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
2497	return nil, false
2498}
2499
2500// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2501func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
2502	return nil, false
2503}
2504
2505// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2506func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
2507	return nil, false
2508}
2509
2510// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2511func (aispi AzureIaaSVMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
2512	return nil, false
2513}
2514
2515// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2516func (aispi AzureIaaSVMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
2517	return nil, false
2518}
2519
2520// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2521func (aispi AzureIaaSVMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
2522	return nil, false
2523}
2524
2525// AsProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2526func (aispi AzureIaaSVMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
2527	return nil, false
2528}
2529
2530// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
2531func (aispi AzureIaaSVMProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
2532	return &aispi, true
2533}
2534
2535// AzureIaaSVMProtectedItemExtendedInfo additional information on Azure IaaS VM specific backup item.
2536type AzureIaaSVMProtectedItemExtendedInfo struct {
2537	// OldestRecoveryPoint - The oldest backup copy available for this backup item.
2538	OldestRecoveryPoint *date.Time `json:"oldestRecoveryPoint,omitempty"`
2539	// RecoveryPointCount - Number of backup copies available for this backup item.
2540	RecoveryPointCount *int32 `json:"recoveryPointCount,omitempty"`
2541	// PolicyInconsistent - Specifies if backup policy associated with the backup item is inconsistent.
2542	PolicyInconsistent *bool `json:"policyInconsistent,omitempty"`
2543}
2544
2545// AzureIaaSVMProtectionPolicy iaaS VM workload-specific backup policy.
2546type AzureIaaSVMProtectionPolicy struct {
2547	InstantRPDetails *InstantRPAdditionalDetails `json:"instantRPDetails,omitempty"`
2548	// SchedulePolicy - Backup schedule specified as part of backup policy.
2549	SchedulePolicy BasicSchedulePolicy `json:"schedulePolicy,omitempty"`
2550	// RetentionPolicy - Retention policy with the details on backup copy retention ranges.
2551	RetentionPolicy BasicRetentionPolicy `json:"retentionPolicy,omitempty"`
2552	// InstantRpRetentionRangeInDays - Instant RP retention policy range in days
2553	InstantRpRetentionRangeInDays *int32 `json:"instantRpRetentionRangeInDays,omitempty"`
2554	// TimeZone - TimeZone optional input as string. For example: TimeZone = "Pacific Standard Time".
2555	TimeZone *string `json:"timeZone,omitempty"`
2556	// ProtectedItemsCount - Number of items associated with this policy.
2557	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
2558	// BackupManagementType - Possible values include: 'BackupManagementTypeProtectionPolicy', 'BackupManagementTypeAzureWorkload', 'BackupManagementTypeAzureStorage', 'BackupManagementTypeAzureIaasVM', 'BackupManagementTypeAzureSQL', 'BackupManagementTypeGenericProtectionPolicy', 'BackupManagementTypeMAB'
2559	BackupManagementType ManagementTypeBasicProtectionPolicy `json:"backupManagementType,omitempty"`
2560}
2561
2562// MarshalJSON is the custom marshaler for AzureIaaSVMProtectionPolicy.
2563func (aispp AzureIaaSVMProtectionPolicy) MarshalJSON() ([]byte, error) {
2564	aispp.BackupManagementType = BackupManagementTypeAzureIaasVM
2565	objectMap := make(map[string]interface{})
2566	if aispp.InstantRPDetails != nil {
2567		objectMap["instantRPDetails"] = aispp.InstantRPDetails
2568	}
2569	objectMap["schedulePolicy"] = aispp.SchedulePolicy
2570	objectMap["retentionPolicy"] = aispp.RetentionPolicy
2571	if aispp.InstantRpRetentionRangeInDays != nil {
2572		objectMap["instantRpRetentionRangeInDays"] = aispp.InstantRpRetentionRangeInDays
2573	}
2574	if aispp.TimeZone != nil {
2575		objectMap["timeZone"] = aispp.TimeZone
2576	}
2577	if aispp.ProtectedItemsCount != nil {
2578		objectMap["protectedItemsCount"] = aispp.ProtectedItemsCount
2579	}
2580	if aispp.BackupManagementType != "" {
2581		objectMap["backupManagementType"] = aispp.BackupManagementType
2582	}
2583	return json.Marshal(objectMap)
2584}
2585
2586// AsAzureVMWorkloadProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2587func (aispp AzureIaaSVMProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
2588	return nil, false
2589}
2590
2591// AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2592func (aispp AzureIaaSVMProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
2593	return nil, false
2594}
2595
2596// AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2597func (aispp AzureIaaSVMProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
2598	return &aispp, true
2599}
2600
2601// AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2602func (aispp AzureIaaSVMProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
2603	return nil, false
2604}
2605
2606// AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2607func (aispp AzureIaaSVMProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
2608	return nil, false
2609}
2610
2611// AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2612func (aispp AzureIaaSVMProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
2613	return nil, false
2614}
2615
2616// AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2617func (aispp AzureIaaSVMProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
2618	return nil, false
2619}
2620
2621// AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
2622func (aispp AzureIaaSVMProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
2623	return &aispp, true
2624}
2625
2626// UnmarshalJSON is the custom unmarshaler for AzureIaaSVMProtectionPolicy struct.
2627func (aispp *AzureIaaSVMProtectionPolicy) UnmarshalJSON(body []byte) error {
2628	var m map[string]*json.RawMessage
2629	err := json.Unmarshal(body, &m)
2630	if err != nil {
2631		return err
2632	}
2633	for k, v := range m {
2634		switch k {
2635		case "instantRPDetails":
2636			if v != nil {
2637				var instantRPDetails InstantRPAdditionalDetails
2638				err = json.Unmarshal(*v, &instantRPDetails)
2639				if err != nil {
2640					return err
2641				}
2642				aispp.InstantRPDetails = &instantRPDetails
2643			}
2644		case "schedulePolicy":
2645			if v != nil {
2646				schedulePolicy, err := unmarshalBasicSchedulePolicy(*v)
2647				if err != nil {
2648					return err
2649				}
2650				aispp.SchedulePolicy = schedulePolicy
2651			}
2652		case "retentionPolicy":
2653			if v != nil {
2654				retentionPolicy, err := unmarshalBasicRetentionPolicy(*v)
2655				if err != nil {
2656					return err
2657				}
2658				aispp.RetentionPolicy = retentionPolicy
2659			}
2660		case "instantRpRetentionRangeInDays":
2661			if v != nil {
2662				var instantRpRetentionRangeInDays int32
2663				err = json.Unmarshal(*v, &instantRpRetentionRangeInDays)
2664				if err != nil {
2665					return err
2666				}
2667				aispp.InstantRpRetentionRangeInDays = &instantRpRetentionRangeInDays
2668			}
2669		case "timeZone":
2670			if v != nil {
2671				var timeZone string
2672				err = json.Unmarshal(*v, &timeZone)
2673				if err != nil {
2674					return err
2675				}
2676				aispp.TimeZone = &timeZone
2677			}
2678		case "protectedItemsCount":
2679			if v != nil {
2680				var protectedItemsCount int32
2681				err = json.Unmarshal(*v, &protectedItemsCount)
2682				if err != nil {
2683					return err
2684				}
2685				aispp.ProtectedItemsCount = &protectedItemsCount
2686			}
2687		case "backupManagementType":
2688			if v != nil {
2689				var backupManagementType ManagementTypeBasicProtectionPolicy
2690				err = json.Unmarshal(*v, &backupManagementType)
2691				if err != nil {
2692					return err
2693				}
2694				aispp.BackupManagementType = backupManagementType
2695			}
2696		}
2697	}
2698
2699	return nil
2700}
2701
2702// BasicAzureRecoveryServiceVaultProtectionIntent azure Recovery Services Vault specific protection intent item.
2703type BasicAzureRecoveryServiceVaultProtectionIntent interface {
2704	AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool)
2705	AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool)
2706	AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool)
2707	AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool)
2708}
2709
2710// AzureRecoveryServiceVaultProtectionIntent azure Recovery Services Vault specific protection intent item.
2711type AzureRecoveryServiceVaultProtectionIntent struct {
2712	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
2713	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
2714	// SourceResourceID - ARM ID of the resource to be backed up.
2715	SourceResourceID *string `json:"sourceResourceId,omitempty"`
2716	// ItemID - ID of the item which is getting protected, In case of Azure Vm , it is ProtectedItemId
2717	ItemID *string `json:"itemId,omitempty"`
2718	// PolicyID - ID of the backup policy with which this item is backed up.
2719	PolicyID *string `json:"policyId,omitempty"`
2720	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
2721	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
2722	// ProtectionIntentItemType - Possible values include: 'ProtectionIntentItemTypeProtectionIntent', 'ProtectionIntentItemTypeRecoveryServiceVaultItem', 'ProtectionIntentItemTypeAzureResourceItem', 'ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent', 'ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent'
2723	ProtectionIntentItemType ProtectionIntentItemType `json:"protectionIntentItemType,omitempty"`
2724}
2725
2726func unmarshalBasicAzureRecoveryServiceVaultProtectionIntent(body []byte) (BasicAzureRecoveryServiceVaultProtectionIntent, error) {
2727	var m map[string]interface{}
2728	err := json.Unmarshal(body, &m)
2729	if err != nil {
2730		return nil, err
2731	}
2732
2733	switch m["protectionIntentItemType"] {
2734	case string(ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent):
2735		var awapi AzureWorkloadAutoProtectionIntent
2736		err := json.Unmarshal(body, &awapi)
2737		return awapi, err
2738	case string(ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent):
2739		var awsapi AzureWorkloadSQLAutoProtectionIntent
2740		err := json.Unmarshal(body, &awsapi)
2741		return awsapi, err
2742	default:
2743		var arsvpi AzureRecoveryServiceVaultProtectionIntent
2744		err := json.Unmarshal(body, &arsvpi)
2745		return arsvpi, err
2746	}
2747}
2748func unmarshalBasicAzureRecoveryServiceVaultProtectionIntentArray(body []byte) ([]BasicAzureRecoveryServiceVaultProtectionIntent, error) {
2749	var rawMessages []*json.RawMessage
2750	err := json.Unmarshal(body, &rawMessages)
2751	if err != nil {
2752		return nil, err
2753	}
2754
2755	arsvpiArray := make([]BasicAzureRecoveryServiceVaultProtectionIntent, len(rawMessages))
2756
2757	for index, rawMessage := range rawMessages {
2758		arsvpi, err := unmarshalBasicAzureRecoveryServiceVaultProtectionIntent(*rawMessage)
2759		if err != nil {
2760			return nil, err
2761		}
2762		arsvpiArray[index] = arsvpi
2763	}
2764	return arsvpiArray, nil
2765}
2766
2767// MarshalJSON is the custom marshaler for AzureRecoveryServiceVaultProtectionIntent.
2768func (arsvpi AzureRecoveryServiceVaultProtectionIntent) MarshalJSON() ([]byte, error) {
2769	arsvpi.ProtectionIntentItemType = ProtectionIntentItemTypeRecoveryServiceVaultItem
2770	objectMap := make(map[string]interface{})
2771	if arsvpi.BackupManagementType != "" {
2772		objectMap["backupManagementType"] = arsvpi.BackupManagementType
2773	}
2774	if arsvpi.SourceResourceID != nil {
2775		objectMap["sourceResourceId"] = arsvpi.SourceResourceID
2776	}
2777	if arsvpi.ItemID != nil {
2778		objectMap["itemId"] = arsvpi.ItemID
2779	}
2780	if arsvpi.PolicyID != nil {
2781		objectMap["policyId"] = arsvpi.PolicyID
2782	}
2783	if arsvpi.ProtectionState != "" {
2784		objectMap["protectionState"] = arsvpi.ProtectionState
2785	}
2786	if arsvpi.ProtectionIntentItemType != "" {
2787		objectMap["protectionIntentItemType"] = arsvpi.ProtectionIntentItemType
2788	}
2789	return json.Marshal(objectMap)
2790}
2791
2792// AsAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2793func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
2794	return &arsvpi, true
2795}
2796
2797// AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2798func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
2799	return &arsvpi, true
2800}
2801
2802// AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2803func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
2804	return nil, false
2805}
2806
2807// AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2808func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
2809	return nil, false
2810}
2811
2812// AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2813func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
2814	return nil, false
2815}
2816
2817// AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2818func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
2819	return nil, false
2820}
2821
2822// AsProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2823func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
2824	return nil, false
2825}
2826
2827// AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
2828func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
2829	return &arsvpi, true
2830}
2831
2832// AzureResourceProtectionIntent iaaS VM specific backup protection intent item.
2833type AzureResourceProtectionIntent struct {
2834	// FriendlyName - Friendly name of the VM represented by this backup item.
2835	FriendlyName *string `json:"friendlyName,omitempty"`
2836	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
2837	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
2838	// SourceResourceID - ARM ID of the resource to be backed up.
2839	SourceResourceID *string `json:"sourceResourceId,omitempty"`
2840	// ItemID - ID of the item which is getting protected, In case of Azure Vm , it is ProtectedItemId
2841	ItemID *string `json:"itemId,omitempty"`
2842	// PolicyID - ID of the backup policy with which this item is backed up.
2843	PolicyID *string `json:"policyId,omitempty"`
2844	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
2845	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
2846	// ProtectionIntentItemType - Possible values include: 'ProtectionIntentItemTypeProtectionIntent', 'ProtectionIntentItemTypeRecoveryServiceVaultItem', 'ProtectionIntentItemTypeAzureResourceItem', 'ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent', 'ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent'
2847	ProtectionIntentItemType ProtectionIntentItemType `json:"protectionIntentItemType,omitempty"`
2848}
2849
2850// MarshalJSON is the custom marshaler for AzureResourceProtectionIntent.
2851func (arpi AzureResourceProtectionIntent) MarshalJSON() ([]byte, error) {
2852	arpi.ProtectionIntentItemType = ProtectionIntentItemTypeAzureResourceItem
2853	objectMap := make(map[string]interface{})
2854	if arpi.FriendlyName != nil {
2855		objectMap["friendlyName"] = arpi.FriendlyName
2856	}
2857	if arpi.BackupManagementType != "" {
2858		objectMap["backupManagementType"] = arpi.BackupManagementType
2859	}
2860	if arpi.SourceResourceID != nil {
2861		objectMap["sourceResourceId"] = arpi.SourceResourceID
2862	}
2863	if arpi.ItemID != nil {
2864		objectMap["itemId"] = arpi.ItemID
2865	}
2866	if arpi.PolicyID != nil {
2867		objectMap["policyId"] = arpi.PolicyID
2868	}
2869	if arpi.ProtectionState != "" {
2870		objectMap["protectionState"] = arpi.ProtectionState
2871	}
2872	if arpi.ProtectionIntentItemType != "" {
2873		objectMap["protectionIntentItemType"] = arpi.ProtectionIntentItemType
2874	}
2875	return json.Marshal(objectMap)
2876}
2877
2878// AsAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2879func (arpi AzureResourceProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
2880	return nil, false
2881}
2882
2883// AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2884func (arpi AzureResourceProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
2885	return nil, false
2886}
2887
2888// AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2889func (arpi AzureResourceProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
2890	return &arpi, true
2891}
2892
2893// AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2894func (arpi AzureResourceProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
2895	return nil, false
2896}
2897
2898// AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2899func (arpi AzureResourceProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
2900	return nil, false
2901}
2902
2903// AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2904func (arpi AzureResourceProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
2905	return nil, false
2906}
2907
2908// AsProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2909func (arpi AzureResourceProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
2910	return nil, false
2911}
2912
2913// AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
2914func (arpi AzureResourceProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
2915	return &arpi, true
2916}
2917
2918// AzureSQLAGWorkloadContainerProtectionContainer container for SQL workloads under SQL Availability Group.
2919type AzureSQLAGWorkloadContainerProtectionContainer struct {
2920	// SourceResourceID - ARM ID of the virtual machine represented by this Azure Workload Container
2921	SourceResourceID *string `json:"sourceResourceId,omitempty"`
2922	// LastUpdatedTime - Time stamp when this container was updated.
2923	LastUpdatedTime *date.Time `json:"lastUpdatedTime,omitempty"`
2924	// ExtendedInfo - Additional details of a workload container.
2925	ExtendedInfo *AzureWorkloadContainerExtendedInfo `json:"extendedInfo,omitempty"`
2926	// WorkloadType - Workload type for which registration was sent. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
2927	WorkloadType WorkloadType `json:"workloadType,omitempty"`
2928	// OperationType - Re-Do Operation. Possible values include: 'OperationTypeInvalid', 'OperationTypeRegister', 'OperationTypeReregister'
2929	OperationType OperationType `json:"operationType,omitempty"`
2930	// FriendlyName - Friendly name of the container.
2931	FriendlyName *string `json:"friendlyName,omitempty"`
2932	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
2933	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
2934	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
2935	RegistrationStatus *string `json:"registrationStatus,omitempty"`
2936	// HealthStatus - Status of health of the container.
2937	HealthStatus *string `json:"healthStatus,omitempty"`
2938	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
2939	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
2940}
2941
2942// MarshalJSON is the custom marshaler for AzureSQLAGWorkloadContainerProtectionContainer.
2943func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) MarshalJSON() ([]byte, error) {
2944	aswcpc.ContainerType = ContainerTypeSQLAGWorkLoadContainer1
2945	objectMap := make(map[string]interface{})
2946	if aswcpc.SourceResourceID != nil {
2947		objectMap["sourceResourceId"] = aswcpc.SourceResourceID
2948	}
2949	if aswcpc.LastUpdatedTime != nil {
2950		objectMap["lastUpdatedTime"] = aswcpc.LastUpdatedTime
2951	}
2952	if aswcpc.ExtendedInfo != nil {
2953		objectMap["extendedInfo"] = aswcpc.ExtendedInfo
2954	}
2955	if aswcpc.WorkloadType != "" {
2956		objectMap["workloadType"] = aswcpc.WorkloadType
2957	}
2958	if aswcpc.OperationType != "" {
2959		objectMap["operationType"] = aswcpc.OperationType
2960	}
2961	if aswcpc.FriendlyName != nil {
2962		objectMap["friendlyName"] = aswcpc.FriendlyName
2963	}
2964	if aswcpc.BackupManagementType != "" {
2965		objectMap["backupManagementType"] = aswcpc.BackupManagementType
2966	}
2967	if aswcpc.RegistrationStatus != nil {
2968		objectMap["registrationStatus"] = aswcpc.RegistrationStatus
2969	}
2970	if aswcpc.HealthStatus != nil {
2971		objectMap["healthStatus"] = aswcpc.HealthStatus
2972	}
2973	if aswcpc.ContainerType != "" {
2974		objectMap["containerType"] = aswcpc.ContainerType
2975	}
2976	return json.Marshal(objectMap)
2977}
2978
2979// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
2980func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
2981	return nil, false
2982}
2983
2984// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
2985func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
2986	return nil, false
2987}
2988
2989// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
2990func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
2991	return nil, false
2992}
2993
2994// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
2995func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
2996	return &aswcpc, true
2997}
2998
2999// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3000func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
3001	return nil, false
3002}
3003
3004// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3005func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
3006	return nil, false
3007}
3008
3009// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3010func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
3011	return nil, false
3012}
3013
3014// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3015func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
3016	return nil, false
3017}
3018
3019// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3020func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
3021	return &aswcpc, true
3022}
3023
3024// AsDpmContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3025func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsDpmContainer() (*DpmContainer, bool) {
3026	return nil, false
3027}
3028
3029// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3030func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
3031	return nil, false
3032}
3033
3034// AsGenericContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3035func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsGenericContainer() (*GenericContainer, bool) {
3036	return nil, false
3037}
3038
3039// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3040func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
3041	return nil, false
3042}
3043
3044// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3045func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
3046	return nil, false
3047}
3048
3049// AsMabContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3050func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsMabContainer() (*MabContainer, bool) {
3051	return nil, false
3052}
3053
3054// AsProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3055func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
3056	return nil, false
3057}
3058
3059// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
3060func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
3061	return &aswcpc, true
3062}
3063
3064// AzureSQLContainer azure Sql workload-specific container.
3065type AzureSQLContainer struct {
3066	// FriendlyName - Friendly name of the container.
3067	FriendlyName *string `json:"friendlyName,omitempty"`
3068	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
3069	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
3070	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
3071	RegistrationStatus *string `json:"registrationStatus,omitempty"`
3072	// HealthStatus - Status of health of the container.
3073	HealthStatus *string `json:"healthStatus,omitempty"`
3074	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
3075	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
3076}
3077
3078// MarshalJSON is the custom marshaler for AzureSQLContainer.
3079func (asc AzureSQLContainer) MarshalJSON() ([]byte, error) {
3080	asc.ContainerType = ContainerTypeAzureSQLContainer1
3081	objectMap := make(map[string]interface{})
3082	if asc.FriendlyName != nil {
3083		objectMap["friendlyName"] = asc.FriendlyName
3084	}
3085	if asc.BackupManagementType != "" {
3086		objectMap["backupManagementType"] = asc.BackupManagementType
3087	}
3088	if asc.RegistrationStatus != nil {
3089		objectMap["registrationStatus"] = asc.RegistrationStatus
3090	}
3091	if asc.HealthStatus != nil {
3092		objectMap["healthStatus"] = asc.HealthStatus
3093	}
3094	if asc.ContainerType != "" {
3095		objectMap["containerType"] = asc.ContainerType
3096	}
3097	return json.Marshal(objectMap)
3098}
3099
3100// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3101func (asc AzureSQLContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
3102	return nil, false
3103}
3104
3105// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3106func (asc AzureSQLContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
3107	return nil, false
3108}
3109
3110// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3111func (asc AzureSQLContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
3112	return nil, false
3113}
3114
3115// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3116func (asc AzureSQLContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
3117	return nil, false
3118}
3119
3120// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3121func (asc AzureSQLContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
3122	return &asc, true
3123}
3124
3125// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3126func (asc AzureSQLContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
3127	return nil, false
3128}
3129
3130// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3131func (asc AzureSQLContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
3132	return nil, false
3133}
3134
3135// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3136func (asc AzureSQLContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
3137	return nil, false
3138}
3139
3140// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3141func (asc AzureSQLContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
3142	return nil, false
3143}
3144
3145// AsDpmContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3146func (asc AzureSQLContainer) AsDpmContainer() (*DpmContainer, bool) {
3147	return nil, false
3148}
3149
3150// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3151func (asc AzureSQLContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
3152	return nil, false
3153}
3154
3155// AsGenericContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3156func (asc AzureSQLContainer) AsGenericContainer() (*GenericContainer, bool) {
3157	return nil, false
3158}
3159
3160// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3161func (asc AzureSQLContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
3162	return nil, false
3163}
3164
3165// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3166func (asc AzureSQLContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
3167	return nil, false
3168}
3169
3170// AsMabContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3171func (asc AzureSQLContainer) AsMabContainer() (*MabContainer, bool) {
3172	return nil, false
3173}
3174
3175// AsProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3176func (asc AzureSQLContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
3177	return nil, false
3178}
3179
3180// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
3181func (asc AzureSQLContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
3182	return &asc, true
3183}
3184
3185// AzureSQLProtectedItem azure SQL workload-specific backup item.
3186type AzureSQLProtectedItem struct {
3187	// ProtectedItemDataID - Internal ID of a backup item. Used by Azure SQL Backup engine to contact Recovery Services.
3188	ProtectedItemDataID *string `json:"protectedItemDataId,omitempty"`
3189	// ProtectionState - Backup state of the backed up item. Possible values include: 'ProtectedItemStateInvalid', 'ProtectedItemStateIRPending', 'ProtectedItemStateProtected', 'ProtectedItemStateProtectionError', 'ProtectedItemStateProtectionStopped', 'ProtectedItemStateProtectionPaused'
3190	ProtectionState ProtectedItemState `json:"protectionState,omitempty"`
3191	// ExtendedInfo - Additional information for this backup item.
3192	ExtendedInfo *AzureSQLProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
3193	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
3194	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
3195	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
3196	WorkloadType DataSourceType `json:"workloadType,omitempty"`
3197	// ContainerName - Unique name of container
3198	ContainerName *string `json:"containerName,omitempty"`
3199	// SourceResourceID - ARM ID of the resource to be backed up.
3200	SourceResourceID *string `json:"sourceResourceId,omitempty"`
3201	// PolicyID - ID of the backup policy with which this item is backed up.
3202	PolicyID *string `json:"policyId,omitempty"`
3203	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
3204	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
3205	// BackupSetName - Name of the backup set the backup item belongs to
3206	BackupSetName *string `json:"backupSetName,omitempty"`
3207	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
3208	CreateMode CreateMode `json:"createMode,omitempty"`
3209	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
3210	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
3211	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
3212	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
3213	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
3214	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
3215	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
3216	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
3217	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
3218	IsRehydrate *bool `json:"isRehydrate,omitempty"`
3219	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
3220	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
3221}
3222
3223// MarshalJSON is the custom marshaler for AzureSQLProtectedItem.
3224func (aspi AzureSQLProtectedItem) MarshalJSON() ([]byte, error) {
3225	aspi.ProtectedItemType = ProtectedItemTypeMicrosoftSqlserversdatabases
3226	objectMap := make(map[string]interface{})
3227	if aspi.ProtectedItemDataID != nil {
3228		objectMap["protectedItemDataId"] = aspi.ProtectedItemDataID
3229	}
3230	if aspi.ProtectionState != "" {
3231		objectMap["protectionState"] = aspi.ProtectionState
3232	}
3233	if aspi.ExtendedInfo != nil {
3234		objectMap["extendedInfo"] = aspi.ExtendedInfo
3235	}
3236	if aspi.BackupManagementType != "" {
3237		objectMap["backupManagementType"] = aspi.BackupManagementType
3238	}
3239	if aspi.WorkloadType != "" {
3240		objectMap["workloadType"] = aspi.WorkloadType
3241	}
3242	if aspi.ContainerName != nil {
3243		objectMap["containerName"] = aspi.ContainerName
3244	}
3245	if aspi.SourceResourceID != nil {
3246		objectMap["sourceResourceId"] = aspi.SourceResourceID
3247	}
3248	if aspi.PolicyID != nil {
3249		objectMap["policyId"] = aspi.PolicyID
3250	}
3251	if aspi.LastRecoveryPoint != nil {
3252		objectMap["lastRecoveryPoint"] = aspi.LastRecoveryPoint
3253	}
3254	if aspi.BackupSetName != nil {
3255		objectMap["backupSetName"] = aspi.BackupSetName
3256	}
3257	if aspi.CreateMode != "" {
3258		objectMap["createMode"] = aspi.CreateMode
3259	}
3260	if aspi.DeferredDeleteTimeInUTC != nil {
3261		objectMap["deferredDeleteTimeInUTC"] = aspi.DeferredDeleteTimeInUTC
3262	}
3263	if aspi.IsScheduledForDeferredDelete != nil {
3264		objectMap["isScheduledForDeferredDelete"] = aspi.IsScheduledForDeferredDelete
3265	}
3266	if aspi.DeferredDeleteTimeRemaining != nil {
3267		objectMap["deferredDeleteTimeRemaining"] = aspi.DeferredDeleteTimeRemaining
3268	}
3269	if aspi.IsDeferredDeleteScheduleUpcoming != nil {
3270		objectMap["isDeferredDeleteScheduleUpcoming"] = aspi.IsDeferredDeleteScheduleUpcoming
3271	}
3272	if aspi.IsRehydrate != nil {
3273		objectMap["isRehydrate"] = aspi.IsRehydrate
3274	}
3275	if aspi.ProtectedItemType != "" {
3276		objectMap["protectedItemType"] = aspi.ProtectedItemType
3277	}
3278	return json.Marshal(objectMap)
3279}
3280
3281// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3282func (aspi AzureSQLProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
3283	return nil, false
3284}
3285
3286// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3287func (aspi AzureSQLProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
3288	return nil, false
3289}
3290
3291// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3292func (aspi AzureSQLProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
3293	return nil, false
3294}
3295
3296// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3297func (aspi AzureSQLProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
3298	return nil, false
3299}
3300
3301// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3302func (aspi AzureSQLProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
3303	return nil, false
3304}
3305
3306// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3307func (aspi AzureSQLProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
3308	return &aspi, true
3309}
3310
3311// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3312func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
3313	return nil, false
3314}
3315
3316// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3317func (aspi AzureSQLProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
3318	return nil, false
3319}
3320
3321// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3322func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
3323	return nil, false
3324}
3325
3326// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3327func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
3328	return nil, false
3329}
3330
3331// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3332func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
3333	return nil, false
3334}
3335
3336// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3337func (aspi AzureSQLProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
3338	return nil, false
3339}
3340
3341// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3342func (aspi AzureSQLProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
3343	return nil, false
3344}
3345
3346// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3347func (aspi AzureSQLProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
3348	return nil, false
3349}
3350
3351// AsProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3352func (aspi AzureSQLProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
3353	return nil, false
3354}
3355
3356// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
3357func (aspi AzureSQLProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
3358	return &aspi, true
3359}
3360
3361// AzureSQLProtectedItemExtendedInfo additional information on Azure Sql specific protected item.
3362type AzureSQLProtectedItemExtendedInfo struct {
3363	// OldestRecoveryPoint - The oldest backup copy available for this item in the service.
3364	OldestRecoveryPoint *date.Time `json:"oldestRecoveryPoint,omitempty"`
3365	// RecoveryPointCount - Number of available backup copies associated with this backup item.
3366	RecoveryPointCount *int32 `json:"recoveryPointCount,omitempty"`
3367	// PolicyState - State of the backup policy associated with this backup item.
3368	PolicyState *string `json:"policyState,omitempty"`
3369}
3370
3371// AzureSQLProtectionPolicy azure SQL workload-specific backup policy.
3372type AzureSQLProtectionPolicy struct {
3373	// RetentionPolicy - Retention policy details.
3374	RetentionPolicy BasicRetentionPolicy `json:"retentionPolicy,omitempty"`
3375	// ProtectedItemsCount - Number of items associated with this policy.
3376	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
3377	// BackupManagementType - Possible values include: 'BackupManagementTypeProtectionPolicy', 'BackupManagementTypeAzureWorkload', 'BackupManagementTypeAzureStorage', 'BackupManagementTypeAzureIaasVM', 'BackupManagementTypeAzureSQL', 'BackupManagementTypeGenericProtectionPolicy', 'BackupManagementTypeMAB'
3378	BackupManagementType ManagementTypeBasicProtectionPolicy `json:"backupManagementType,omitempty"`
3379}
3380
3381// MarshalJSON is the custom marshaler for AzureSQLProtectionPolicy.
3382func (aspp AzureSQLProtectionPolicy) MarshalJSON() ([]byte, error) {
3383	aspp.BackupManagementType = BackupManagementTypeAzureSQL
3384	objectMap := make(map[string]interface{})
3385	objectMap["retentionPolicy"] = aspp.RetentionPolicy
3386	if aspp.ProtectedItemsCount != nil {
3387		objectMap["protectedItemsCount"] = aspp.ProtectedItemsCount
3388	}
3389	if aspp.BackupManagementType != "" {
3390		objectMap["backupManagementType"] = aspp.BackupManagementType
3391	}
3392	return json.Marshal(objectMap)
3393}
3394
3395// AsAzureVMWorkloadProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3396func (aspp AzureSQLProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
3397	return nil, false
3398}
3399
3400// AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3401func (aspp AzureSQLProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
3402	return nil, false
3403}
3404
3405// AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3406func (aspp AzureSQLProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
3407	return nil, false
3408}
3409
3410// AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3411func (aspp AzureSQLProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
3412	return &aspp, true
3413}
3414
3415// AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3416func (aspp AzureSQLProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
3417	return nil, false
3418}
3419
3420// AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3421func (aspp AzureSQLProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
3422	return nil, false
3423}
3424
3425// AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3426func (aspp AzureSQLProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
3427	return nil, false
3428}
3429
3430// AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
3431func (aspp AzureSQLProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
3432	return &aspp, true
3433}
3434
3435// UnmarshalJSON is the custom unmarshaler for AzureSQLProtectionPolicy struct.
3436func (aspp *AzureSQLProtectionPolicy) UnmarshalJSON(body []byte) error {
3437	var m map[string]*json.RawMessage
3438	err := json.Unmarshal(body, &m)
3439	if err != nil {
3440		return err
3441	}
3442	for k, v := range m {
3443		switch k {
3444		case "retentionPolicy":
3445			if v != nil {
3446				retentionPolicy, err := unmarshalBasicRetentionPolicy(*v)
3447				if err != nil {
3448					return err
3449				}
3450				aspp.RetentionPolicy = retentionPolicy
3451			}
3452		case "protectedItemsCount":
3453			if v != nil {
3454				var protectedItemsCount int32
3455				err = json.Unmarshal(*v, &protectedItemsCount)
3456				if err != nil {
3457					return err
3458				}
3459				aspp.ProtectedItemsCount = &protectedItemsCount
3460			}
3461		case "backupManagementType":
3462			if v != nil {
3463				var backupManagementType ManagementTypeBasicProtectionPolicy
3464				err = json.Unmarshal(*v, &backupManagementType)
3465				if err != nil {
3466					return err
3467				}
3468				aspp.BackupManagementType = backupManagementType
3469			}
3470		}
3471	}
3472
3473	return nil
3474}
3475
3476// AzureStorageContainer azure Storage Account workload-specific container.
3477type AzureStorageContainer struct {
3478	// SourceResourceID - Fully qualified ARM url.
3479	SourceResourceID *string `json:"sourceResourceId,omitempty"`
3480	// StorageAccountVersion - Storage account version.
3481	StorageAccountVersion *string `json:"storageAccountVersion,omitempty"`
3482	// ResourceGroup - Resource group name of Recovery Services Vault.
3483	ResourceGroup *string `json:"resourceGroup,omitempty"`
3484	// ProtectedItemCount - Number of items backed up in this container.
3485	ProtectedItemCount *int64 `json:"protectedItemCount,omitempty"`
3486	// FriendlyName - Friendly name of the container.
3487	FriendlyName *string `json:"friendlyName,omitempty"`
3488	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
3489	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
3490	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
3491	RegistrationStatus *string `json:"registrationStatus,omitempty"`
3492	// HealthStatus - Status of health of the container.
3493	HealthStatus *string `json:"healthStatus,omitempty"`
3494	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
3495	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
3496}
3497
3498// MarshalJSON is the custom marshaler for AzureStorageContainer.
3499func (asc AzureStorageContainer) MarshalJSON() ([]byte, error) {
3500	asc.ContainerType = ContainerTypeStorageContainer1
3501	objectMap := make(map[string]interface{})
3502	if asc.SourceResourceID != nil {
3503		objectMap["sourceResourceId"] = asc.SourceResourceID
3504	}
3505	if asc.StorageAccountVersion != nil {
3506		objectMap["storageAccountVersion"] = asc.StorageAccountVersion
3507	}
3508	if asc.ResourceGroup != nil {
3509		objectMap["resourceGroup"] = asc.ResourceGroup
3510	}
3511	if asc.ProtectedItemCount != nil {
3512		objectMap["protectedItemCount"] = asc.ProtectedItemCount
3513	}
3514	if asc.FriendlyName != nil {
3515		objectMap["friendlyName"] = asc.FriendlyName
3516	}
3517	if asc.BackupManagementType != "" {
3518		objectMap["backupManagementType"] = asc.BackupManagementType
3519	}
3520	if asc.RegistrationStatus != nil {
3521		objectMap["registrationStatus"] = asc.RegistrationStatus
3522	}
3523	if asc.HealthStatus != nil {
3524		objectMap["healthStatus"] = asc.HealthStatus
3525	}
3526	if asc.ContainerType != "" {
3527		objectMap["containerType"] = asc.ContainerType
3528	}
3529	return json.Marshal(objectMap)
3530}
3531
3532// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3533func (asc AzureStorageContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
3534	return nil, false
3535}
3536
3537// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3538func (asc AzureStorageContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
3539	return nil, false
3540}
3541
3542// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3543func (asc AzureStorageContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
3544	return nil, false
3545}
3546
3547// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3548func (asc AzureStorageContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
3549	return nil, false
3550}
3551
3552// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3553func (asc AzureStorageContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
3554	return nil, false
3555}
3556
3557// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3558func (asc AzureStorageContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
3559	return &asc, true
3560}
3561
3562// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3563func (asc AzureStorageContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
3564	return nil, false
3565}
3566
3567// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3568func (asc AzureStorageContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
3569	return nil, false
3570}
3571
3572// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3573func (asc AzureStorageContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
3574	return nil, false
3575}
3576
3577// AsDpmContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3578func (asc AzureStorageContainer) AsDpmContainer() (*DpmContainer, bool) {
3579	return nil, false
3580}
3581
3582// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3583func (asc AzureStorageContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
3584	return nil, false
3585}
3586
3587// AsGenericContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3588func (asc AzureStorageContainer) AsGenericContainer() (*GenericContainer, bool) {
3589	return nil, false
3590}
3591
3592// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3593func (asc AzureStorageContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
3594	return nil, false
3595}
3596
3597// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3598func (asc AzureStorageContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
3599	return nil, false
3600}
3601
3602// AsMabContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3603func (asc AzureStorageContainer) AsMabContainer() (*MabContainer, bool) {
3604	return nil, false
3605}
3606
3607// AsProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3608func (asc AzureStorageContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
3609	return nil, false
3610}
3611
3612// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
3613func (asc AzureStorageContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
3614	return &asc, true
3615}
3616
3617// AzureStorageErrorInfo azure storage specific error information
3618type AzureStorageErrorInfo struct {
3619	// ErrorCode - Error code.
3620	ErrorCode *int32 `json:"errorCode,omitempty"`
3621	// ErrorString - Localized error string.
3622	ErrorString *string `json:"errorString,omitempty"`
3623	// Recommendations - List of localized recommendations for above error code.
3624	Recommendations *[]string `json:"recommendations,omitempty"`
3625}
3626
3627// AzureStorageJob azure storage specific job.
3628type AzureStorageJob struct {
3629	// Duration - Time elapsed during the execution of this job.
3630	Duration *string `json:"duration,omitempty"`
3631	// ActionsInfo - Gets or sets the state/actions applicable on this job like cancel/retry.
3632	ActionsInfo *[]JobSupportedAction `json:"actionsInfo,omitempty"`
3633	// ErrorDetails - Error details on execution of this job.
3634	ErrorDetails *[]AzureStorageErrorInfo `json:"errorDetails,omitempty"`
3635	// StorageAccountName - Specifies friendly name of the storage account.
3636	StorageAccountName *string `json:"storageAccountName,omitempty"`
3637	// StorageAccountVersion - Specifies whether the Storage account is a Classic or an Azure Resource Manager Storage account.
3638	StorageAccountVersion *string `json:"storageAccountVersion,omitempty"`
3639	// ExtendedInfo - Additional information about the job.
3640	ExtendedInfo *AzureStorageJobExtendedInfo `json:"extendedInfo,omitempty"`
3641	// EntityFriendlyName - Friendly name of the entity on which the current job is executing.
3642	EntityFriendlyName *string `json:"entityFriendlyName,omitempty"`
3643	// BackupManagementType - Backup management type to execute the current job. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
3644	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
3645	// Operation - The operation name.
3646	Operation *string `json:"operation,omitempty"`
3647	// Status - Job status.
3648	Status *string `json:"status,omitempty"`
3649	// StartTime - The start time.
3650	StartTime *date.Time `json:"startTime,omitempty"`
3651	// EndTime - The end time.
3652	EndTime *date.Time `json:"endTime,omitempty"`
3653	// ActivityID - ActivityId of job.
3654	ActivityID *string `json:"activityId,omitempty"`
3655	// JobType - Possible values include: 'JobTypeJob', 'JobTypeAzureIaaSVMJob', 'JobTypeAzureStorageJob', 'JobTypeAzureWorkloadJob', 'JobTypeDpmJob', 'JobTypeMabJob'
3656	JobType JobType `json:"jobType,omitempty"`
3657}
3658
3659// MarshalJSON is the custom marshaler for AzureStorageJob.
3660func (asj AzureStorageJob) MarshalJSON() ([]byte, error) {
3661	asj.JobType = JobTypeAzureStorageJob
3662	objectMap := make(map[string]interface{})
3663	if asj.Duration != nil {
3664		objectMap["duration"] = asj.Duration
3665	}
3666	if asj.ActionsInfo != nil {
3667		objectMap["actionsInfo"] = asj.ActionsInfo
3668	}
3669	if asj.ErrorDetails != nil {
3670		objectMap["errorDetails"] = asj.ErrorDetails
3671	}
3672	if asj.StorageAccountName != nil {
3673		objectMap["storageAccountName"] = asj.StorageAccountName
3674	}
3675	if asj.StorageAccountVersion != nil {
3676		objectMap["storageAccountVersion"] = asj.StorageAccountVersion
3677	}
3678	if asj.ExtendedInfo != nil {
3679		objectMap["extendedInfo"] = asj.ExtendedInfo
3680	}
3681	if asj.EntityFriendlyName != nil {
3682		objectMap["entityFriendlyName"] = asj.EntityFriendlyName
3683	}
3684	if asj.BackupManagementType != "" {
3685		objectMap["backupManagementType"] = asj.BackupManagementType
3686	}
3687	if asj.Operation != nil {
3688		objectMap["operation"] = asj.Operation
3689	}
3690	if asj.Status != nil {
3691		objectMap["status"] = asj.Status
3692	}
3693	if asj.StartTime != nil {
3694		objectMap["startTime"] = asj.StartTime
3695	}
3696	if asj.EndTime != nil {
3697		objectMap["endTime"] = asj.EndTime
3698	}
3699	if asj.ActivityID != nil {
3700		objectMap["activityId"] = asj.ActivityID
3701	}
3702	if asj.JobType != "" {
3703		objectMap["jobType"] = asj.JobType
3704	}
3705	return json.Marshal(objectMap)
3706}
3707
3708// AsAzureIaaSVMJob is the BasicJob implementation for AzureStorageJob.
3709func (asj AzureStorageJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
3710	return nil, false
3711}
3712
3713// AsAzureStorageJob is the BasicJob implementation for AzureStorageJob.
3714func (asj AzureStorageJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
3715	return &asj, true
3716}
3717
3718// AsAzureWorkloadJob is the BasicJob implementation for AzureStorageJob.
3719func (asj AzureStorageJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
3720	return nil, false
3721}
3722
3723// AsDpmJob is the BasicJob implementation for AzureStorageJob.
3724func (asj AzureStorageJob) AsDpmJob() (*DpmJob, bool) {
3725	return nil, false
3726}
3727
3728// AsMabJob is the BasicJob implementation for AzureStorageJob.
3729func (asj AzureStorageJob) AsMabJob() (*MabJob, bool) {
3730	return nil, false
3731}
3732
3733// AsJob is the BasicJob implementation for AzureStorageJob.
3734func (asj AzureStorageJob) AsJob() (*Job, bool) {
3735	return nil, false
3736}
3737
3738// AsBasicJob is the BasicJob implementation for AzureStorageJob.
3739func (asj AzureStorageJob) AsBasicJob() (BasicJob, bool) {
3740	return &asj, true
3741}
3742
3743// AzureStorageJobExtendedInfo azure Storage workload-specific additional information for job.
3744type AzureStorageJobExtendedInfo struct {
3745	// TasksList - List of tasks for this job
3746	TasksList *[]AzureStorageJobTaskDetails `json:"tasksList,omitempty"`
3747	// PropertyBag - Job properties.
3748	PropertyBag map[string]*string `json:"propertyBag"`
3749	// DynamicErrorMessage - Non localized error message on job execution.
3750	DynamicErrorMessage *string `json:"dynamicErrorMessage,omitempty"`
3751}
3752
3753// MarshalJSON is the custom marshaler for AzureStorageJobExtendedInfo.
3754func (asjei AzureStorageJobExtendedInfo) MarshalJSON() ([]byte, error) {
3755	objectMap := make(map[string]interface{})
3756	if asjei.TasksList != nil {
3757		objectMap["tasksList"] = asjei.TasksList
3758	}
3759	if asjei.PropertyBag != nil {
3760		objectMap["propertyBag"] = asjei.PropertyBag
3761	}
3762	if asjei.DynamicErrorMessage != nil {
3763		objectMap["dynamicErrorMessage"] = asjei.DynamicErrorMessage
3764	}
3765	return json.Marshal(objectMap)
3766}
3767
3768// AzureStorageJobTaskDetails azure storage workload specific job task details.
3769type AzureStorageJobTaskDetails struct {
3770	// TaskID - The task display name.
3771	TaskID *string `json:"taskId,omitempty"`
3772	// Status - The status.
3773	Status *string `json:"status,omitempty"`
3774}
3775
3776// AzureStorageProtectableContainer azure Storage-specific protectable containers
3777type AzureStorageProtectableContainer struct {
3778	// FriendlyName - Friendly name of the container.
3779	FriendlyName *string `json:"friendlyName,omitempty"`
3780	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
3781	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
3782	// HealthStatus - Status of health of the container.
3783	HealthStatus *string `json:"healthStatus,omitempty"`
3784	// ContainerID - Fabric Id of the container such as ARM Id.
3785	ContainerID *string `json:"containerId,omitempty"`
3786	// ProtectableContainerType - Possible values include: 'ProtectableContainerTypeProtectableContainer', 'ProtectableContainerTypeStorageContainer', 'ProtectableContainerTypeVMAppContainer'
3787	ProtectableContainerType ProtectableContainerType `json:"protectableContainerType,omitempty"`
3788}
3789
3790// MarshalJSON is the custom marshaler for AzureStorageProtectableContainer.
3791func (aspc AzureStorageProtectableContainer) MarshalJSON() ([]byte, error) {
3792	aspc.ProtectableContainerType = ProtectableContainerTypeStorageContainer
3793	objectMap := make(map[string]interface{})
3794	if aspc.FriendlyName != nil {
3795		objectMap["friendlyName"] = aspc.FriendlyName
3796	}
3797	if aspc.BackupManagementType != "" {
3798		objectMap["backupManagementType"] = aspc.BackupManagementType
3799	}
3800	if aspc.HealthStatus != nil {
3801		objectMap["healthStatus"] = aspc.HealthStatus
3802	}
3803	if aspc.ContainerID != nil {
3804		objectMap["containerId"] = aspc.ContainerID
3805	}
3806	if aspc.ProtectableContainerType != "" {
3807		objectMap["protectableContainerType"] = aspc.ProtectableContainerType
3808	}
3809	return json.Marshal(objectMap)
3810}
3811
3812// AsAzureStorageProtectableContainer is the BasicProtectableContainer implementation for AzureStorageProtectableContainer.
3813func (aspc AzureStorageProtectableContainer) AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool) {
3814	return &aspc, true
3815}
3816
3817// AsAzureVMAppContainerProtectableContainer is the BasicProtectableContainer implementation for AzureStorageProtectableContainer.
3818func (aspc AzureStorageProtectableContainer) AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool) {
3819	return nil, false
3820}
3821
3822// AsProtectableContainer is the BasicProtectableContainer implementation for AzureStorageProtectableContainer.
3823func (aspc AzureStorageProtectableContainer) AsProtectableContainer() (*ProtectableContainer, bool) {
3824	return nil, false
3825}
3826
3827// AsBasicProtectableContainer is the BasicProtectableContainer implementation for AzureStorageProtectableContainer.
3828func (aspc AzureStorageProtectableContainer) AsBasicProtectableContainer() (BasicProtectableContainer, bool) {
3829	return &aspc, true
3830}
3831
3832// AzureVMAppContainerProtectableContainer azure workload-specific container
3833type AzureVMAppContainerProtectableContainer struct {
3834	// FriendlyName - Friendly name of the container.
3835	FriendlyName *string `json:"friendlyName,omitempty"`
3836	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
3837	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
3838	// HealthStatus - Status of health of the container.
3839	HealthStatus *string `json:"healthStatus,omitempty"`
3840	// ContainerID - Fabric Id of the container such as ARM Id.
3841	ContainerID *string `json:"containerId,omitempty"`
3842	// ProtectableContainerType - Possible values include: 'ProtectableContainerTypeProtectableContainer', 'ProtectableContainerTypeStorageContainer', 'ProtectableContainerTypeVMAppContainer'
3843	ProtectableContainerType ProtectableContainerType `json:"protectableContainerType,omitempty"`
3844}
3845
3846// MarshalJSON is the custom marshaler for AzureVMAppContainerProtectableContainer.
3847func (avacpc AzureVMAppContainerProtectableContainer) MarshalJSON() ([]byte, error) {
3848	avacpc.ProtectableContainerType = ProtectableContainerTypeVMAppContainer
3849	objectMap := make(map[string]interface{})
3850	if avacpc.FriendlyName != nil {
3851		objectMap["friendlyName"] = avacpc.FriendlyName
3852	}
3853	if avacpc.BackupManagementType != "" {
3854		objectMap["backupManagementType"] = avacpc.BackupManagementType
3855	}
3856	if avacpc.HealthStatus != nil {
3857		objectMap["healthStatus"] = avacpc.HealthStatus
3858	}
3859	if avacpc.ContainerID != nil {
3860		objectMap["containerId"] = avacpc.ContainerID
3861	}
3862	if avacpc.ProtectableContainerType != "" {
3863		objectMap["protectableContainerType"] = avacpc.ProtectableContainerType
3864	}
3865	return json.Marshal(objectMap)
3866}
3867
3868// AsAzureStorageProtectableContainer is the BasicProtectableContainer implementation for AzureVMAppContainerProtectableContainer.
3869func (avacpc AzureVMAppContainerProtectableContainer) AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool) {
3870	return nil, false
3871}
3872
3873// AsAzureVMAppContainerProtectableContainer is the BasicProtectableContainer implementation for AzureVMAppContainerProtectableContainer.
3874func (avacpc AzureVMAppContainerProtectableContainer) AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool) {
3875	return &avacpc, true
3876}
3877
3878// AsProtectableContainer is the BasicProtectableContainer implementation for AzureVMAppContainerProtectableContainer.
3879func (avacpc AzureVMAppContainerProtectableContainer) AsProtectableContainer() (*ProtectableContainer, bool) {
3880	return nil, false
3881}
3882
3883// AsBasicProtectableContainer is the BasicProtectableContainer implementation for AzureVMAppContainerProtectableContainer.
3884func (avacpc AzureVMAppContainerProtectableContainer) AsBasicProtectableContainer() (BasicProtectableContainer, bool) {
3885	return &avacpc, true
3886}
3887
3888// AzureVMAppContainerProtectionContainer container for SQL workloads under Azure Virtual Machines.
3889type AzureVMAppContainerProtectionContainer struct {
3890	// SourceResourceID - ARM ID of the virtual machine represented by this Azure Workload Container
3891	SourceResourceID *string `json:"sourceResourceId,omitempty"`
3892	// LastUpdatedTime - Time stamp when this container was updated.
3893	LastUpdatedTime *date.Time `json:"lastUpdatedTime,omitempty"`
3894	// ExtendedInfo - Additional details of a workload container.
3895	ExtendedInfo *AzureWorkloadContainerExtendedInfo `json:"extendedInfo,omitempty"`
3896	// WorkloadType - Workload type for which registration was sent. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
3897	WorkloadType WorkloadType `json:"workloadType,omitempty"`
3898	// OperationType - Re-Do Operation. Possible values include: 'OperationTypeInvalid', 'OperationTypeRegister', 'OperationTypeReregister'
3899	OperationType OperationType `json:"operationType,omitempty"`
3900	// FriendlyName - Friendly name of the container.
3901	FriendlyName *string `json:"friendlyName,omitempty"`
3902	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
3903	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
3904	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
3905	RegistrationStatus *string `json:"registrationStatus,omitempty"`
3906	// HealthStatus - Status of health of the container.
3907	HealthStatus *string `json:"healthStatus,omitempty"`
3908	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
3909	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
3910}
3911
3912// MarshalJSON is the custom marshaler for AzureVMAppContainerProtectionContainer.
3913func (avacpc AzureVMAppContainerProtectionContainer) MarshalJSON() ([]byte, error) {
3914	avacpc.ContainerType = ContainerTypeVMAppContainer1
3915	objectMap := make(map[string]interface{})
3916	if avacpc.SourceResourceID != nil {
3917		objectMap["sourceResourceId"] = avacpc.SourceResourceID
3918	}
3919	if avacpc.LastUpdatedTime != nil {
3920		objectMap["lastUpdatedTime"] = avacpc.LastUpdatedTime
3921	}
3922	if avacpc.ExtendedInfo != nil {
3923		objectMap["extendedInfo"] = avacpc.ExtendedInfo
3924	}
3925	if avacpc.WorkloadType != "" {
3926		objectMap["workloadType"] = avacpc.WorkloadType
3927	}
3928	if avacpc.OperationType != "" {
3929		objectMap["operationType"] = avacpc.OperationType
3930	}
3931	if avacpc.FriendlyName != nil {
3932		objectMap["friendlyName"] = avacpc.FriendlyName
3933	}
3934	if avacpc.BackupManagementType != "" {
3935		objectMap["backupManagementType"] = avacpc.BackupManagementType
3936	}
3937	if avacpc.RegistrationStatus != nil {
3938		objectMap["registrationStatus"] = avacpc.RegistrationStatus
3939	}
3940	if avacpc.HealthStatus != nil {
3941		objectMap["healthStatus"] = avacpc.HealthStatus
3942	}
3943	if avacpc.ContainerType != "" {
3944		objectMap["containerType"] = avacpc.ContainerType
3945	}
3946	return json.Marshal(objectMap)
3947}
3948
3949// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3950func (avacpc AzureVMAppContainerProtectionContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
3951	return nil, false
3952}
3953
3954// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3955func (avacpc AzureVMAppContainerProtectionContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
3956	return nil, false
3957}
3958
3959// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3960func (avacpc AzureVMAppContainerProtectionContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
3961	return nil, false
3962}
3963
3964// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3965func (avacpc AzureVMAppContainerProtectionContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
3966	return nil, false
3967}
3968
3969// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3970func (avacpc AzureVMAppContainerProtectionContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
3971	return nil, false
3972}
3973
3974// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3975func (avacpc AzureVMAppContainerProtectionContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
3976	return nil, false
3977}
3978
3979// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3980func (avacpc AzureVMAppContainerProtectionContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
3981	return &avacpc, true
3982}
3983
3984// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3985func (avacpc AzureVMAppContainerProtectionContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
3986	return nil, false
3987}
3988
3989// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3990func (avacpc AzureVMAppContainerProtectionContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
3991	return &avacpc, true
3992}
3993
3994// AsDpmContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
3995func (avacpc AzureVMAppContainerProtectionContainer) AsDpmContainer() (*DpmContainer, bool) {
3996	return nil, false
3997}
3998
3999// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
4000func (avacpc AzureVMAppContainerProtectionContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
4001	return nil, false
4002}
4003
4004// AsGenericContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
4005func (avacpc AzureVMAppContainerProtectionContainer) AsGenericContainer() (*GenericContainer, bool) {
4006	return nil, false
4007}
4008
4009// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
4010func (avacpc AzureVMAppContainerProtectionContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
4011	return nil, false
4012}
4013
4014// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
4015func (avacpc AzureVMAppContainerProtectionContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
4016	return nil, false
4017}
4018
4019// AsMabContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
4020func (avacpc AzureVMAppContainerProtectionContainer) AsMabContainer() (*MabContainer, bool) {
4021	return nil, false
4022}
4023
4024// AsProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
4025func (avacpc AzureVMAppContainerProtectionContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
4026	return nil, false
4027}
4028
4029// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
4030func (avacpc AzureVMAppContainerProtectionContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
4031	return &avacpc, true
4032}
4033
4034// AzureVMResourceFeatureSupportRequest azureResource(IaaS VM) Specific feature support request
4035type AzureVMResourceFeatureSupportRequest struct {
4036	// VMSize - Size of the resource: VM size(A/D series etc) in case of IaasVM
4037	VMSize *string `json:"vmSize,omitempty"`
4038	// VMSku - SKUs (Premium/Managed etc) in case of IaasVM
4039	VMSku *string `json:"vmSku,omitempty"`
4040	// FeatureType - Possible values include: 'FeatureTypeFeatureSupportRequest', 'FeatureTypeAzureBackupGoals', 'FeatureTypeAzureVMResourceBackup'
4041	FeatureType FeatureType `json:"featureType,omitempty"`
4042}
4043
4044// MarshalJSON is the custom marshaler for AzureVMResourceFeatureSupportRequest.
4045func (avrfsr AzureVMResourceFeatureSupportRequest) MarshalJSON() ([]byte, error) {
4046	avrfsr.FeatureType = FeatureTypeAzureVMResourceBackup
4047	objectMap := make(map[string]interface{})
4048	if avrfsr.VMSize != nil {
4049		objectMap["vmSize"] = avrfsr.VMSize
4050	}
4051	if avrfsr.VMSku != nil {
4052		objectMap["vmSku"] = avrfsr.VMSku
4053	}
4054	if avrfsr.FeatureType != "" {
4055		objectMap["featureType"] = avrfsr.FeatureType
4056	}
4057	return json.Marshal(objectMap)
4058}
4059
4060// AsAzureBackupGoalFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureVMResourceFeatureSupportRequest.
4061func (avrfsr AzureVMResourceFeatureSupportRequest) AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool) {
4062	return nil, false
4063}
4064
4065// AsAzureVMResourceFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureVMResourceFeatureSupportRequest.
4066func (avrfsr AzureVMResourceFeatureSupportRequest) AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool) {
4067	return &avrfsr, true
4068}
4069
4070// AsFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureVMResourceFeatureSupportRequest.
4071func (avrfsr AzureVMResourceFeatureSupportRequest) AsFeatureSupportRequest() (*FeatureSupportRequest, bool) {
4072	return nil, false
4073}
4074
4075// AsBasicFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureVMResourceFeatureSupportRequest.
4076func (avrfsr AzureVMResourceFeatureSupportRequest) AsBasicFeatureSupportRequest() (BasicFeatureSupportRequest, bool) {
4077	return &avrfsr, true
4078}
4079
4080// AzureVMResourceFeatureSupportResponse response for feature support requests for Azure IaasVm
4081type AzureVMResourceFeatureSupportResponse struct {
4082	autorest.Response `json:"-"`
4083	// SupportStatus - Support status of feature. Possible values include: 'SupportStatusInvalid', 'SupportStatusSupported', 'SupportStatusDefaultOFF', 'SupportStatusDefaultON', 'SupportStatusNotSupported'
4084	SupportStatus SupportStatus `json:"supportStatus,omitempty"`
4085}
4086
4087// BasicAzureVMWorkloadItem azure VM workload-specific workload item.
4088type BasicAzureVMWorkloadItem interface {
4089	AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool)
4090	AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool)
4091	AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool)
4092	AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool)
4093	AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool)
4094	AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool)
4095	AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool)
4096}
4097
4098// AzureVMWorkloadItem azure VM workload-specific workload item.
4099type AzureVMWorkloadItem struct {
4100	// ParentName - Name for instance or AG
4101	ParentName *string `json:"parentName,omitempty"`
4102	// ServerName - Host/Cluster Name for instance or AG
4103	ServerName *string `json:"serverName,omitempty"`
4104	// IsAutoProtectable - Indicates if workload item is auto-protectable
4105	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
4106	// Subinquireditemcount - For instance or AG, indicates number of DB's present
4107	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
4108	// SubWorkloadItemCount - For instance or AG, indicates number of DB's to be protected
4109	SubWorkloadItemCount *int32 `json:"subWorkloadItemCount,omitempty"`
4110	// BackupManagementType - Type of backup management to backup an item.
4111	BackupManagementType *string `json:"backupManagementType,omitempty"`
4112	// WorkloadType - Type of workload for the backup management
4113	WorkloadType *string `json:"workloadType,omitempty"`
4114	// FriendlyName - Friendly name of the backup item.
4115	FriendlyName *string `json:"friendlyName,omitempty"`
4116	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
4117	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
4118	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
4119	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
4120}
4121
4122func unmarshalBasicAzureVMWorkloadItem(body []byte) (BasicAzureVMWorkloadItem, error) {
4123	var m map[string]interface{}
4124	err := json.Unmarshal(body, &m)
4125	if err != nil {
4126		return nil, err
4127	}
4128
4129	switch m["workloadItemType"] {
4130	case string(WorkloadItemTypeSAPAseDatabase1):
4131		var avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem
4132		err := json.Unmarshal(body, &avwsadwi)
4133		return avwsadwi, err
4134	case string(WorkloadItemTypeSAPAseSystem1):
4135		var avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem
4136		err := json.Unmarshal(body, &avwsaswi)
4137		return avwsaswi, err
4138	case string(WorkloadItemTypeSAPHanaDatabase1):
4139		var avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem
4140		err := json.Unmarshal(body, &avwshdwi)
4141		return avwshdwi, err
4142	case string(WorkloadItemTypeSAPHanaSystem1):
4143		var avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem
4144		err := json.Unmarshal(body, &avwshswi)
4145		return avwshswi, err
4146	case string(WorkloadItemTypeSQLDataBase1):
4147		var avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem
4148		err := json.Unmarshal(body, &avwsdwi)
4149		return avwsdwi, err
4150	case string(WorkloadItemTypeSQLInstance1):
4151		var avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem
4152		err := json.Unmarshal(body, &avwsiwi)
4153		return avwsiwi, err
4154	default:
4155		var avwi AzureVMWorkloadItem
4156		err := json.Unmarshal(body, &avwi)
4157		return avwi, err
4158	}
4159}
4160func unmarshalBasicAzureVMWorkloadItemArray(body []byte) ([]BasicAzureVMWorkloadItem, error) {
4161	var rawMessages []*json.RawMessage
4162	err := json.Unmarshal(body, &rawMessages)
4163	if err != nil {
4164		return nil, err
4165	}
4166
4167	avwiArray := make([]BasicAzureVMWorkloadItem, len(rawMessages))
4168
4169	for index, rawMessage := range rawMessages {
4170		avwi, err := unmarshalBasicAzureVMWorkloadItem(*rawMessage)
4171		if err != nil {
4172			return nil, err
4173		}
4174		avwiArray[index] = avwi
4175	}
4176	return avwiArray, nil
4177}
4178
4179// MarshalJSON is the custom marshaler for AzureVMWorkloadItem.
4180func (avwi AzureVMWorkloadItem) MarshalJSON() ([]byte, error) {
4181	avwi.WorkloadItemType = WorkloadItemTypeAzureVMWorkloadItem
4182	objectMap := make(map[string]interface{})
4183	if avwi.ParentName != nil {
4184		objectMap["parentName"] = avwi.ParentName
4185	}
4186	if avwi.ServerName != nil {
4187		objectMap["serverName"] = avwi.ServerName
4188	}
4189	if avwi.IsAutoProtectable != nil {
4190		objectMap["isAutoProtectable"] = avwi.IsAutoProtectable
4191	}
4192	if avwi.Subinquireditemcount != nil {
4193		objectMap["subinquireditemcount"] = avwi.Subinquireditemcount
4194	}
4195	if avwi.SubWorkloadItemCount != nil {
4196		objectMap["subWorkloadItemCount"] = avwi.SubWorkloadItemCount
4197	}
4198	if avwi.BackupManagementType != nil {
4199		objectMap["backupManagementType"] = avwi.BackupManagementType
4200	}
4201	if avwi.WorkloadType != nil {
4202		objectMap["workloadType"] = avwi.WorkloadType
4203	}
4204	if avwi.FriendlyName != nil {
4205		objectMap["friendlyName"] = avwi.FriendlyName
4206	}
4207	if avwi.ProtectionState != "" {
4208		objectMap["protectionState"] = avwi.ProtectionState
4209	}
4210	if avwi.WorkloadItemType != "" {
4211		objectMap["workloadItemType"] = avwi.WorkloadItemType
4212	}
4213	return json.Marshal(objectMap)
4214}
4215
4216// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4217func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
4218	return &avwi, true
4219}
4220
4221// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4222func (avwi AzureVMWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
4223	return &avwi, true
4224}
4225
4226// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4227func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
4228	return nil, false
4229}
4230
4231// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4232func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
4233	return nil, false
4234}
4235
4236// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4237func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
4238	return nil, false
4239}
4240
4241// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4242func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
4243	return nil, false
4244}
4245
4246// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4247func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
4248	return nil, false
4249}
4250
4251// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4252func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
4253	return nil, false
4254}
4255
4256// AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4257func (avwi AzureVMWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
4258	return nil, false
4259}
4260
4261// AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
4262func (avwi AzureVMWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
4263	return &avwi, true
4264}
4265
4266// BasicAzureVMWorkloadProtectableItem azure VM workload-specific protectable item.
4267type BasicAzureVMWorkloadProtectableItem interface {
4268	AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool)
4269	AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool)
4270	AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool)
4271	AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool)
4272	AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool)
4273	AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool)
4274	AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool)
4275}
4276
4277// AzureVMWorkloadProtectableItem azure VM workload-specific protectable item.
4278type AzureVMWorkloadProtectableItem struct {
4279	// ParentName - Name for instance or AG
4280	ParentName *string `json:"parentName,omitempty"`
4281	// ParentUniqueName - Parent Unique Name is added to provide the service formatted URI Name of the Parent
4282	// Only Applicable for data bases where the parent would be either Instance or a SQL AG.
4283	ParentUniqueName *string `json:"parentUniqueName,omitempty"`
4284	// ServerName - Host/Cluster Name for instance or AG
4285	ServerName *string `json:"serverName,omitempty"`
4286	// IsAutoProtectable - Indicates if protectable item is auto-protectable
4287	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
4288	// IsAutoProtected - Indicates if protectable item is auto-protected
4289	IsAutoProtected *bool `json:"isAutoProtected,omitempty"`
4290	// Subinquireditemcount - For instance or AG, indicates number of DB's present
4291	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
4292	// Subprotectableitemcount - For instance or AG, indicates number of DB's to be protected
4293	Subprotectableitemcount *int32 `json:"subprotectableitemcount,omitempty"`
4294	// Prebackupvalidation - Pre-backup validation for protectable objects
4295	Prebackupvalidation *PreBackupValidation `json:"prebackupvalidation,omitempty"`
4296	// BackupManagementType - Type of backup management to backup an item.
4297	BackupManagementType *string `json:"backupManagementType,omitempty"`
4298	// WorkloadType - Type of workload for the backup management
4299	WorkloadType *string `json:"workloadType,omitempty"`
4300	// FriendlyName - Friendly name of the backup item.
4301	FriendlyName *string `json:"friendlyName,omitempty"`
4302	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
4303	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
4304	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
4305	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
4306}
4307
4308func unmarshalBasicAzureVMWorkloadProtectableItem(body []byte) (BasicAzureVMWorkloadProtectableItem, error) {
4309	var m map[string]interface{}
4310	err := json.Unmarshal(body, &m)
4311	if err != nil {
4312		return nil, err
4313	}
4314
4315	switch m["protectableItemType"] {
4316	case string(ProtectableItemTypeSAPAseSystem):
4317		var avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem
4318		err := json.Unmarshal(body, &avwsaspi)
4319		return avwsaspi, err
4320	case string(ProtectableItemTypeSAPHanaDatabase):
4321		var avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem
4322		err := json.Unmarshal(body, &avwshdpi)
4323		return avwshdpi, err
4324	case string(ProtectableItemTypeSAPHanaSystem):
4325		var avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem
4326		err := json.Unmarshal(body, &avwshspi)
4327		return avwshspi, err
4328	case string(ProtectableItemTypeSQLAvailabilityGroupContainer):
4329		var avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem
4330		err := json.Unmarshal(body, &avwsagpi)
4331		return avwsagpi, err
4332	case string(ProtectableItemTypeSQLDataBase):
4333		var avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem
4334		err := json.Unmarshal(body, &avwsdpi)
4335		return avwsdpi, err
4336	case string(ProtectableItemTypeSQLInstance):
4337		var avwsipi AzureVMWorkloadSQLInstanceProtectableItem
4338		err := json.Unmarshal(body, &avwsipi)
4339		return avwsipi, err
4340	default:
4341		var avwpi AzureVMWorkloadProtectableItem
4342		err := json.Unmarshal(body, &avwpi)
4343		return avwpi, err
4344	}
4345}
4346func unmarshalBasicAzureVMWorkloadProtectableItemArray(body []byte) ([]BasicAzureVMWorkloadProtectableItem, error) {
4347	var rawMessages []*json.RawMessage
4348	err := json.Unmarshal(body, &rawMessages)
4349	if err != nil {
4350		return nil, err
4351	}
4352
4353	avwpiArray := make([]BasicAzureVMWorkloadProtectableItem, len(rawMessages))
4354
4355	for index, rawMessage := range rawMessages {
4356		avwpi, err := unmarshalBasicAzureVMWorkloadProtectableItem(*rawMessage)
4357		if err != nil {
4358			return nil, err
4359		}
4360		avwpiArray[index] = avwpi
4361	}
4362	return avwpiArray, nil
4363}
4364
4365// MarshalJSON is the custom marshaler for AzureVMWorkloadProtectableItem.
4366func (avwpi AzureVMWorkloadProtectableItem) MarshalJSON() ([]byte, error) {
4367	avwpi.ProtectableItemType = ProtectableItemTypeAzureVMWorkloadProtectableItem
4368	objectMap := make(map[string]interface{})
4369	if avwpi.ParentName != nil {
4370		objectMap["parentName"] = avwpi.ParentName
4371	}
4372	if avwpi.ParentUniqueName != nil {
4373		objectMap["parentUniqueName"] = avwpi.ParentUniqueName
4374	}
4375	if avwpi.ServerName != nil {
4376		objectMap["serverName"] = avwpi.ServerName
4377	}
4378	if avwpi.IsAutoProtectable != nil {
4379		objectMap["isAutoProtectable"] = avwpi.IsAutoProtectable
4380	}
4381	if avwpi.IsAutoProtected != nil {
4382		objectMap["isAutoProtected"] = avwpi.IsAutoProtected
4383	}
4384	if avwpi.Subinquireditemcount != nil {
4385		objectMap["subinquireditemcount"] = avwpi.Subinquireditemcount
4386	}
4387	if avwpi.Subprotectableitemcount != nil {
4388		objectMap["subprotectableitemcount"] = avwpi.Subprotectableitemcount
4389	}
4390	if avwpi.Prebackupvalidation != nil {
4391		objectMap["prebackupvalidation"] = avwpi.Prebackupvalidation
4392	}
4393	if avwpi.BackupManagementType != nil {
4394		objectMap["backupManagementType"] = avwpi.BackupManagementType
4395	}
4396	if avwpi.WorkloadType != nil {
4397		objectMap["workloadType"] = avwpi.WorkloadType
4398	}
4399	if avwpi.FriendlyName != nil {
4400		objectMap["friendlyName"] = avwpi.FriendlyName
4401	}
4402	if avwpi.ProtectionState != "" {
4403		objectMap["protectionState"] = avwpi.ProtectionState
4404	}
4405	if avwpi.ProtectableItemType != "" {
4406		objectMap["protectableItemType"] = avwpi.ProtectableItemType
4407	}
4408	return json.Marshal(objectMap)
4409}
4410
4411// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4412func (avwpi AzureVMWorkloadProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
4413	return nil, false
4414}
4415
4416// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4417func (avwpi AzureVMWorkloadProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
4418	return nil, false
4419}
4420
4421// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4422func (avwpi AzureVMWorkloadProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
4423	return nil, false
4424}
4425
4426// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4427func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
4428	return &avwpi, true
4429}
4430
4431// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4432func (avwpi AzureVMWorkloadProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
4433	return &avwpi, true
4434}
4435
4436// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4437func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
4438	return nil, false
4439}
4440
4441// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4442func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
4443	return nil, false
4444}
4445
4446// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4447func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
4448	return nil, false
4449}
4450
4451// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4452func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
4453	return nil, false
4454}
4455
4456// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4457func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
4458	return nil, false
4459}
4460
4461// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4462func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
4463	return nil, false
4464}
4465
4466// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4467func (avwpi AzureVMWorkloadProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
4468	return nil, false
4469}
4470
4471// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4472func (avwpi AzureVMWorkloadProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
4473	return nil, false
4474}
4475
4476// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4477func (avwpi AzureVMWorkloadProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
4478	return nil, false
4479}
4480
4481// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
4482func (avwpi AzureVMWorkloadProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
4483	return &avwpi, true
4484}
4485
4486// BasicAzureVMWorkloadProtectedItem azure VM workload-specific protected item.
4487type BasicAzureVMWorkloadProtectedItem interface {
4488	AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool)
4489	AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool)
4490	AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool)
4491	AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool)
4492}
4493
4494// AzureVMWorkloadProtectedItem azure VM workload-specific protected item.
4495type AzureVMWorkloadProtectedItem struct {
4496	// FriendlyName - Friendly name of the DB represented by this backup item.
4497	FriendlyName *string `json:"friendlyName,omitempty"`
4498	// ServerName - Host/Cluster Name for instance or AG
4499	ServerName *string `json:"serverName,omitempty"`
4500	// ParentName - Parent name of the DB such as Instance or Availability Group.
4501	ParentName *string `json:"parentName,omitempty"`
4502	// ParentType - Parent type of protected item, example: for a DB, standalone server or distributed
4503	ParentType *string `json:"parentType,omitempty"`
4504	// ProtectionStatus - Backup status of this backup item.
4505	ProtectionStatus *string `json:"protectionStatus,omitempty"`
4506	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
4507	ProtectionState ProtectionState `json:"protectionState,omitempty"`
4508	// LastBackupStatus - Last backup operation status. Possible values: Healthy, Unhealthy. Possible values include: 'LastBackupStatusInvalid', 'LastBackupStatusHealthy', 'LastBackupStatusUnhealthy', 'LastBackupStatusIRPending'
4509	LastBackupStatus LastBackupStatus `json:"lastBackupStatus,omitempty"`
4510	// LastBackupTime - Timestamp of the last backup operation on this backup item.
4511	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
4512	// LastBackupErrorDetail - Error details in last backup
4513	LastBackupErrorDetail *ErrorDetail `json:"lastBackupErrorDetail,omitempty"`
4514	// ProtectedItemDataSourceID - Data ID of the protected item.
4515	ProtectedItemDataSourceID *string `json:"protectedItemDataSourceId,omitempty"`
4516	// ProtectedItemHealthStatus - Health status of the backup item, evaluated based on last heartbeat received. Possible values include: 'ProtectedItemHealthStatusInvalid', 'ProtectedItemHealthStatusHealthy', 'ProtectedItemHealthStatusUnhealthy', 'ProtectedItemHealthStatusNotReachable', 'ProtectedItemHealthStatusIRPending'
4517	ProtectedItemHealthStatus ProtectedItemHealthStatus `json:"protectedItemHealthStatus,omitempty"`
4518	// ExtendedInfo - Additional information for this backup item.
4519	ExtendedInfo *AzureVMWorkloadProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
4520	// KpisHealths - Health details of different KPIs
4521	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
4522	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
4523	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
4524	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
4525	WorkloadType DataSourceType `json:"workloadType,omitempty"`
4526	// ContainerName - Unique name of container
4527	ContainerName *string `json:"containerName,omitempty"`
4528	// SourceResourceID - ARM ID of the resource to be backed up.
4529	SourceResourceID *string `json:"sourceResourceId,omitempty"`
4530	// PolicyID - ID of the backup policy with which this item is backed up.
4531	PolicyID *string `json:"policyId,omitempty"`
4532	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
4533	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
4534	// BackupSetName - Name of the backup set the backup item belongs to
4535	BackupSetName *string `json:"backupSetName,omitempty"`
4536	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
4537	CreateMode CreateMode `json:"createMode,omitempty"`
4538	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
4539	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
4540	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
4541	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
4542	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
4543	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
4544	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
4545	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
4546	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
4547	IsRehydrate *bool `json:"isRehydrate,omitempty"`
4548	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
4549	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
4550}
4551
4552func unmarshalBasicAzureVMWorkloadProtectedItem(body []byte) (BasicAzureVMWorkloadProtectedItem, error) {
4553	var m map[string]interface{}
4554	err := json.Unmarshal(body, &m)
4555	if err != nil {
4556		return nil, err
4557	}
4558
4559	switch m["protectedItemType"] {
4560	case string(ProtectedItemTypeAzureVMWorkloadSAPAseDatabase):
4561		var avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem
4562		err := json.Unmarshal(body, &avwsadpi)
4563		return avwsadpi, err
4564	case string(ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase):
4565		var avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem
4566		err := json.Unmarshal(body, &avwshdpi)
4567		return avwshdpi, err
4568	case string(ProtectedItemTypeAzureVMWorkloadSQLDatabase):
4569		var avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem
4570		err := json.Unmarshal(body, &avwsdpi)
4571		return avwsdpi, err
4572	default:
4573		var avwpi AzureVMWorkloadProtectedItem
4574		err := json.Unmarshal(body, &avwpi)
4575		return avwpi, err
4576	}
4577}
4578func unmarshalBasicAzureVMWorkloadProtectedItemArray(body []byte) ([]BasicAzureVMWorkloadProtectedItem, error) {
4579	var rawMessages []*json.RawMessage
4580	err := json.Unmarshal(body, &rawMessages)
4581	if err != nil {
4582		return nil, err
4583	}
4584
4585	avwpiArray := make([]BasicAzureVMWorkloadProtectedItem, len(rawMessages))
4586
4587	for index, rawMessage := range rawMessages {
4588		avwpi, err := unmarshalBasicAzureVMWorkloadProtectedItem(*rawMessage)
4589		if err != nil {
4590			return nil, err
4591		}
4592		avwpiArray[index] = avwpi
4593	}
4594	return avwpiArray, nil
4595}
4596
4597// MarshalJSON is the custom marshaler for AzureVMWorkloadProtectedItem.
4598func (avwpi AzureVMWorkloadProtectedItem) MarshalJSON() ([]byte, error) {
4599	avwpi.ProtectedItemType = ProtectedItemTypeAzureVMWorkloadProtectedItem
4600	objectMap := make(map[string]interface{})
4601	if avwpi.FriendlyName != nil {
4602		objectMap["friendlyName"] = avwpi.FriendlyName
4603	}
4604	if avwpi.ServerName != nil {
4605		objectMap["serverName"] = avwpi.ServerName
4606	}
4607	if avwpi.ParentName != nil {
4608		objectMap["parentName"] = avwpi.ParentName
4609	}
4610	if avwpi.ParentType != nil {
4611		objectMap["parentType"] = avwpi.ParentType
4612	}
4613	if avwpi.ProtectionStatus != nil {
4614		objectMap["protectionStatus"] = avwpi.ProtectionStatus
4615	}
4616	if avwpi.ProtectionState != "" {
4617		objectMap["protectionState"] = avwpi.ProtectionState
4618	}
4619	if avwpi.LastBackupStatus != "" {
4620		objectMap["lastBackupStatus"] = avwpi.LastBackupStatus
4621	}
4622	if avwpi.LastBackupTime != nil {
4623		objectMap["lastBackupTime"] = avwpi.LastBackupTime
4624	}
4625	if avwpi.LastBackupErrorDetail != nil {
4626		objectMap["lastBackupErrorDetail"] = avwpi.LastBackupErrorDetail
4627	}
4628	if avwpi.ProtectedItemDataSourceID != nil {
4629		objectMap["protectedItemDataSourceId"] = avwpi.ProtectedItemDataSourceID
4630	}
4631	if avwpi.ProtectedItemHealthStatus != "" {
4632		objectMap["protectedItemHealthStatus"] = avwpi.ProtectedItemHealthStatus
4633	}
4634	if avwpi.ExtendedInfo != nil {
4635		objectMap["extendedInfo"] = avwpi.ExtendedInfo
4636	}
4637	if avwpi.KpisHealths != nil {
4638		objectMap["kpisHealths"] = avwpi.KpisHealths
4639	}
4640	if avwpi.BackupManagementType != "" {
4641		objectMap["backupManagementType"] = avwpi.BackupManagementType
4642	}
4643	if avwpi.WorkloadType != "" {
4644		objectMap["workloadType"] = avwpi.WorkloadType
4645	}
4646	if avwpi.ContainerName != nil {
4647		objectMap["containerName"] = avwpi.ContainerName
4648	}
4649	if avwpi.SourceResourceID != nil {
4650		objectMap["sourceResourceId"] = avwpi.SourceResourceID
4651	}
4652	if avwpi.PolicyID != nil {
4653		objectMap["policyId"] = avwpi.PolicyID
4654	}
4655	if avwpi.LastRecoveryPoint != nil {
4656		objectMap["lastRecoveryPoint"] = avwpi.LastRecoveryPoint
4657	}
4658	if avwpi.BackupSetName != nil {
4659		objectMap["backupSetName"] = avwpi.BackupSetName
4660	}
4661	if avwpi.CreateMode != "" {
4662		objectMap["createMode"] = avwpi.CreateMode
4663	}
4664	if avwpi.DeferredDeleteTimeInUTC != nil {
4665		objectMap["deferredDeleteTimeInUTC"] = avwpi.DeferredDeleteTimeInUTC
4666	}
4667	if avwpi.IsScheduledForDeferredDelete != nil {
4668		objectMap["isScheduledForDeferredDelete"] = avwpi.IsScheduledForDeferredDelete
4669	}
4670	if avwpi.DeferredDeleteTimeRemaining != nil {
4671		objectMap["deferredDeleteTimeRemaining"] = avwpi.DeferredDeleteTimeRemaining
4672	}
4673	if avwpi.IsDeferredDeleteScheduleUpcoming != nil {
4674		objectMap["isDeferredDeleteScheduleUpcoming"] = avwpi.IsDeferredDeleteScheduleUpcoming
4675	}
4676	if avwpi.IsRehydrate != nil {
4677		objectMap["isRehydrate"] = avwpi.IsRehydrate
4678	}
4679	if avwpi.ProtectedItemType != "" {
4680		objectMap["protectedItemType"] = avwpi.ProtectedItemType
4681	}
4682	return json.Marshal(objectMap)
4683}
4684
4685// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4686func (avwpi AzureVMWorkloadProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
4687	return nil, false
4688}
4689
4690// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4691func (avwpi AzureVMWorkloadProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
4692	return nil, false
4693}
4694
4695// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4696func (avwpi AzureVMWorkloadProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
4697	return nil, false
4698}
4699
4700// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4701func (avwpi AzureVMWorkloadProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
4702	return nil, false
4703}
4704
4705// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4706func (avwpi AzureVMWorkloadProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
4707	return nil, false
4708}
4709
4710// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4711func (avwpi AzureVMWorkloadProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
4712	return nil, false
4713}
4714
4715// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4716func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
4717	return &avwpi, true
4718}
4719
4720// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4721func (avwpi AzureVMWorkloadProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
4722	return &avwpi, true
4723}
4724
4725// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4726func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
4727	return nil, false
4728}
4729
4730// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4731func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
4732	return nil, false
4733}
4734
4735// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4736func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
4737	return nil, false
4738}
4739
4740// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4741func (avwpi AzureVMWorkloadProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
4742	return nil, false
4743}
4744
4745// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4746func (avwpi AzureVMWorkloadProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
4747	return nil, false
4748}
4749
4750// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4751func (avwpi AzureVMWorkloadProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
4752	return nil, false
4753}
4754
4755// AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4756func (avwpi AzureVMWorkloadProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
4757	return nil, false
4758}
4759
4760// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
4761func (avwpi AzureVMWorkloadProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
4762	return &avwpi, true
4763}
4764
4765// AzureVMWorkloadProtectedItemExtendedInfo additional information on Azure Workload for SQL specific
4766// backup item.
4767type AzureVMWorkloadProtectedItemExtendedInfo struct {
4768	// OldestRecoveryPoint - The oldest backup copy available for this backup item.
4769	OldestRecoveryPoint *date.Time `json:"oldestRecoveryPoint,omitempty"`
4770	// RecoveryPointCount - Number of backup copies available for this backup item.
4771	RecoveryPointCount *int32 `json:"recoveryPointCount,omitempty"`
4772	// PolicyState - Indicates consistency of policy object and policy applied to this backup item.
4773	PolicyState *string `json:"policyState,omitempty"`
4774}
4775
4776// AzureVMWorkloadProtectionPolicy azure VM (Mercury) workload-specific backup policy.
4777type AzureVMWorkloadProtectionPolicy struct {
4778	// WorkLoadType - Type of workload for the backup management. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
4779	WorkLoadType WorkloadType `json:"workLoadType,omitempty"`
4780	// Settings - Common settings for the backup management
4781	Settings *Settings `json:"settings,omitempty"`
4782	// SubProtectionPolicy - List of sub-protection policies which includes schedule and retention
4783	SubProtectionPolicy *[]SubProtectionPolicy `json:"subProtectionPolicy,omitempty"`
4784	// MakePolicyConsistent - Fix the policy inconsistency
4785	MakePolicyConsistent *bool `json:"makePolicyConsistent,omitempty"`
4786	// ProtectedItemsCount - Number of items associated with this policy.
4787	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
4788	// BackupManagementType - Possible values include: 'BackupManagementTypeProtectionPolicy', 'BackupManagementTypeAzureWorkload', 'BackupManagementTypeAzureStorage', 'BackupManagementTypeAzureIaasVM', 'BackupManagementTypeAzureSQL', 'BackupManagementTypeGenericProtectionPolicy', 'BackupManagementTypeMAB'
4789	BackupManagementType ManagementTypeBasicProtectionPolicy `json:"backupManagementType,omitempty"`
4790}
4791
4792// MarshalJSON is the custom marshaler for AzureVMWorkloadProtectionPolicy.
4793func (avwpp AzureVMWorkloadProtectionPolicy) MarshalJSON() ([]byte, error) {
4794	avwpp.BackupManagementType = BackupManagementTypeAzureWorkload
4795	objectMap := make(map[string]interface{})
4796	if avwpp.WorkLoadType != "" {
4797		objectMap["workLoadType"] = avwpp.WorkLoadType
4798	}
4799	if avwpp.Settings != nil {
4800		objectMap["settings"] = avwpp.Settings
4801	}
4802	if avwpp.SubProtectionPolicy != nil {
4803		objectMap["subProtectionPolicy"] = avwpp.SubProtectionPolicy
4804	}
4805	if avwpp.MakePolicyConsistent != nil {
4806		objectMap["makePolicyConsistent"] = avwpp.MakePolicyConsistent
4807	}
4808	if avwpp.ProtectedItemsCount != nil {
4809		objectMap["protectedItemsCount"] = avwpp.ProtectedItemsCount
4810	}
4811	if avwpp.BackupManagementType != "" {
4812		objectMap["backupManagementType"] = avwpp.BackupManagementType
4813	}
4814	return json.Marshal(objectMap)
4815}
4816
4817// AsAzureVMWorkloadProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4818func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
4819	return &avwpp, true
4820}
4821
4822// AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4823func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
4824	return nil, false
4825}
4826
4827// AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4828func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
4829	return nil, false
4830}
4831
4832// AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4833func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
4834	return nil, false
4835}
4836
4837// AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4838func (avwpp AzureVMWorkloadProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
4839	return nil, false
4840}
4841
4842// AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4843func (avwpp AzureVMWorkloadProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
4844	return nil, false
4845}
4846
4847// AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4848func (avwpp AzureVMWorkloadProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
4849	return nil, false
4850}
4851
4852// AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
4853func (avwpp AzureVMWorkloadProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
4854	return &avwpp, true
4855}
4856
4857// AzureVMWorkloadSAPAseDatabaseProtectedItem azure VM workload-specific protected item representing SAP
4858// ASE Database.
4859type AzureVMWorkloadSAPAseDatabaseProtectedItem struct {
4860	// FriendlyName - Friendly name of the DB represented by this backup item.
4861	FriendlyName *string `json:"friendlyName,omitempty"`
4862	// ServerName - Host/Cluster Name for instance or AG
4863	ServerName *string `json:"serverName,omitempty"`
4864	// ParentName - Parent name of the DB such as Instance or Availability Group.
4865	ParentName *string `json:"parentName,omitempty"`
4866	// ParentType - Parent type of protected item, example: for a DB, standalone server or distributed
4867	ParentType *string `json:"parentType,omitempty"`
4868	// ProtectionStatus - Backup status of this backup item.
4869	ProtectionStatus *string `json:"protectionStatus,omitempty"`
4870	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
4871	ProtectionState ProtectionState `json:"protectionState,omitempty"`
4872	// LastBackupStatus - Last backup operation status. Possible values: Healthy, Unhealthy. Possible values include: 'LastBackupStatusInvalid', 'LastBackupStatusHealthy', 'LastBackupStatusUnhealthy', 'LastBackupStatusIRPending'
4873	LastBackupStatus LastBackupStatus `json:"lastBackupStatus,omitempty"`
4874	// LastBackupTime - Timestamp of the last backup operation on this backup item.
4875	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
4876	// LastBackupErrorDetail - Error details in last backup
4877	LastBackupErrorDetail *ErrorDetail `json:"lastBackupErrorDetail,omitempty"`
4878	// ProtectedItemDataSourceID - Data ID of the protected item.
4879	ProtectedItemDataSourceID *string `json:"protectedItemDataSourceId,omitempty"`
4880	// ProtectedItemHealthStatus - Health status of the backup item, evaluated based on last heartbeat received. Possible values include: 'ProtectedItemHealthStatusInvalid', 'ProtectedItemHealthStatusHealthy', 'ProtectedItemHealthStatusUnhealthy', 'ProtectedItemHealthStatusNotReachable', 'ProtectedItemHealthStatusIRPending'
4881	ProtectedItemHealthStatus ProtectedItemHealthStatus `json:"protectedItemHealthStatus,omitempty"`
4882	// ExtendedInfo - Additional information for this backup item.
4883	ExtendedInfo *AzureVMWorkloadProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
4884	// KpisHealths - Health details of different KPIs
4885	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
4886	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
4887	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
4888	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
4889	WorkloadType DataSourceType `json:"workloadType,omitempty"`
4890	// ContainerName - Unique name of container
4891	ContainerName *string `json:"containerName,omitempty"`
4892	// SourceResourceID - ARM ID of the resource to be backed up.
4893	SourceResourceID *string `json:"sourceResourceId,omitempty"`
4894	// PolicyID - ID of the backup policy with which this item is backed up.
4895	PolicyID *string `json:"policyId,omitempty"`
4896	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
4897	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
4898	// BackupSetName - Name of the backup set the backup item belongs to
4899	BackupSetName *string `json:"backupSetName,omitempty"`
4900	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
4901	CreateMode CreateMode `json:"createMode,omitempty"`
4902	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
4903	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
4904	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
4905	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
4906	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
4907	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
4908	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
4909	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
4910	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
4911	IsRehydrate *bool `json:"isRehydrate,omitempty"`
4912	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
4913	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
4914}
4915
4916// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPAseDatabaseProtectedItem.
4917func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) MarshalJSON() ([]byte, error) {
4918	avwsadpi.ProtectedItemType = ProtectedItemTypeAzureVMWorkloadSAPAseDatabase
4919	objectMap := make(map[string]interface{})
4920	if avwsadpi.FriendlyName != nil {
4921		objectMap["friendlyName"] = avwsadpi.FriendlyName
4922	}
4923	if avwsadpi.ServerName != nil {
4924		objectMap["serverName"] = avwsadpi.ServerName
4925	}
4926	if avwsadpi.ParentName != nil {
4927		objectMap["parentName"] = avwsadpi.ParentName
4928	}
4929	if avwsadpi.ParentType != nil {
4930		objectMap["parentType"] = avwsadpi.ParentType
4931	}
4932	if avwsadpi.ProtectionStatus != nil {
4933		objectMap["protectionStatus"] = avwsadpi.ProtectionStatus
4934	}
4935	if avwsadpi.ProtectionState != "" {
4936		objectMap["protectionState"] = avwsadpi.ProtectionState
4937	}
4938	if avwsadpi.LastBackupStatus != "" {
4939		objectMap["lastBackupStatus"] = avwsadpi.LastBackupStatus
4940	}
4941	if avwsadpi.LastBackupTime != nil {
4942		objectMap["lastBackupTime"] = avwsadpi.LastBackupTime
4943	}
4944	if avwsadpi.LastBackupErrorDetail != nil {
4945		objectMap["lastBackupErrorDetail"] = avwsadpi.LastBackupErrorDetail
4946	}
4947	if avwsadpi.ProtectedItemDataSourceID != nil {
4948		objectMap["protectedItemDataSourceId"] = avwsadpi.ProtectedItemDataSourceID
4949	}
4950	if avwsadpi.ProtectedItemHealthStatus != "" {
4951		objectMap["protectedItemHealthStatus"] = avwsadpi.ProtectedItemHealthStatus
4952	}
4953	if avwsadpi.ExtendedInfo != nil {
4954		objectMap["extendedInfo"] = avwsadpi.ExtendedInfo
4955	}
4956	if avwsadpi.KpisHealths != nil {
4957		objectMap["kpisHealths"] = avwsadpi.KpisHealths
4958	}
4959	if avwsadpi.BackupManagementType != "" {
4960		objectMap["backupManagementType"] = avwsadpi.BackupManagementType
4961	}
4962	if avwsadpi.WorkloadType != "" {
4963		objectMap["workloadType"] = avwsadpi.WorkloadType
4964	}
4965	if avwsadpi.ContainerName != nil {
4966		objectMap["containerName"] = avwsadpi.ContainerName
4967	}
4968	if avwsadpi.SourceResourceID != nil {
4969		objectMap["sourceResourceId"] = avwsadpi.SourceResourceID
4970	}
4971	if avwsadpi.PolicyID != nil {
4972		objectMap["policyId"] = avwsadpi.PolicyID
4973	}
4974	if avwsadpi.LastRecoveryPoint != nil {
4975		objectMap["lastRecoveryPoint"] = avwsadpi.LastRecoveryPoint
4976	}
4977	if avwsadpi.BackupSetName != nil {
4978		objectMap["backupSetName"] = avwsadpi.BackupSetName
4979	}
4980	if avwsadpi.CreateMode != "" {
4981		objectMap["createMode"] = avwsadpi.CreateMode
4982	}
4983	if avwsadpi.DeferredDeleteTimeInUTC != nil {
4984		objectMap["deferredDeleteTimeInUTC"] = avwsadpi.DeferredDeleteTimeInUTC
4985	}
4986	if avwsadpi.IsScheduledForDeferredDelete != nil {
4987		objectMap["isScheduledForDeferredDelete"] = avwsadpi.IsScheduledForDeferredDelete
4988	}
4989	if avwsadpi.DeferredDeleteTimeRemaining != nil {
4990		objectMap["deferredDeleteTimeRemaining"] = avwsadpi.DeferredDeleteTimeRemaining
4991	}
4992	if avwsadpi.IsDeferredDeleteScheduleUpcoming != nil {
4993		objectMap["isDeferredDeleteScheduleUpcoming"] = avwsadpi.IsDeferredDeleteScheduleUpcoming
4994	}
4995	if avwsadpi.IsRehydrate != nil {
4996		objectMap["isRehydrate"] = avwsadpi.IsRehydrate
4997	}
4998	if avwsadpi.ProtectedItemType != "" {
4999		objectMap["protectedItemType"] = avwsadpi.ProtectedItemType
5000	}
5001	return json.Marshal(objectMap)
5002}
5003
5004// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5005func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
5006	return nil, false
5007}
5008
5009// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5010func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
5011	return nil, false
5012}
5013
5014// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5015func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
5016	return nil, false
5017}
5018
5019// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5020func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
5021	return nil, false
5022}
5023
5024// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5025func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
5026	return nil, false
5027}
5028
5029// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5030func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
5031	return nil, false
5032}
5033
5034// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5035func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
5036	return nil, false
5037}
5038
5039// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5040func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
5041	return &avwsadpi, true
5042}
5043
5044// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5045func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
5046	return &avwsadpi, true
5047}
5048
5049// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5050func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
5051	return nil, false
5052}
5053
5054// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5055func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
5056	return nil, false
5057}
5058
5059// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5060func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
5061	return nil, false
5062}
5063
5064// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5065func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
5066	return nil, false
5067}
5068
5069// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5070func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
5071	return nil, false
5072}
5073
5074// AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5075func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
5076	return nil, false
5077}
5078
5079// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
5080func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
5081	return &avwsadpi, true
5082}
5083
5084// AzureVMWorkloadSAPAseDatabaseWorkloadItem azure VM workload-specific workload item representing SAP ASE
5085// Database.
5086type AzureVMWorkloadSAPAseDatabaseWorkloadItem struct {
5087	// ParentName - Name for instance or AG
5088	ParentName *string `json:"parentName,omitempty"`
5089	// ServerName - Host/Cluster Name for instance or AG
5090	ServerName *string `json:"serverName,omitempty"`
5091	// IsAutoProtectable - Indicates if workload item is auto-protectable
5092	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
5093	// Subinquireditemcount - For instance or AG, indicates number of DB's present
5094	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
5095	// SubWorkloadItemCount - For instance or AG, indicates number of DB's to be protected
5096	SubWorkloadItemCount *int32 `json:"subWorkloadItemCount,omitempty"`
5097	// BackupManagementType - Type of backup management to backup an item.
5098	BackupManagementType *string `json:"backupManagementType,omitempty"`
5099	// WorkloadType - Type of workload for the backup management
5100	WorkloadType *string `json:"workloadType,omitempty"`
5101	// FriendlyName - Friendly name of the backup item.
5102	FriendlyName *string `json:"friendlyName,omitempty"`
5103	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
5104	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
5105	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
5106	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
5107}
5108
5109// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5110func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) MarshalJSON() ([]byte, error) {
5111	avwsadwi.WorkloadItemType = WorkloadItemTypeSAPAseDatabase1
5112	objectMap := make(map[string]interface{})
5113	if avwsadwi.ParentName != nil {
5114		objectMap["parentName"] = avwsadwi.ParentName
5115	}
5116	if avwsadwi.ServerName != nil {
5117		objectMap["serverName"] = avwsadwi.ServerName
5118	}
5119	if avwsadwi.IsAutoProtectable != nil {
5120		objectMap["isAutoProtectable"] = avwsadwi.IsAutoProtectable
5121	}
5122	if avwsadwi.Subinquireditemcount != nil {
5123		objectMap["subinquireditemcount"] = avwsadwi.Subinquireditemcount
5124	}
5125	if avwsadwi.SubWorkloadItemCount != nil {
5126		objectMap["subWorkloadItemCount"] = avwsadwi.SubWorkloadItemCount
5127	}
5128	if avwsadwi.BackupManagementType != nil {
5129		objectMap["backupManagementType"] = avwsadwi.BackupManagementType
5130	}
5131	if avwsadwi.WorkloadType != nil {
5132		objectMap["workloadType"] = avwsadwi.WorkloadType
5133	}
5134	if avwsadwi.FriendlyName != nil {
5135		objectMap["friendlyName"] = avwsadwi.FriendlyName
5136	}
5137	if avwsadwi.ProtectionState != "" {
5138		objectMap["protectionState"] = avwsadwi.ProtectionState
5139	}
5140	if avwsadwi.WorkloadItemType != "" {
5141		objectMap["workloadItemType"] = avwsadwi.WorkloadItemType
5142	}
5143	return json.Marshal(objectMap)
5144}
5145
5146// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5147func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
5148	return nil, false
5149}
5150
5151// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5152func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
5153	return &avwsadwi, true
5154}
5155
5156// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5157func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
5158	return &avwsadwi, true
5159}
5160
5161// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5162func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
5163	return nil, false
5164}
5165
5166// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5167func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
5168	return nil, false
5169}
5170
5171// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5172func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
5173	return nil, false
5174}
5175
5176// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5177func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
5178	return nil, false
5179}
5180
5181// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5182func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
5183	return nil, false
5184}
5185
5186// AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5187func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
5188	return nil, false
5189}
5190
5191// AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
5192func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
5193	return &avwsadwi, true
5194}
5195
5196// AzureVMWorkloadSAPAseSystemProtectableItem azure VM workload-specific protectable item representing SAP
5197// ASE System.
5198type AzureVMWorkloadSAPAseSystemProtectableItem struct {
5199	// ParentName - Name for instance or AG
5200	ParentName *string `json:"parentName,omitempty"`
5201	// ParentUniqueName - Parent Unique Name is added to provide the service formatted URI Name of the Parent
5202	// Only Applicable for data bases where the parent would be either Instance or a SQL AG.
5203	ParentUniqueName *string `json:"parentUniqueName,omitempty"`
5204	// ServerName - Host/Cluster Name for instance or AG
5205	ServerName *string `json:"serverName,omitempty"`
5206	// IsAutoProtectable - Indicates if protectable item is auto-protectable
5207	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
5208	// IsAutoProtected - Indicates if protectable item is auto-protected
5209	IsAutoProtected *bool `json:"isAutoProtected,omitempty"`
5210	// Subinquireditemcount - For instance or AG, indicates number of DB's present
5211	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
5212	// Subprotectableitemcount - For instance or AG, indicates number of DB's to be protected
5213	Subprotectableitemcount *int32 `json:"subprotectableitemcount,omitempty"`
5214	// Prebackupvalidation - Pre-backup validation for protectable objects
5215	Prebackupvalidation *PreBackupValidation `json:"prebackupvalidation,omitempty"`
5216	// BackupManagementType - Type of backup management to backup an item.
5217	BackupManagementType *string `json:"backupManagementType,omitempty"`
5218	// WorkloadType - Type of workload for the backup management
5219	WorkloadType *string `json:"workloadType,omitempty"`
5220	// FriendlyName - Friendly name of the backup item.
5221	FriendlyName *string `json:"friendlyName,omitempty"`
5222	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
5223	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
5224	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
5225	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
5226}
5227
5228// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPAseSystemProtectableItem.
5229func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) MarshalJSON() ([]byte, error) {
5230	avwsaspi.ProtectableItemType = ProtectableItemTypeSAPAseSystem
5231	objectMap := make(map[string]interface{})
5232	if avwsaspi.ParentName != nil {
5233		objectMap["parentName"] = avwsaspi.ParentName
5234	}
5235	if avwsaspi.ParentUniqueName != nil {
5236		objectMap["parentUniqueName"] = avwsaspi.ParentUniqueName
5237	}
5238	if avwsaspi.ServerName != nil {
5239		objectMap["serverName"] = avwsaspi.ServerName
5240	}
5241	if avwsaspi.IsAutoProtectable != nil {
5242		objectMap["isAutoProtectable"] = avwsaspi.IsAutoProtectable
5243	}
5244	if avwsaspi.IsAutoProtected != nil {
5245		objectMap["isAutoProtected"] = avwsaspi.IsAutoProtected
5246	}
5247	if avwsaspi.Subinquireditemcount != nil {
5248		objectMap["subinquireditemcount"] = avwsaspi.Subinquireditemcount
5249	}
5250	if avwsaspi.Subprotectableitemcount != nil {
5251		objectMap["subprotectableitemcount"] = avwsaspi.Subprotectableitemcount
5252	}
5253	if avwsaspi.Prebackupvalidation != nil {
5254		objectMap["prebackupvalidation"] = avwsaspi.Prebackupvalidation
5255	}
5256	if avwsaspi.BackupManagementType != nil {
5257		objectMap["backupManagementType"] = avwsaspi.BackupManagementType
5258	}
5259	if avwsaspi.WorkloadType != nil {
5260		objectMap["workloadType"] = avwsaspi.WorkloadType
5261	}
5262	if avwsaspi.FriendlyName != nil {
5263		objectMap["friendlyName"] = avwsaspi.FriendlyName
5264	}
5265	if avwsaspi.ProtectionState != "" {
5266		objectMap["protectionState"] = avwsaspi.ProtectionState
5267	}
5268	if avwsaspi.ProtectableItemType != "" {
5269		objectMap["protectableItemType"] = avwsaspi.ProtectableItemType
5270	}
5271	return json.Marshal(objectMap)
5272}
5273
5274// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5275func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
5276	return nil, false
5277}
5278
5279// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5280func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
5281	return nil, false
5282}
5283
5284// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5285func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
5286	return nil, false
5287}
5288
5289// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5290func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
5291	return nil, false
5292}
5293
5294// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5295func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
5296	return &avwsaspi, true
5297}
5298
5299// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5300func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
5301	return &avwsaspi, true
5302}
5303
5304// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5305func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
5306	return nil, false
5307}
5308
5309// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5310func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
5311	return nil, false
5312}
5313
5314// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5315func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
5316	return nil, false
5317}
5318
5319// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5320func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
5321	return nil, false
5322}
5323
5324// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5325func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
5326	return nil, false
5327}
5328
5329// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5330func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
5331	return nil, false
5332}
5333
5334// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5335func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
5336	return nil, false
5337}
5338
5339// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5340func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
5341	return nil, false
5342}
5343
5344// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
5345func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
5346	return &avwsaspi, true
5347}
5348
5349// AzureVMWorkloadSAPAseSystemWorkloadItem azure VM workload-specific workload item representing SAP ASE
5350// System.
5351type AzureVMWorkloadSAPAseSystemWorkloadItem struct {
5352	// ParentName - Name for instance or AG
5353	ParentName *string `json:"parentName,omitempty"`
5354	// ServerName - Host/Cluster Name for instance or AG
5355	ServerName *string `json:"serverName,omitempty"`
5356	// IsAutoProtectable - Indicates if workload item is auto-protectable
5357	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
5358	// Subinquireditemcount - For instance or AG, indicates number of DB's present
5359	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
5360	// SubWorkloadItemCount - For instance or AG, indicates number of DB's to be protected
5361	SubWorkloadItemCount *int32 `json:"subWorkloadItemCount,omitempty"`
5362	// BackupManagementType - Type of backup management to backup an item.
5363	BackupManagementType *string `json:"backupManagementType,omitempty"`
5364	// WorkloadType - Type of workload for the backup management
5365	WorkloadType *string `json:"workloadType,omitempty"`
5366	// FriendlyName - Friendly name of the backup item.
5367	FriendlyName *string `json:"friendlyName,omitempty"`
5368	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
5369	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
5370	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
5371	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
5372}
5373
5374// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPAseSystemWorkloadItem.
5375func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) MarshalJSON() ([]byte, error) {
5376	avwsaswi.WorkloadItemType = WorkloadItemTypeSAPAseSystem1
5377	objectMap := make(map[string]interface{})
5378	if avwsaswi.ParentName != nil {
5379		objectMap["parentName"] = avwsaswi.ParentName
5380	}
5381	if avwsaswi.ServerName != nil {
5382		objectMap["serverName"] = avwsaswi.ServerName
5383	}
5384	if avwsaswi.IsAutoProtectable != nil {
5385		objectMap["isAutoProtectable"] = avwsaswi.IsAutoProtectable
5386	}
5387	if avwsaswi.Subinquireditemcount != nil {
5388		objectMap["subinquireditemcount"] = avwsaswi.Subinquireditemcount
5389	}
5390	if avwsaswi.SubWorkloadItemCount != nil {
5391		objectMap["subWorkloadItemCount"] = avwsaswi.SubWorkloadItemCount
5392	}
5393	if avwsaswi.BackupManagementType != nil {
5394		objectMap["backupManagementType"] = avwsaswi.BackupManagementType
5395	}
5396	if avwsaswi.WorkloadType != nil {
5397		objectMap["workloadType"] = avwsaswi.WorkloadType
5398	}
5399	if avwsaswi.FriendlyName != nil {
5400		objectMap["friendlyName"] = avwsaswi.FriendlyName
5401	}
5402	if avwsaswi.ProtectionState != "" {
5403		objectMap["protectionState"] = avwsaswi.ProtectionState
5404	}
5405	if avwsaswi.WorkloadItemType != "" {
5406		objectMap["workloadItemType"] = avwsaswi.WorkloadItemType
5407	}
5408	return json.Marshal(objectMap)
5409}
5410
5411// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5412func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
5413	return nil, false
5414}
5415
5416// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5417func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
5418	return &avwsaswi, true
5419}
5420
5421// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5422func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
5423	return nil, false
5424}
5425
5426// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5427func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
5428	return &avwsaswi, true
5429}
5430
5431// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5432func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
5433	return nil, false
5434}
5435
5436// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5437func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
5438	return nil, false
5439}
5440
5441// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5442func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
5443	return nil, false
5444}
5445
5446// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5447func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
5448	return nil, false
5449}
5450
5451// AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5452func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
5453	return nil, false
5454}
5455
5456// AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
5457func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
5458	return &avwsaswi, true
5459}
5460
5461// AzureVMWorkloadSAPHanaDatabaseProtectableItem azure VM workload-specific protectable item representing
5462// SAP HANA Database.
5463type AzureVMWorkloadSAPHanaDatabaseProtectableItem struct {
5464	// ParentName - Name for instance or AG
5465	ParentName *string `json:"parentName,omitempty"`
5466	// ParentUniqueName - Parent Unique Name is added to provide the service formatted URI Name of the Parent
5467	// Only Applicable for data bases where the parent would be either Instance or a SQL AG.
5468	ParentUniqueName *string `json:"parentUniqueName,omitempty"`
5469	// ServerName - Host/Cluster Name for instance or AG
5470	ServerName *string `json:"serverName,omitempty"`
5471	// IsAutoProtectable - Indicates if protectable item is auto-protectable
5472	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
5473	// IsAutoProtected - Indicates if protectable item is auto-protected
5474	IsAutoProtected *bool `json:"isAutoProtected,omitempty"`
5475	// Subinquireditemcount - For instance or AG, indicates number of DB's present
5476	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
5477	// Subprotectableitemcount - For instance or AG, indicates number of DB's to be protected
5478	Subprotectableitemcount *int32 `json:"subprotectableitemcount,omitempty"`
5479	// Prebackupvalidation - Pre-backup validation for protectable objects
5480	Prebackupvalidation *PreBackupValidation `json:"prebackupvalidation,omitempty"`
5481	// BackupManagementType - Type of backup management to backup an item.
5482	BackupManagementType *string `json:"backupManagementType,omitempty"`
5483	// WorkloadType - Type of workload for the backup management
5484	WorkloadType *string `json:"workloadType,omitempty"`
5485	// FriendlyName - Friendly name of the backup item.
5486	FriendlyName *string `json:"friendlyName,omitempty"`
5487	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
5488	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
5489	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
5490	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
5491}
5492
5493// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5494func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) MarshalJSON() ([]byte, error) {
5495	avwshdpi.ProtectableItemType = ProtectableItemTypeSAPHanaDatabase
5496	objectMap := make(map[string]interface{})
5497	if avwshdpi.ParentName != nil {
5498		objectMap["parentName"] = avwshdpi.ParentName
5499	}
5500	if avwshdpi.ParentUniqueName != nil {
5501		objectMap["parentUniqueName"] = avwshdpi.ParentUniqueName
5502	}
5503	if avwshdpi.ServerName != nil {
5504		objectMap["serverName"] = avwshdpi.ServerName
5505	}
5506	if avwshdpi.IsAutoProtectable != nil {
5507		objectMap["isAutoProtectable"] = avwshdpi.IsAutoProtectable
5508	}
5509	if avwshdpi.IsAutoProtected != nil {
5510		objectMap["isAutoProtected"] = avwshdpi.IsAutoProtected
5511	}
5512	if avwshdpi.Subinquireditemcount != nil {
5513		objectMap["subinquireditemcount"] = avwshdpi.Subinquireditemcount
5514	}
5515	if avwshdpi.Subprotectableitemcount != nil {
5516		objectMap["subprotectableitemcount"] = avwshdpi.Subprotectableitemcount
5517	}
5518	if avwshdpi.Prebackupvalidation != nil {
5519		objectMap["prebackupvalidation"] = avwshdpi.Prebackupvalidation
5520	}
5521	if avwshdpi.BackupManagementType != nil {
5522		objectMap["backupManagementType"] = avwshdpi.BackupManagementType
5523	}
5524	if avwshdpi.WorkloadType != nil {
5525		objectMap["workloadType"] = avwshdpi.WorkloadType
5526	}
5527	if avwshdpi.FriendlyName != nil {
5528		objectMap["friendlyName"] = avwshdpi.FriendlyName
5529	}
5530	if avwshdpi.ProtectionState != "" {
5531		objectMap["protectionState"] = avwshdpi.ProtectionState
5532	}
5533	if avwshdpi.ProtectableItemType != "" {
5534		objectMap["protectableItemType"] = avwshdpi.ProtectableItemType
5535	}
5536	return json.Marshal(objectMap)
5537}
5538
5539// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5540func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
5541	return nil, false
5542}
5543
5544// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5545func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
5546	return nil, false
5547}
5548
5549// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5550func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
5551	return nil, false
5552}
5553
5554// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5555func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
5556	return nil, false
5557}
5558
5559// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5560func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
5561	return &avwshdpi, true
5562}
5563
5564// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5565func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
5566	return nil, false
5567}
5568
5569// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5570func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
5571	return &avwshdpi, true
5572}
5573
5574// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5575func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
5576	return nil, false
5577}
5578
5579// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5580func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
5581	return nil, false
5582}
5583
5584// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5585func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
5586	return nil, false
5587}
5588
5589// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5590func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
5591	return nil, false
5592}
5593
5594// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5595func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
5596	return nil, false
5597}
5598
5599// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5600func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
5601	return nil, false
5602}
5603
5604// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5605func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
5606	return nil, false
5607}
5608
5609// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
5610func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
5611	return &avwshdpi, true
5612}
5613
5614// AzureVMWorkloadSAPHanaDatabaseProtectedItem azure VM workload-specific protected item representing SAP
5615// HANA Database.
5616type AzureVMWorkloadSAPHanaDatabaseProtectedItem struct {
5617	// FriendlyName - Friendly name of the DB represented by this backup item.
5618	FriendlyName *string `json:"friendlyName,omitempty"`
5619	// ServerName - Host/Cluster Name for instance or AG
5620	ServerName *string `json:"serverName,omitempty"`
5621	// ParentName - Parent name of the DB such as Instance or Availability Group.
5622	ParentName *string `json:"parentName,omitempty"`
5623	// ParentType - Parent type of protected item, example: for a DB, standalone server or distributed
5624	ParentType *string `json:"parentType,omitempty"`
5625	// ProtectionStatus - Backup status of this backup item.
5626	ProtectionStatus *string `json:"protectionStatus,omitempty"`
5627	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
5628	ProtectionState ProtectionState `json:"protectionState,omitempty"`
5629	// LastBackupStatus - Last backup operation status. Possible values: Healthy, Unhealthy. Possible values include: 'LastBackupStatusInvalid', 'LastBackupStatusHealthy', 'LastBackupStatusUnhealthy', 'LastBackupStatusIRPending'
5630	LastBackupStatus LastBackupStatus `json:"lastBackupStatus,omitempty"`
5631	// LastBackupTime - Timestamp of the last backup operation on this backup item.
5632	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
5633	// LastBackupErrorDetail - Error details in last backup
5634	LastBackupErrorDetail *ErrorDetail `json:"lastBackupErrorDetail,omitempty"`
5635	// ProtectedItemDataSourceID - Data ID of the protected item.
5636	ProtectedItemDataSourceID *string `json:"protectedItemDataSourceId,omitempty"`
5637	// ProtectedItemHealthStatus - Health status of the backup item, evaluated based on last heartbeat received. Possible values include: 'ProtectedItemHealthStatusInvalid', 'ProtectedItemHealthStatusHealthy', 'ProtectedItemHealthStatusUnhealthy', 'ProtectedItemHealthStatusNotReachable', 'ProtectedItemHealthStatusIRPending'
5638	ProtectedItemHealthStatus ProtectedItemHealthStatus `json:"protectedItemHealthStatus,omitempty"`
5639	// ExtendedInfo - Additional information for this backup item.
5640	ExtendedInfo *AzureVMWorkloadProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
5641	// KpisHealths - Health details of different KPIs
5642	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
5643	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
5644	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
5645	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
5646	WorkloadType DataSourceType `json:"workloadType,omitempty"`
5647	// ContainerName - Unique name of container
5648	ContainerName *string `json:"containerName,omitempty"`
5649	// SourceResourceID - ARM ID of the resource to be backed up.
5650	SourceResourceID *string `json:"sourceResourceId,omitempty"`
5651	// PolicyID - ID of the backup policy with which this item is backed up.
5652	PolicyID *string `json:"policyId,omitempty"`
5653	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
5654	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
5655	// BackupSetName - Name of the backup set the backup item belongs to
5656	BackupSetName *string `json:"backupSetName,omitempty"`
5657	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
5658	CreateMode CreateMode `json:"createMode,omitempty"`
5659	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
5660	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
5661	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
5662	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
5663	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
5664	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
5665	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
5666	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
5667	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
5668	IsRehydrate *bool `json:"isRehydrate,omitempty"`
5669	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
5670	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
5671}
5672
5673// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5674func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) MarshalJSON() ([]byte, error) {
5675	avwshdpi.ProtectedItemType = ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase
5676	objectMap := make(map[string]interface{})
5677	if avwshdpi.FriendlyName != nil {
5678		objectMap["friendlyName"] = avwshdpi.FriendlyName
5679	}
5680	if avwshdpi.ServerName != nil {
5681		objectMap["serverName"] = avwshdpi.ServerName
5682	}
5683	if avwshdpi.ParentName != nil {
5684		objectMap["parentName"] = avwshdpi.ParentName
5685	}
5686	if avwshdpi.ParentType != nil {
5687		objectMap["parentType"] = avwshdpi.ParentType
5688	}
5689	if avwshdpi.ProtectionStatus != nil {
5690		objectMap["protectionStatus"] = avwshdpi.ProtectionStatus
5691	}
5692	if avwshdpi.ProtectionState != "" {
5693		objectMap["protectionState"] = avwshdpi.ProtectionState
5694	}
5695	if avwshdpi.LastBackupStatus != "" {
5696		objectMap["lastBackupStatus"] = avwshdpi.LastBackupStatus
5697	}
5698	if avwshdpi.LastBackupTime != nil {
5699		objectMap["lastBackupTime"] = avwshdpi.LastBackupTime
5700	}
5701	if avwshdpi.LastBackupErrorDetail != nil {
5702		objectMap["lastBackupErrorDetail"] = avwshdpi.LastBackupErrorDetail
5703	}
5704	if avwshdpi.ProtectedItemDataSourceID != nil {
5705		objectMap["protectedItemDataSourceId"] = avwshdpi.ProtectedItemDataSourceID
5706	}
5707	if avwshdpi.ProtectedItemHealthStatus != "" {
5708		objectMap["protectedItemHealthStatus"] = avwshdpi.ProtectedItemHealthStatus
5709	}
5710	if avwshdpi.ExtendedInfo != nil {
5711		objectMap["extendedInfo"] = avwshdpi.ExtendedInfo
5712	}
5713	if avwshdpi.KpisHealths != nil {
5714		objectMap["kpisHealths"] = avwshdpi.KpisHealths
5715	}
5716	if avwshdpi.BackupManagementType != "" {
5717		objectMap["backupManagementType"] = avwshdpi.BackupManagementType
5718	}
5719	if avwshdpi.WorkloadType != "" {
5720		objectMap["workloadType"] = avwshdpi.WorkloadType
5721	}
5722	if avwshdpi.ContainerName != nil {
5723		objectMap["containerName"] = avwshdpi.ContainerName
5724	}
5725	if avwshdpi.SourceResourceID != nil {
5726		objectMap["sourceResourceId"] = avwshdpi.SourceResourceID
5727	}
5728	if avwshdpi.PolicyID != nil {
5729		objectMap["policyId"] = avwshdpi.PolicyID
5730	}
5731	if avwshdpi.LastRecoveryPoint != nil {
5732		objectMap["lastRecoveryPoint"] = avwshdpi.LastRecoveryPoint
5733	}
5734	if avwshdpi.BackupSetName != nil {
5735		objectMap["backupSetName"] = avwshdpi.BackupSetName
5736	}
5737	if avwshdpi.CreateMode != "" {
5738		objectMap["createMode"] = avwshdpi.CreateMode
5739	}
5740	if avwshdpi.DeferredDeleteTimeInUTC != nil {
5741		objectMap["deferredDeleteTimeInUTC"] = avwshdpi.DeferredDeleteTimeInUTC
5742	}
5743	if avwshdpi.IsScheduledForDeferredDelete != nil {
5744		objectMap["isScheduledForDeferredDelete"] = avwshdpi.IsScheduledForDeferredDelete
5745	}
5746	if avwshdpi.DeferredDeleteTimeRemaining != nil {
5747		objectMap["deferredDeleteTimeRemaining"] = avwshdpi.DeferredDeleteTimeRemaining
5748	}
5749	if avwshdpi.IsDeferredDeleteScheduleUpcoming != nil {
5750		objectMap["isDeferredDeleteScheduleUpcoming"] = avwshdpi.IsDeferredDeleteScheduleUpcoming
5751	}
5752	if avwshdpi.IsRehydrate != nil {
5753		objectMap["isRehydrate"] = avwshdpi.IsRehydrate
5754	}
5755	if avwshdpi.ProtectedItemType != "" {
5756		objectMap["protectedItemType"] = avwshdpi.ProtectedItemType
5757	}
5758	return json.Marshal(objectMap)
5759}
5760
5761// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5762func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
5763	return nil, false
5764}
5765
5766// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5767func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
5768	return nil, false
5769}
5770
5771// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5772func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
5773	return nil, false
5774}
5775
5776// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5777func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
5778	return nil, false
5779}
5780
5781// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5782func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
5783	return nil, false
5784}
5785
5786// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5787func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
5788	return nil, false
5789}
5790
5791// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5792func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
5793	return nil, false
5794}
5795
5796// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5797func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
5798	return &avwshdpi, true
5799}
5800
5801// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5802func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
5803	return nil, false
5804}
5805
5806// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5807func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
5808	return &avwshdpi, true
5809}
5810
5811// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5812func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
5813	return nil, false
5814}
5815
5816// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5817func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
5818	return nil, false
5819}
5820
5821// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5822func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
5823	return nil, false
5824}
5825
5826// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5827func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
5828	return nil, false
5829}
5830
5831// AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5832func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
5833	return nil, false
5834}
5835
5836// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
5837func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
5838	return &avwshdpi, true
5839}
5840
5841// AzureVMWorkloadSAPHanaDatabaseWorkloadItem azure VM workload-specific workload item representing SAP
5842// HANA Database.
5843type AzureVMWorkloadSAPHanaDatabaseWorkloadItem struct {
5844	// ParentName - Name for instance or AG
5845	ParentName *string `json:"parentName,omitempty"`
5846	// ServerName - Host/Cluster Name for instance or AG
5847	ServerName *string `json:"serverName,omitempty"`
5848	// IsAutoProtectable - Indicates if workload item is auto-protectable
5849	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
5850	// Subinquireditemcount - For instance or AG, indicates number of DB's present
5851	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
5852	// SubWorkloadItemCount - For instance or AG, indicates number of DB's to be protected
5853	SubWorkloadItemCount *int32 `json:"subWorkloadItemCount,omitempty"`
5854	// BackupManagementType - Type of backup management to backup an item.
5855	BackupManagementType *string `json:"backupManagementType,omitempty"`
5856	// WorkloadType - Type of workload for the backup management
5857	WorkloadType *string `json:"workloadType,omitempty"`
5858	// FriendlyName - Friendly name of the backup item.
5859	FriendlyName *string `json:"friendlyName,omitempty"`
5860	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
5861	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
5862	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
5863	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
5864}
5865
5866// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5867func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) MarshalJSON() ([]byte, error) {
5868	avwshdwi.WorkloadItemType = WorkloadItemTypeSAPHanaDatabase1
5869	objectMap := make(map[string]interface{})
5870	if avwshdwi.ParentName != nil {
5871		objectMap["parentName"] = avwshdwi.ParentName
5872	}
5873	if avwshdwi.ServerName != nil {
5874		objectMap["serverName"] = avwshdwi.ServerName
5875	}
5876	if avwshdwi.IsAutoProtectable != nil {
5877		objectMap["isAutoProtectable"] = avwshdwi.IsAutoProtectable
5878	}
5879	if avwshdwi.Subinquireditemcount != nil {
5880		objectMap["subinquireditemcount"] = avwshdwi.Subinquireditemcount
5881	}
5882	if avwshdwi.SubWorkloadItemCount != nil {
5883		objectMap["subWorkloadItemCount"] = avwshdwi.SubWorkloadItemCount
5884	}
5885	if avwshdwi.BackupManagementType != nil {
5886		objectMap["backupManagementType"] = avwshdwi.BackupManagementType
5887	}
5888	if avwshdwi.WorkloadType != nil {
5889		objectMap["workloadType"] = avwshdwi.WorkloadType
5890	}
5891	if avwshdwi.FriendlyName != nil {
5892		objectMap["friendlyName"] = avwshdwi.FriendlyName
5893	}
5894	if avwshdwi.ProtectionState != "" {
5895		objectMap["protectionState"] = avwshdwi.ProtectionState
5896	}
5897	if avwshdwi.WorkloadItemType != "" {
5898		objectMap["workloadItemType"] = avwshdwi.WorkloadItemType
5899	}
5900	return json.Marshal(objectMap)
5901}
5902
5903// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5904func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
5905	return nil, false
5906}
5907
5908// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5909func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
5910	return &avwshdwi, true
5911}
5912
5913// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5914func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
5915	return nil, false
5916}
5917
5918// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5919func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
5920	return nil, false
5921}
5922
5923// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5924func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
5925	return &avwshdwi, true
5926}
5927
5928// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5929func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
5930	return nil, false
5931}
5932
5933// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5934func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
5935	return nil, false
5936}
5937
5938// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5939func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
5940	return nil, false
5941}
5942
5943// AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5944func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
5945	return nil, false
5946}
5947
5948// AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
5949func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
5950	return &avwshdwi, true
5951}
5952
5953// AzureVMWorkloadSAPHanaSystemProtectableItem azure VM workload-specific protectable item representing SAP
5954// HANA System.
5955type AzureVMWorkloadSAPHanaSystemProtectableItem struct {
5956	// ParentName - Name for instance or AG
5957	ParentName *string `json:"parentName,omitempty"`
5958	// ParentUniqueName - Parent Unique Name is added to provide the service formatted URI Name of the Parent
5959	// Only Applicable for data bases where the parent would be either Instance or a SQL AG.
5960	ParentUniqueName *string `json:"parentUniqueName,omitempty"`
5961	// ServerName - Host/Cluster Name for instance or AG
5962	ServerName *string `json:"serverName,omitempty"`
5963	// IsAutoProtectable - Indicates if protectable item is auto-protectable
5964	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
5965	// IsAutoProtected - Indicates if protectable item is auto-protected
5966	IsAutoProtected *bool `json:"isAutoProtected,omitempty"`
5967	// Subinquireditemcount - For instance or AG, indicates number of DB's present
5968	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
5969	// Subprotectableitemcount - For instance or AG, indicates number of DB's to be protected
5970	Subprotectableitemcount *int32 `json:"subprotectableitemcount,omitempty"`
5971	// Prebackupvalidation - Pre-backup validation for protectable objects
5972	Prebackupvalidation *PreBackupValidation `json:"prebackupvalidation,omitempty"`
5973	// BackupManagementType - Type of backup management to backup an item.
5974	BackupManagementType *string `json:"backupManagementType,omitempty"`
5975	// WorkloadType - Type of workload for the backup management
5976	WorkloadType *string `json:"workloadType,omitempty"`
5977	// FriendlyName - Friendly name of the backup item.
5978	FriendlyName *string `json:"friendlyName,omitempty"`
5979	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
5980	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
5981	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
5982	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
5983}
5984
5985// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPHanaSystemProtectableItem.
5986func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) MarshalJSON() ([]byte, error) {
5987	avwshspi.ProtectableItemType = ProtectableItemTypeSAPHanaSystem
5988	objectMap := make(map[string]interface{})
5989	if avwshspi.ParentName != nil {
5990		objectMap["parentName"] = avwshspi.ParentName
5991	}
5992	if avwshspi.ParentUniqueName != nil {
5993		objectMap["parentUniqueName"] = avwshspi.ParentUniqueName
5994	}
5995	if avwshspi.ServerName != nil {
5996		objectMap["serverName"] = avwshspi.ServerName
5997	}
5998	if avwshspi.IsAutoProtectable != nil {
5999		objectMap["isAutoProtectable"] = avwshspi.IsAutoProtectable
6000	}
6001	if avwshspi.IsAutoProtected != nil {
6002		objectMap["isAutoProtected"] = avwshspi.IsAutoProtected
6003	}
6004	if avwshspi.Subinquireditemcount != nil {
6005		objectMap["subinquireditemcount"] = avwshspi.Subinquireditemcount
6006	}
6007	if avwshspi.Subprotectableitemcount != nil {
6008		objectMap["subprotectableitemcount"] = avwshspi.Subprotectableitemcount
6009	}
6010	if avwshspi.Prebackupvalidation != nil {
6011		objectMap["prebackupvalidation"] = avwshspi.Prebackupvalidation
6012	}
6013	if avwshspi.BackupManagementType != nil {
6014		objectMap["backupManagementType"] = avwshspi.BackupManagementType
6015	}
6016	if avwshspi.WorkloadType != nil {
6017		objectMap["workloadType"] = avwshspi.WorkloadType
6018	}
6019	if avwshspi.FriendlyName != nil {
6020		objectMap["friendlyName"] = avwshspi.FriendlyName
6021	}
6022	if avwshspi.ProtectionState != "" {
6023		objectMap["protectionState"] = avwshspi.ProtectionState
6024	}
6025	if avwshspi.ProtectableItemType != "" {
6026		objectMap["protectableItemType"] = avwshspi.ProtectableItemType
6027	}
6028	return json.Marshal(objectMap)
6029}
6030
6031// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6032func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
6033	return nil, false
6034}
6035
6036// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6037func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
6038	return nil, false
6039}
6040
6041// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6042func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
6043	return nil, false
6044}
6045
6046// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6047func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
6048	return nil, false
6049}
6050
6051// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6052func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
6053	return &avwshspi, true
6054}
6055
6056// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6057func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
6058	return nil, false
6059}
6060
6061// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6062func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
6063	return nil, false
6064}
6065
6066// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6067func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
6068	return &avwshspi, true
6069}
6070
6071// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6072func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
6073	return nil, false
6074}
6075
6076// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6077func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
6078	return nil, false
6079}
6080
6081// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6082func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
6083	return nil, false
6084}
6085
6086// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6087func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
6088	return nil, false
6089}
6090
6091// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6092func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
6093	return nil, false
6094}
6095
6096// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6097func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
6098	return nil, false
6099}
6100
6101// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
6102func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
6103	return &avwshspi, true
6104}
6105
6106// AzureVMWorkloadSAPHanaSystemWorkloadItem azure VM workload-specific workload item representing SAP HANA
6107// System.
6108type AzureVMWorkloadSAPHanaSystemWorkloadItem struct {
6109	// ParentName - Name for instance or AG
6110	ParentName *string `json:"parentName,omitempty"`
6111	// ServerName - Host/Cluster Name for instance or AG
6112	ServerName *string `json:"serverName,omitempty"`
6113	// IsAutoProtectable - Indicates if workload item is auto-protectable
6114	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
6115	// Subinquireditemcount - For instance or AG, indicates number of DB's present
6116	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
6117	// SubWorkloadItemCount - For instance or AG, indicates number of DB's to be protected
6118	SubWorkloadItemCount *int32 `json:"subWorkloadItemCount,omitempty"`
6119	// BackupManagementType - Type of backup management to backup an item.
6120	BackupManagementType *string `json:"backupManagementType,omitempty"`
6121	// WorkloadType - Type of workload for the backup management
6122	WorkloadType *string `json:"workloadType,omitempty"`
6123	// FriendlyName - Friendly name of the backup item.
6124	FriendlyName *string `json:"friendlyName,omitempty"`
6125	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
6126	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
6127	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
6128	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
6129}
6130
6131// MarshalJSON is the custom marshaler for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6132func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) MarshalJSON() ([]byte, error) {
6133	avwshswi.WorkloadItemType = WorkloadItemTypeSAPHanaSystem1
6134	objectMap := make(map[string]interface{})
6135	if avwshswi.ParentName != nil {
6136		objectMap["parentName"] = avwshswi.ParentName
6137	}
6138	if avwshswi.ServerName != nil {
6139		objectMap["serverName"] = avwshswi.ServerName
6140	}
6141	if avwshswi.IsAutoProtectable != nil {
6142		objectMap["isAutoProtectable"] = avwshswi.IsAutoProtectable
6143	}
6144	if avwshswi.Subinquireditemcount != nil {
6145		objectMap["subinquireditemcount"] = avwshswi.Subinquireditemcount
6146	}
6147	if avwshswi.SubWorkloadItemCount != nil {
6148		objectMap["subWorkloadItemCount"] = avwshswi.SubWorkloadItemCount
6149	}
6150	if avwshswi.BackupManagementType != nil {
6151		objectMap["backupManagementType"] = avwshswi.BackupManagementType
6152	}
6153	if avwshswi.WorkloadType != nil {
6154		objectMap["workloadType"] = avwshswi.WorkloadType
6155	}
6156	if avwshswi.FriendlyName != nil {
6157		objectMap["friendlyName"] = avwshswi.FriendlyName
6158	}
6159	if avwshswi.ProtectionState != "" {
6160		objectMap["protectionState"] = avwshswi.ProtectionState
6161	}
6162	if avwshswi.WorkloadItemType != "" {
6163		objectMap["workloadItemType"] = avwshswi.WorkloadItemType
6164	}
6165	return json.Marshal(objectMap)
6166}
6167
6168// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6169func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
6170	return nil, false
6171}
6172
6173// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6174func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
6175	return &avwshswi, true
6176}
6177
6178// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6179func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
6180	return nil, false
6181}
6182
6183// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6184func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
6185	return nil, false
6186}
6187
6188// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6189func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
6190	return nil, false
6191}
6192
6193// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6194func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
6195	return &avwshswi, true
6196}
6197
6198// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6199func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
6200	return nil, false
6201}
6202
6203// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6204func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
6205	return nil, false
6206}
6207
6208// AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6209func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
6210	return nil, false
6211}
6212
6213// AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
6214func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
6215	return &avwshswi, true
6216}
6217
6218// AzureVMWorkloadSQLAvailabilityGroupProtectableItem azure VM workload-specific protectable item
6219// representing SQL Availability Group.
6220type AzureVMWorkloadSQLAvailabilityGroupProtectableItem struct {
6221	// ParentName - Name for instance or AG
6222	ParentName *string `json:"parentName,omitempty"`
6223	// ParentUniqueName - Parent Unique Name is added to provide the service formatted URI Name of the Parent
6224	// Only Applicable for data bases where the parent would be either Instance or a SQL AG.
6225	ParentUniqueName *string `json:"parentUniqueName,omitempty"`
6226	// ServerName - Host/Cluster Name for instance or AG
6227	ServerName *string `json:"serverName,omitempty"`
6228	// IsAutoProtectable - Indicates if protectable item is auto-protectable
6229	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
6230	// IsAutoProtected - Indicates if protectable item is auto-protected
6231	IsAutoProtected *bool `json:"isAutoProtected,omitempty"`
6232	// Subinquireditemcount - For instance or AG, indicates number of DB's present
6233	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
6234	// Subprotectableitemcount - For instance or AG, indicates number of DB's to be protected
6235	Subprotectableitemcount *int32 `json:"subprotectableitemcount,omitempty"`
6236	// Prebackupvalidation - Pre-backup validation for protectable objects
6237	Prebackupvalidation *PreBackupValidation `json:"prebackupvalidation,omitempty"`
6238	// BackupManagementType - Type of backup management to backup an item.
6239	BackupManagementType *string `json:"backupManagementType,omitempty"`
6240	// WorkloadType - Type of workload for the backup management
6241	WorkloadType *string `json:"workloadType,omitempty"`
6242	// FriendlyName - Friendly name of the backup item.
6243	FriendlyName *string `json:"friendlyName,omitempty"`
6244	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
6245	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
6246	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
6247	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
6248}
6249
6250// MarshalJSON is the custom marshaler for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6251func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) MarshalJSON() ([]byte, error) {
6252	avwsagpi.ProtectableItemType = ProtectableItemTypeSQLAvailabilityGroupContainer
6253	objectMap := make(map[string]interface{})
6254	if avwsagpi.ParentName != nil {
6255		objectMap["parentName"] = avwsagpi.ParentName
6256	}
6257	if avwsagpi.ParentUniqueName != nil {
6258		objectMap["parentUniqueName"] = avwsagpi.ParentUniqueName
6259	}
6260	if avwsagpi.ServerName != nil {
6261		objectMap["serverName"] = avwsagpi.ServerName
6262	}
6263	if avwsagpi.IsAutoProtectable != nil {
6264		objectMap["isAutoProtectable"] = avwsagpi.IsAutoProtectable
6265	}
6266	if avwsagpi.IsAutoProtected != nil {
6267		objectMap["isAutoProtected"] = avwsagpi.IsAutoProtected
6268	}
6269	if avwsagpi.Subinquireditemcount != nil {
6270		objectMap["subinquireditemcount"] = avwsagpi.Subinquireditemcount
6271	}
6272	if avwsagpi.Subprotectableitemcount != nil {
6273		objectMap["subprotectableitemcount"] = avwsagpi.Subprotectableitemcount
6274	}
6275	if avwsagpi.Prebackupvalidation != nil {
6276		objectMap["prebackupvalidation"] = avwsagpi.Prebackupvalidation
6277	}
6278	if avwsagpi.BackupManagementType != nil {
6279		objectMap["backupManagementType"] = avwsagpi.BackupManagementType
6280	}
6281	if avwsagpi.WorkloadType != nil {
6282		objectMap["workloadType"] = avwsagpi.WorkloadType
6283	}
6284	if avwsagpi.FriendlyName != nil {
6285		objectMap["friendlyName"] = avwsagpi.FriendlyName
6286	}
6287	if avwsagpi.ProtectionState != "" {
6288		objectMap["protectionState"] = avwsagpi.ProtectionState
6289	}
6290	if avwsagpi.ProtectableItemType != "" {
6291		objectMap["protectableItemType"] = avwsagpi.ProtectableItemType
6292	}
6293	return json.Marshal(objectMap)
6294}
6295
6296// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6297func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
6298	return nil, false
6299}
6300
6301// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6302func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
6303	return nil, false
6304}
6305
6306// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6307func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
6308	return nil, false
6309}
6310
6311// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6312func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
6313	return nil, false
6314}
6315
6316// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6317func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
6318	return &avwsagpi, true
6319}
6320
6321// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6322func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
6323	return nil, false
6324}
6325
6326// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6327func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
6328	return nil, false
6329}
6330
6331// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6332func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
6333	return nil, false
6334}
6335
6336// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6337func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
6338	return &avwsagpi, true
6339}
6340
6341// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6342func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
6343	return nil, false
6344}
6345
6346// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6347func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
6348	return nil, false
6349}
6350
6351// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6352func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
6353	return nil, false
6354}
6355
6356// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6357func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
6358	return nil, false
6359}
6360
6361// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6362func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
6363	return nil, false
6364}
6365
6366// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
6367func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
6368	return &avwsagpi, true
6369}
6370
6371// AzureVMWorkloadSQLDatabaseProtectableItem azure VM workload-specific protectable item representing SQL
6372// Database.
6373type AzureVMWorkloadSQLDatabaseProtectableItem struct {
6374	// ParentName - Name for instance or AG
6375	ParentName *string `json:"parentName,omitempty"`
6376	// ParentUniqueName - Parent Unique Name is added to provide the service formatted URI Name of the Parent
6377	// Only Applicable for data bases where the parent would be either Instance or a SQL AG.
6378	ParentUniqueName *string `json:"parentUniqueName,omitempty"`
6379	// ServerName - Host/Cluster Name for instance or AG
6380	ServerName *string `json:"serverName,omitempty"`
6381	// IsAutoProtectable - Indicates if protectable item is auto-protectable
6382	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
6383	// IsAutoProtected - Indicates if protectable item is auto-protected
6384	IsAutoProtected *bool `json:"isAutoProtected,omitempty"`
6385	// Subinquireditemcount - For instance or AG, indicates number of DB's present
6386	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
6387	// Subprotectableitemcount - For instance or AG, indicates number of DB's to be protected
6388	Subprotectableitemcount *int32 `json:"subprotectableitemcount,omitempty"`
6389	// Prebackupvalidation - Pre-backup validation for protectable objects
6390	Prebackupvalidation *PreBackupValidation `json:"prebackupvalidation,omitempty"`
6391	// BackupManagementType - Type of backup management to backup an item.
6392	BackupManagementType *string `json:"backupManagementType,omitempty"`
6393	// WorkloadType - Type of workload for the backup management
6394	WorkloadType *string `json:"workloadType,omitempty"`
6395	// FriendlyName - Friendly name of the backup item.
6396	FriendlyName *string `json:"friendlyName,omitempty"`
6397	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
6398	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
6399	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
6400	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
6401}
6402
6403// MarshalJSON is the custom marshaler for AzureVMWorkloadSQLDatabaseProtectableItem.
6404func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) MarshalJSON() ([]byte, error) {
6405	avwsdpi.ProtectableItemType = ProtectableItemTypeSQLDataBase
6406	objectMap := make(map[string]interface{})
6407	if avwsdpi.ParentName != nil {
6408		objectMap["parentName"] = avwsdpi.ParentName
6409	}
6410	if avwsdpi.ParentUniqueName != nil {
6411		objectMap["parentUniqueName"] = avwsdpi.ParentUniqueName
6412	}
6413	if avwsdpi.ServerName != nil {
6414		objectMap["serverName"] = avwsdpi.ServerName
6415	}
6416	if avwsdpi.IsAutoProtectable != nil {
6417		objectMap["isAutoProtectable"] = avwsdpi.IsAutoProtectable
6418	}
6419	if avwsdpi.IsAutoProtected != nil {
6420		objectMap["isAutoProtected"] = avwsdpi.IsAutoProtected
6421	}
6422	if avwsdpi.Subinquireditemcount != nil {
6423		objectMap["subinquireditemcount"] = avwsdpi.Subinquireditemcount
6424	}
6425	if avwsdpi.Subprotectableitemcount != nil {
6426		objectMap["subprotectableitemcount"] = avwsdpi.Subprotectableitemcount
6427	}
6428	if avwsdpi.Prebackupvalidation != nil {
6429		objectMap["prebackupvalidation"] = avwsdpi.Prebackupvalidation
6430	}
6431	if avwsdpi.BackupManagementType != nil {
6432		objectMap["backupManagementType"] = avwsdpi.BackupManagementType
6433	}
6434	if avwsdpi.WorkloadType != nil {
6435		objectMap["workloadType"] = avwsdpi.WorkloadType
6436	}
6437	if avwsdpi.FriendlyName != nil {
6438		objectMap["friendlyName"] = avwsdpi.FriendlyName
6439	}
6440	if avwsdpi.ProtectionState != "" {
6441		objectMap["protectionState"] = avwsdpi.ProtectionState
6442	}
6443	if avwsdpi.ProtectableItemType != "" {
6444		objectMap["protectableItemType"] = avwsdpi.ProtectableItemType
6445	}
6446	return json.Marshal(objectMap)
6447}
6448
6449// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6450func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
6451	return nil, false
6452}
6453
6454// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6455func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
6456	return nil, false
6457}
6458
6459// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6460func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
6461	return nil, false
6462}
6463
6464// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6465func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
6466	return nil, false
6467}
6468
6469// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6470func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
6471	return &avwsdpi, true
6472}
6473
6474// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6475func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
6476	return nil, false
6477}
6478
6479// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6480func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
6481	return nil, false
6482}
6483
6484// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6485func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
6486	return nil, false
6487}
6488
6489// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6490func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
6491	return nil, false
6492}
6493
6494// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6495func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
6496	return &avwsdpi, true
6497}
6498
6499// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6500func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
6501	return nil, false
6502}
6503
6504// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6505func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
6506	return nil, false
6507}
6508
6509// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6510func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
6511	return nil, false
6512}
6513
6514// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6515func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
6516	return nil, false
6517}
6518
6519// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
6520func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
6521	return &avwsdpi, true
6522}
6523
6524// AzureVMWorkloadSQLDatabaseProtectedItem azure VM workload-specific protected item representing SQL
6525// Database.
6526type AzureVMWorkloadSQLDatabaseProtectedItem struct {
6527	// FriendlyName - Friendly name of the DB represented by this backup item.
6528	FriendlyName *string `json:"friendlyName,omitempty"`
6529	// ServerName - Host/Cluster Name for instance or AG
6530	ServerName *string `json:"serverName,omitempty"`
6531	// ParentName - Parent name of the DB such as Instance or Availability Group.
6532	ParentName *string `json:"parentName,omitempty"`
6533	// ParentType - Parent type of protected item, example: for a DB, standalone server or distributed
6534	ParentType *string `json:"parentType,omitempty"`
6535	// ProtectionStatus - Backup status of this backup item.
6536	ProtectionStatus *string `json:"protectionStatus,omitempty"`
6537	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
6538	ProtectionState ProtectionState `json:"protectionState,omitempty"`
6539	// LastBackupStatus - Last backup operation status. Possible values: Healthy, Unhealthy. Possible values include: 'LastBackupStatusInvalid', 'LastBackupStatusHealthy', 'LastBackupStatusUnhealthy', 'LastBackupStatusIRPending'
6540	LastBackupStatus LastBackupStatus `json:"lastBackupStatus,omitempty"`
6541	// LastBackupTime - Timestamp of the last backup operation on this backup item.
6542	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
6543	// LastBackupErrorDetail - Error details in last backup
6544	LastBackupErrorDetail *ErrorDetail `json:"lastBackupErrorDetail,omitempty"`
6545	// ProtectedItemDataSourceID - Data ID of the protected item.
6546	ProtectedItemDataSourceID *string `json:"protectedItemDataSourceId,omitempty"`
6547	// ProtectedItemHealthStatus - Health status of the backup item, evaluated based on last heartbeat received. Possible values include: 'ProtectedItemHealthStatusInvalid', 'ProtectedItemHealthStatusHealthy', 'ProtectedItemHealthStatusUnhealthy', 'ProtectedItemHealthStatusNotReachable', 'ProtectedItemHealthStatusIRPending'
6548	ProtectedItemHealthStatus ProtectedItemHealthStatus `json:"protectedItemHealthStatus,omitempty"`
6549	// ExtendedInfo - Additional information for this backup item.
6550	ExtendedInfo *AzureVMWorkloadProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
6551	// KpisHealths - Health details of different KPIs
6552	KpisHealths map[string]*KPIResourceHealthDetails `json:"kpisHealths"`
6553	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
6554	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
6555	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
6556	WorkloadType DataSourceType `json:"workloadType,omitempty"`
6557	// ContainerName - Unique name of container
6558	ContainerName *string `json:"containerName,omitempty"`
6559	// SourceResourceID - ARM ID of the resource to be backed up.
6560	SourceResourceID *string `json:"sourceResourceId,omitempty"`
6561	// PolicyID - ID of the backup policy with which this item is backed up.
6562	PolicyID *string `json:"policyId,omitempty"`
6563	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
6564	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
6565	// BackupSetName - Name of the backup set the backup item belongs to
6566	BackupSetName *string `json:"backupSetName,omitempty"`
6567	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
6568	CreateMode CreateMode `json:"createMode,omitempty"`
6569	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
6570	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
6571	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
6572	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
6573	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
6574	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
6575	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
6576	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
6577	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
6578	IsRehydrate *bool `json:"isRehydrate,omitempty"`
6579	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
6580	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
6581}
6582
6583// MarshalJSON is the custom marshaler for AzureVMWorkloadSQLDatabaseProtectedItem.
6584func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) MarshalJSON() ([]byte, error) {
6585	avwsdpi.ProtectedItemType = ProtectedItemTypeAzureVMWorkloadSQLDatabase
6586	objectMap := make(map[string]interface{})
6587	if avwsdpi.FriendlyName != nil {
6588		objectMap["friendlyName"] = avwsdpi.FriendlyName
6589	}
6590	if avwsdpi.ServerName != nil {
6591		objectMap["serverName"] = avwsdpi.ServerName
6592	}
6593	if avwsdpi.ParentName != nil {
6594		objectMap["parentName"] = avwsdpi.ParentName
6595	}
6596	if avwsdpi.ParentType != nil {
6597		objectMap["parentType"] = avwsdpi.ParentType
6598	}
6599	if avwsdpi.ProtectionStatus != nil {
6600		objectMap["protectionStatus"] = avwsdpi.ProtectionStatus
6601	}
6602	if avwsdpi.ProtectionState != "" {
6603		objectMap["protectionState"] = avwsdpi.ProtectionState
6604	}
6605	if avwsdpi.LastBackupStatus != "" {
6606		objectMap["lastBackupStatus"] = avwsdpi.LastBackupStatus
6607	}
6608	if avwsdpi.LastBackupTime != nil {
6609		objectMap["lastBackupTime"] = avwsdpi.LastBackupTime
6610	}
6611	if avwsdpi.LastBackupErrorDetail != nil {
6612		objectMap["lastBackupErrorDetail"] = avwsdpi.LastBackupErrorDetail
6613	}
6614	if avwsdpi.ProtectedItemDataSourceID != nil {
6615		objectMap["protectedItemDataSourceId"] = avwsdpi.ProtectedItemDataSourceID
6616	}
6617	if avwsdpi.ProtectedItemHealthStatus != "" {
6618		objectMap["protectedItemHealthStatus"] = avwsdpi.ProtectedItemHealthStatus
6619	}
6620	if avwsdpi.ExtendedInfo != nil {
6621		objectMap["extendedInfo"] = avwsdpi.ExtendedInfo
6622	}
6623	if avwsdpi.KpisHealths != nil {
6624		objectMap["kpisHealths"] = avwsdpi.KpisHealths
6625	}
6626	if avwsdpi.BackupManagementType != "" {
6627		objectMap["backupManagementType"] = avwsdpi.BackupManagementType
6628	}
6629	if avwsdpi.WorkloadType != "" {
6630		objectMap["workloadType"] = avwsdpi.WorkloadType
6631	}
6632	if avwsdpi.ContainerName != nil {
6633		objectMap["containerName"] = avwsdpi.ContainerName
6634	}
6635	if avwsdpi.SourceResourceID != nil {
6636		objectMap["sourceResourceId"] = avwsdpi.SourceResourceID
6637	}
6638	if avwsdpi.PolicyID != nil {
6639		objectMap["policyId"] = avwsdpi.PolicyID
6640	}
6641	if avwsdpi.LastRecoveryPoint != nil {
6642		objectMap["lastRecoveryPoint"] = avwsdpi.LastRecoveryPoint
6643	}
6644	if avwsdpi.BackupSetName != nil {
6645		objectMap["backupSetName"] = avwsdpi.BackupSetName
6646	}
6647	if avwsdpi.CreateMode != "" {
6648		objectMap["createMode"] = avwsdpi.CreateMode
6649	}
6650	if avwsdpi.DeferredDeleteTimeInUTC != nil {
6651		objectMap["deferredDeleteTimeInUTC"] = avwsdpi.DeferredDeleteTimeInUTC
6652	}
6653	if avwsdpi.IsScheduledForDeferredDelete != nil {
6654		objectMap["isScheduledForDeferredDelete"] = avwsdpi.IsScheduledForDeferredDelete
6655	}
6656	if avwsdpi.DeferredDeleteTimeRemaining != nil {
6657		objectMap["deferredDeleteTimeRemaining"] = avwsdpi.DeferredDeleteTimeRemaining
6658	}
6659	if avwsdpi.IsDeferredDeleteScheduleUpcoming != nil {
6660		objectMap["isDeferredDeleteScheduleUpcoming"] = avwsdpi.IsDeferredDeleteScheduleUpcoming
6661	}
6662	if avwsdpi.IsRehydrate != nil {
6663		objectMap["isRehydrate"] = avwsdpi.IsRehydrate
6664	}
6665	if avwsdpi.ProtectedItemType != "" {
6666		objectMap["protectedItemType"] = avwsdpi.ProtectedItemType
6667	}
6668	return json.Marshal(objectMap)
6669}
6670
6671// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6672func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
6673	return nil, false
6674}
6675
6676// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6677func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
6678	return nil, false
6679}
6680
6681// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6682func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
6683	return nil, false
6684}
6685
6686// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6687func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
6688	return nil, false
6689}
6690
6691// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6692func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
6693	return nil, false
6694}
6695
6696// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6697func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
6698	return nil, false
6699}
6700
6701// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6702func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
6703	return nil, false
6704}
6705
6706// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6707func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
6708	return &avwsdpi, true
6709}
6710
6711// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6712func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
6713	return nil, false
6714}
6715
6716// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6717func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
6718	return nil, false
6719}
6720
6721// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6722func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
6723	return &avwsdpi, true
6724}
6725
6726// AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6727func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
6728	return nil, false
6729}
6730
6731// AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6732func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
6733	return nil, false
6734}
6735
6736// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6737func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
6738	return nil, false
6739}
6740
6741// AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6742func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
6743	return nil, false
6744}
6745
6746// AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
6747func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
6748	return &avwsdpi, true
6749}
6750
6751// AzureVMWorkloadSQLDatabaseWorkloadItem azure VM workload-specific workload item representing SQL
6752// Database.
6753type AzureVMWorkloadSQLDatabaseWorkloadItem struct {
6754	// ParentName - Name for instance or AG
6755	ParentName *string `json:"parentName,omitempty"`
6756	// ServerName - Host/Cluster Name for instance or AG
6757	ServerName *string `json:"serverName,omitempty"`
6758	// IsAutoProtectable - Indicates if workload item is auto-protectable
6759	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
6760	// Subinquireditemcount - For instance or AG, indicates number of DB's present
6761	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
6762	// SubWorkloadItemCount - For instance or AG, indicates number of DB's to be protected
6763	SubWorkloadItemCount *int32 `json:"subWorkloadItemCount,omitempty"`
6764	// BackupManagementType - Type of backup management to backup an item.
6765	BackupManagementType *string `json:"backupManagementType,omitempty"`
6766	// WorkloadType - Type of workload for the backup management
6767	WorkloadType *string `json:"workloadType,omitempty"`
6768	// FriendlyName - Friendly name of the backup item.
6769	FriendlyName *string `json:"friendlyName,omitempty"`
6770	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
6771	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
6772	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
6773	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
6774}
6775
6776// MarshalJSON is the custom marshaler for AzureVMWorkloadSQLDatabaseWorkloadItem.
6777func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) MarshalJSON() ([]byte, error) {
6778	avwsdwi.WorkloadItemType = WorkloadItemTypeSQLDataBase1
6779	objectMap := make(map[string]interface{})
6780	if avwsdwi.ParentName != nil {
6781		objectMap["parentName"] = avwsdwi.ParentName
6782	}
6783	if avwsdwi.ServerName != nil {
6784		objectMap["serverName"] = avwsdwi.ServerName
6785	}
6786	if avwsdwi.IsAutoProtectable != nil {
6787		objectMap["isAutoProtectable"] = avwsdwi.IsAutoProtectable
6788	}
6789	if avwsdwi.Subinquireditemcount != nil {
6790		objectMap["subinquireditemcount"] = avwsdwi.Subinquireditemcount
6791	}
6792	if avwsdwi.SubWorkloadItemCount != nil {
6793		objectMap["subWorkloadItemCount"] = avwsdwi.SubWorkloadItemCount
6794	}
6795	if avwsdwi.BackupManagementType != nil {
6796		objectMap["backupManagementType"] = avwsdwi.BackupManagementType
6797	}
6798	if avwsdwi.WorkloadType != nil {
6799		objectMap["workloadType"] = avwsdwi.WorkloadType
6800	}
6801	if avwsdwi.FriendlyName != nil {
6802		objectMap["friendlyName"] = avwsdwi.FriendlyName
6803	}
6804	if avwsdwi.ProtectionState != "" {
6805		objectMap["protectionState"] = avwsdwi.ProtectionState
6806	}
6807	if avwsdwi.WorkloadItemType != "" {
6808		objectMap["workloadItemType"] = avwsdwi.WorkloadItemType
6809	}
6810	return json.Marshal(objectMap)
6811}
6812
6813// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6814func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
6815	return nil, false
6816}
6817
6818// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6819func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
6820	return &avwsdwi, true
6821}
6822
6823// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6824func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
6825	return nil, false
6826}
6827
6828// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6829func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
6830	return nil, false
6831}
6832
6833// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6834func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
6835	return nil, false
6836}
6837
6838// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6839func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
6840	return nil, false
6841}
6842
6843// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6844func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
6845	return &avwsdwi, true
6846}
6847
6848// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6849func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
6850	return nil, false
6851}
6852
6853// AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6854func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
6855	return nil, false
6856}
6857
6858// AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
6859func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
6860	return &avwsdwi, true
6861}
6862
6863// AzureVMWorkloadSQLInstanceProtectableItem azure VM workload-specific protectable item representing SQL
6864// Instance.
6865type AzureVMWorkloadSQLInstanceProtectableItem struct {
6866	// ParentName - Name for instance or AG
6867	ParentName *string `json:"parentName,omitempty"`
6868	// ParentUniqueName - Parent Unique Name is added to provide the service formatted URI Name of the Parent
6869	// Only Applicable for data bases where the parent would be either Instance or a SQL AG.
6870	ParentUniqueName *string `json:"parentUniqueName,omitempty"`
6871	// ServerName - Host/Cluster Name for instance or AG
6872	ServerName *string `json:"serverName,omitempty"`
6873	// IsAutoProtectable - Indicates if protectable item is auto-protectable
6874	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
6875	// IsAutoProtected - Indicates if protectable item is auto-protected
6876	IsAutoProtected *bool `json:"isAutoProtected,omitempty"`
6877	// Subinquireditemcount - For instance or AG, indicates number of DB's present
6878	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
6879	// Subprotectableitemcount - For instance or AG, indicates number of DB's to be protected
6880	Subprotectableitemcount *int32 `json:"subprotectableitemcount,omitempty"`
6881	// Prebackupvalidation - Pre-backup validation for protectable objects
6882	Prebackupvalidation *PreBackupValidation `json:"prebackupvalidation,omitempty"`
6883	// BackupManagementType - Type of backup management to backup an item.
6884	BackupManagementType *string `json:"backupManagementType,omitempty"`
6885	// WorkloadType - Type of workload for the backup management
6886	WorkloadType *string `json:"workloadType,omitempty"`
6887	// FriendlyName - Friendly name of the backup item.
6888	FriendlyName *string `json:"friendlyName,omitempty"`
6889	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
6890	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
6891	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
6892	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
6893}
6894
6895// MarshalJSON is the custom marshaler for AzureVMWorkloadSQLInstanceProtectableItem.
6896func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) MarshalJSON() ([]byte, error) {
6897	avwsipi.ProtectableItemType = ProtectableItemTypeSQLInstance
6898	objectMap := make(map[string]interface{})
6899	if avwsipi.ParentName != nil {
6900		objectMap["parentName"] = avwsipi.ParentName
6901	}
6902	if avwsipi.ParentUniqueName != nil {
6903		objectMap["parentUniqueName"] = avwsipi.ParentUniqueName
6904	}
6905	if avwsipi.ServerName != nil {
6906		objectMap["serverName"] = avwsipi.ServerName
6907	}
6908	if avwsipi.IsAutoProtectable != nil {
6909		objectMap["isAutoProtectable"] = avwsipi.IsAutoProtectable
6910	}
6911	if avwsipi.IsAutoProtected != nil {
6912		objectMap["isAutoProtected"] = avwsipi.IsAutoProtected
6913	}
6914	if avwsipi.Subinquireditemcount != nil {
6915		objectMap["subinquireditemcount"] = avwsipi.Subinquireditemcount
6916	}
6917	if avwsipi.Subprotectableitemcount != nil {
6918		objectMap["subprotectableitemcount"] = avwsipi.Subprotectableitemcount
6919	}
6920	if avwsipi.Prebackupvalidation != nil {
6921		objectMap["prebackupvalidation"] = avwsipi.Prebackupvalidation
6922	}
6923	if avwsipi.BackupManagementType != nil {
6924		objectMap["backupManagementType"] = avwsipi.BackupManagementType
6925	}
6926	if avwsipi.WorkloadType != nil {
6927		objectMap["workloadType"] = avwsipi.WorkloadType
6928	}
6929	if avwsipi.FriendlyName != nil {
6930		objectMap["friendlyName"] = avwsipi.FriendlyName
6931	}
6932	if avwsipi.ProtectionState != "" {
6933		objectMap["protectionState"] = avwsipi.ProtectionState
6934	}
6935	if avwsipi.ProtectableItemType != "" {
6936		objectMap["protectableItemType"] = avwsipi.ProtectableItemType
6937	}
6938	return json.Marshal(objectMap)
6939}
6940
6941// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6942func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
6943	return nil, false
6944}
6945
6946// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6947func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
6948	return nil, false
6949}
6950
6951// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6952func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
6953	return nil, false
6954}
6955
6956// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6957func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
6958	return nil, false
6959}
6960
6961// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6962func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
6963	return &avwsipi, true
6964}
6965
6966// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6967func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
6968	return nil, false
6969}
6970
6971// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6972func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
6973	return nil, false
6974}
6975
6976// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6977func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
6978	return nil, false
6979}
6980
6981// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6982func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
6983	return nil, false
6984}
6985
6986// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6987func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
6988	return nil, false
6989}
6990
6991// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6992func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
6993	return &avwsipi, true
6994}
6995
6996// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
6997func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
6998	return nil, false
6999}
7000
7001// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
7002func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
7003	return nil, false
7004}
7005
7006// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
7007func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
7008	return nil, false
7009}
7010
7011// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
7012func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
7013	return &avwsipi, true
7014}
7015
7016// AzureVMWorkloadSQLInstanceWorkloadItem azure VM workload-specific workload item representing SQL
7017// Instance.
7018type AzureVMWorkloadSQLInstanceWorkloadItem struct {
7019	// DataDirectoryPaths - Data Directory Paths for default directories
7020	DataDirectoryPaths *[]SQLDataDirectory `json:"dataDirectoryPaths,omitempty"`
7021	// ParentName - Name for instance or AG
7022	ParentName *string `json:"parentName,omitempty"`
7023	// ServerName - Host/Cluster Name for instance or AG
7024	ServerName *string `json:"serverName,omitempty"`
7025	// IsAutoProtectable - Indicates if workload item is auto-protectable
7026	IsAutoProtectable *bool `json:"isAutoProtectable,omitempty"`
7027	// Subinquireditemcount - For instance or AG, indicates number of DB's present
7028	Subinquireditemcount *int32 `json:"subinquireditemcount,omitempty"`
7029	// SubWorkloadItemCount - For instance or AG, indicates number of DB's to be protected
7030	SubWorkloadItemCount *int32 `json:"subWorkloadItemCount,omitempty"`
7031	// BackupManagementType - Type of backup management to backup an item.
7032	BackupManagementType *string `json:"backupManagementType,omitempty"`
7033	// WorkloadType - Type of workload for the backup management
7034	WorkloadType *string `json:"workloadType,omitempty"`
7035	// FriendlyName - Friendly name of the backup item.
7036	FriendlyName *string `json:"friendlyName,omitempty"`
7037	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
7038	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
7039	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
7040	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
7041}
7042
7043// MarshalJSON is the custom marshaler for AzureVMWorkloadSQLInstanceWorkloadItem.
7044func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) MarshalJSON() ([]byte, error) {
7045	avwsiwi.WorkloadItemType = WorkloadItemTypeSQLInstance1
7046	objectMap := make(map[string]interface{})
7047	if avwsiwi.DataDirectoryPaths != nil {
7048		objectMap["dataDirectoryPaths"] = avwsiwi.DataDirectoryPaths
7049	}
7050	if avwsiwi.ParentName != nil {
7051		objectMap["parentName"] = avwsiwi.ParentName
7052	}
7053	if avwsiwi.ServerName != nil {
7054		objectMap["serverName"] = avwsiwi.ServerName
7055	}
7056	if avwsiwi.IsAutoProtectable != nil {
7057		objectMap["isAutoProtectable"] = avwsiwi.IsAutoProtectable
7058	}
7059	if avwsiwi.Subinquireditemcount != nil {
7060		objectMap["subinquireditemcount"] = avwsiwi.Subinquireditemcount
7061	}
7062	if avwsiwi.SubWorkloadItemCount != nil {
7063		objectMap["subWorkloadItemCount"] = avwsiwi.SubWorkloadItemCount
7064	}
7065	if avwsiwi.BackupManagementType != nil {
7066		objectMap["backupManagementType"] = avwsiwi.BackupManagementType
7067	}
7068	if avwsiwi.WorkloadType != nil {
7069		objectMap["workloadType"] = avwsiwi.WorkloadType
7070	}
7071	if avwsiwi.FriendlyName != nil {
7072		objectMap["friendlyName"] = avwsiwi.FriendlyName
7073	}
7074	if avwsiwi.ProtectionState != "" {
7075		objectMap["protectionState"] = avwsiwi.ProtectionState
7076	}
7077	if avwsiwi.WorkloadItemType != "" {
7078		objectMap["workloadItemType"] = avwsiwi.WorkloadItemType
7079	}
7080	return json.Marshal(objectMap)
7081}
7082
7083// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7084func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
7085	return nil, false
7086}
7087
7088// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7089func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
7090	return &avwsiwi, true
7091}
7092
7093// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7094func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
7095	return nil, false
7096}
7097
7098// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7099func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
7100	return nil, false
7101}
7102
7103// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7104func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
7105	return nil, false
7106}
7107
7108// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7109func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
7110	return nil, false
7111}
7112
7113// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7114func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
7115	return nil, false
7116}
7117
7118// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7119func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
7120	return &avwsiwi, true
7121}
7122
7123// AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7124func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
7125	return nil, false
7126}
7127
7128// AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
7129func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
7130	return &avwsiwi, true
7131}
7132
7133// BasicAzureWorkloadAutoProtectionIntent azure Recovery Services Vault specific protection intent item.
7134type BasicAzureWorkloadAutoProtectionIntent interface {
7135	AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool)
7136	AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool)
7137}
7138
7139// AzureWorkloadAutoProtectionIntent azure Recovery Services Vault specific protection intent item.
7140type AzureWorkloadAutoProtectionIntent struct {
7141	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
7142	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
7143	// SourceResourceID - ARM ID of the resource to be backed up.
7144	SourceResourceID *string `json:"sourceResourceId,omitempty"`
7145	// ItemID - ID of the item which is getting protected, In case of Azure Vm , it is ProtectedItemId
7146	ItemID *string `json:"itemId,omitempty"`
7147	// PolicyID - ID of the backup policy with which this item is backed up.
7148	PolicyID *string `json:"policyId,omitempty"`
7149	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
7150	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
7151	// ProtectionIntentItemType - Possible values include: 'ProtectionIntentItemTypeProtectionIntent', 'ProtectionIntentItemTypeRecoveryServiceVaultItem', 'ProtectionIntentItemTypeAzureResourceItem', 'ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent', 'ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent'
7152	ProtectionIntentItemType ProtectionIntentItemType `json:"protectionIntentItemType,omitempty"`
7153}
7154
7155func unmarshalBasicAzureWorkloadAutoProtectionIntent(body []byte) (BasicAzureWorkloadAutoProtectionIntent, error) {
7156	var m map[string]interface{}
7157	err := json.Unmarshal(body, &m)
7158	if err != nil {
7159		return nil, err
7160	}
7161
7162	switch m["protectionIntentItemType"] {
7163	case string(ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent):
7164		var awsapi AzureWorkloadSQLAutoProtectionIntent
7165		err := json.Unmarshal(body, &awsapi)
7166		return awsapi, err
7167	default:
7168		var awapi AzureWorkloadAutoProtectionIntent
7169		err := json.Unmarshal(body, &awapi)
7170		return awapi, err
7171	}
7172}
7173func unmarshalBasicAzureWorkloadAutoProtectionIntentArray(body []byte) ([]BasicAzureWorkloadAutoProtectionIntent, error) {
7174	var rawMessages []*json.RawMessage
7175	err := json.Unmarshal(body, &rawMessages)
7176	if err != nil {
7177		return nil, err
7178	}
7179
7180	awapiArray := make([]BasicAzureWorkloadAutoProtectionIntent, len(rawMessages))
7181
7182	for index, rawMessage := range rawMessages {
7183		awapi, err := unmarshalBasicAzureWorkloadAutoProtectionIntent(*rawMessage)
7184		if err != nil {
7185			return nil, err
7186		}
7187		awapiArray[index] = awapi
7188	}
7189	return awapiArray, nil
7190}
7191
7192// MarshalJSON is the custom marshaler for AzureWorkloadAutoProtectionIntent.
7193func (awapi AzureWorkloadAutoProtectionIntent) MarshalJSON() ([]byte, error) {
7194	awapi.ProtectionIntentItemType = ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent
7195	objectMap := make(map[string]interface{})
7196	if awapi.BackupManagementType != "" {
7197		objectMap["backupManagementType"] = awapi.BackupManagementType
7198	}
7199	if awapi.SourceResourceID != nil {
7200		objectMap["sourceResourceId"] = awapi.SourceResourceID
7201	}
7202	if awapi.ItemID != nil {
7203		objectMap["itemId"] = awapi.ItemID
7204	}
7205	if awapi.PolicyID != nil {
7206		objectMap["policyId"] = awapi.PolicyID
7207	}
7208	if awapi.ProtectionState != "" {
7209		objectMap["protectionState"] = awapi.ProtectionState
7210	}
7211	if awapi.ProtectionIntentItemType != "" {
7212		objectMap["protectionIntentItemType"] = awapi.ProtectionIntentItemType
7213	}
7214	return json.Marshal(objectMap)
7215}
7216
7217// AsAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7218func (awapi AzureWorkloadAutoProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
7219	return nil, false
7220}
7221
7222// AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7223func (awapi AzureWorkloadAutoProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
7224	return &awapi, true
7225}
7226
7227// AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7228func (awapi AzureWorkloadAutoProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
7229	return nil, false
7230}
7231
7232// AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7233func (awapi AzureWorkloadAutoProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
7234	return &awapi, true
7235}
7236
7237// AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7238func (awapi AzureWorkloadAutoProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
7239	return &awapi, true
7240}
7241
7242// AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7243func (awapi AzureWorkloadAutoProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
7244	return nil, false
7245}
7246
7247// AsProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7248func (awapi AzureWorkloadAutoProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
7249	return nil, false
7250}
7251
7252// AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
7253func (awapi AzureWorkloadAutoProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
7254	return &awapi, true
7255}
7256
7257// AzureWorkloadBackupRequest azureWorkload workload-specific backup request.
7258type AzureWorkloadBackupRequest struct {
7259	// BackupType - Type of backup, viz. Full, Differential, Log or CopyOnlyFull. Possible values include: 'TypeEnumInvalid', 'TypeEnumFull', 'TypeEnumDifferential', 'TypeEnumLog', 'TypeEnumCopyOnlyFull'
7260	BackupType TypeEnum `json:"backupType,omitempty"`
7261	// EnableCompression - Bool for Compression setting
7262	EnableCompression *bool `json:"enableCompression,omitempty"`
7263	// RecoveryPointExpiryTimeInUTC - Backup copy will expire after the time specified (UTC).
7264	RecoveryPointExpiryTimeInUTC *date.Time `json:"recoveryPointExpiryTimeInUTC,omitempty"`
7265	// ObjectType - Possible values include: 'ObjectTypeBackupRequest', 'ObjectTypeAzureFileShareBackupRequest', 'ObjectTypeAzureWorkloadBackupRequest', 'ObjectTypeIaasVMBackupRequest'
7266	ObjectType ObjectTypeBasicRequest `json:"objectType,omitempty"`
7267}
7268
7269// MarshalJSON is the custom marshaler for AzureWorkloadBackupRequest.
7270func (awbr AzureWorkloadBackupRequest) MarshalJSON() ([]byte, error) {
7271	awbr.ObjectType = ObjectTypeAzureWorkloadBackupRequest
7272	objectMap := make(map[string]interface{})
7273	if awbr.BackupType != "" {
7274		objectMap["backupType"] = awbr.BackupType
7275	}
7276	if awbr.EnableCompression != nil {
7277		objectMap["enableCompression"] = awbr.EnableCompression
7278	}
7279	if awbr.RecoveryPointExpiryTimeInUTC != nil {
7280		objectMap["recoveryPointExpiryTimeInUTC"] = awbr.RecoveryPointExpiryTimeInUTC
7281	}
7282	if awbr.ObjectType != "" {
7283		objectMap["objectType"] = awbr.ObjectType
7284	}
7285	return json.Marshal(objectMap)
7286}
7287
7288// AsAzureFileShareBackupRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
7289func (awbr AzureWorkloadBackupRequest) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
7290	return nil, false
7291}
7292
7293// AsAzureWorkloadBackupRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
7294func (awbr AzureWorkloadBackupRequest) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
7295	return &awbr, true
7296}
7297
7298// AsIaasVMBackupRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
7299func (awbr AzureWorkloadBackupRequest) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
7300	return nil, false
7301}
7302
7303// AsRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
7304func (awbr AzureWorkloadBackupRequest) AsRequest() (*Request, bool) {
7305	return nil, false
7306}
7307
7308// AsBasicRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
7309func (awbr AzureWorkloadBackupRequest) AsBasicRequest() (BasicRequest, bool) {
7310	return &awbr, true
7311}
7312
7313// BasicAzureWorkloadContainer container for the workloads running inside Azure Compute or Classic Compute.
7314type BasicAzureWorkloadContainer interface {
7315	AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool)
7316	AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool)
7317	AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool)
7318}
7319
7320// AzureWorkloadContainer container for the workloads running inside Azure Compute or Classic Compute.
7321type AzureWorkloadContainer struct {
7322	// SourceResourceID - ARM ID of the virtual machine represented by this Azure Workload Container
7323	SourceResourceID *string `json:"sourceResourceId,omitempty"`
7324	// LastUpdatedTime - Time stamp when this container was updated.
7325	LastUpdatedTime *date.Time `json:"lastUpdatedTime,omitempty"`
7326	// ExtendedInfo - Additional details of a workload container.
7327	ExtendedInfo *AzureWorkloadContainerExtendedInfo `json:"extendedInfo,omitempty"`
7328	// WorkloadType - Workload type for which registration was sent. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
7329	WorkloadType WorkloadType `json:"workloadType,omitempty"`
7330	// OperationType - Re-Do Operation. Possible values include: 'OperationTypeInvalid', 'OperationTypeRegister', 'OperationTypeReregister'
7331	OperationType OperationType `json:"operationType,omitempty"`
7332	// FriendlyName - Friendly name of the container.
7333	FriendlyName *string `json:"friendlyName,omitempty"`
7334	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
7335	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
7336	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
7337	RegistrationStatus *string `json:"registrationStatus,omitempty"`
7338	// HealthStatus - Status of health of the container.
7339	HealthStatus *string `json:"healthStatus,omitempty"`
7340	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
7341	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
7342}
7343
7344func unmarshalBasicAzureWorkloadContainer(body []byte) (BasicAzureWorkloadContainer, error) {
7345	var m map[string]interface{}
7346	err := json.Unmarshal(body, &m)
7347	if err != nil {
7348		return nil, err
7349	}
7350
7351	switch m["containerType"] {
7352	case string(ContainerTypeSQLAGWorkLoadContainer1):
7353		var aswcpc AzureSQLAGWorkloadContainerProtectionContainer
7354		err := json.Unmarshal(body, &aswcpc)
7355		return aswcpc, err
7356	case string(ContainerTypeVMAppContainer1):
7357		var avacpc AzureVMAppContainerProtectionContainer
7358		err := json.Unmarshal(body, &avacpc)
7359		return avacpc, err
7360	default:
7361		var awc AzureWorkloadContainer
7362		err := json.Unmarshal(body, &awc)
7363		return awc, err
7364	}
7365}
7366func unmarshalBasicAzureWorkloadContainerArray(body []byte) ([]BasicAzureWorkloadContainer, error) {
7367	var rawMessages []*json.RawMessage
7368	err := json.Unmarshal(body, &rawMessages)
7369	if err != nil {
7370		return nil, err
7371	}
7372
7373	awcArray := make([]BasicAzureWorkloadContainer, len(rawMessages))
7374
7375	for index, rawMessage := range rawMessages {
7376		awc, err := unmarshalBasicAzureWorkloadContainer(*rawMessage)
7377		if err != nil {
7378			return nil, err
7379		}
7380		awcArray[index] = awc
7381	}
7382	return awcArray, nil
7383}
7384
7385// MarshalJSON is the custom marshaler for AzureWorkloadContainer.
7386func (awc AzureWorkloadContainer) MarshalJSON() ([]byte, error) {
7387	awc.ContainerType = ContainerTypeAzureWorkloadContainer
7388	objectMap := make(map[string]interface{})
7389	if awc.SourceResourceID != nil {
7390		objectMap["sourceResourceId"] = awc.SourceResourceID
7391	}
7392	if awc.LastUpdatedTime != nil {
7393		objectMap["lastUpdatedTime"] = awc.LastUpdatedTime
7394	}
7395	if awc.ExtendedInfo != nil {
7396		objectMap["extendedInfo"] = awc.ExtendedInfo
7397	}
7398	if awc.WorkloadType != "" {
7399		objectMap["workloadType"] = awc.WorkloadType
7400	}
7401	if awc.OperationType != "" {
7402		objectMap["operationType"] = awc.OperationType
7403	}
7404	if awc.FriendlyName != nil {
7405		objectMap["friendlyName"] = awc.FriendlyName
7406	}
7407	if awc.BackupManagementType != "" {
7408		objectMap["backupManagementType"] = awc.BackupManagementType
7409	}
7410	if awc.RegistrationStatus != nil {
7411		objectMap["registrationStatus"] = awc.RegistrationStatus
7412	}
7413	if awc.HealthStatus != nil {
7414		objectMap["healthStatus"] = awc.HealthStatus
7415	}
7416	if awc.ContainerType != "" {
7417		objectMap["containerType"] = awc.ContainerType
7418	}
7419	return json.Marshal(objectMap)
7420}
7421
7422// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7423func (awc AzureWorkloadContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
7424	return nil, false
7425}
7426
7427// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7428func (awc AzureWorkloadContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
7429	return nil, false
7430}
7431
7432// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7433func (awc AzureWorkloadContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
7434	return nil, false
7435}
7436
7437// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7438func (awc AzureWorkloadContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
7439	return nil, false
7440}
7441
7442// AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7443func (awc AzureWorkloadContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
7444	return nil, false
7445}
7446
7447// AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7448func (awc AzureWorkloadContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
7449	return nil, false
7450}
7451
7452// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7453func (awc AzureWorkloadContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
7454	return nil, false
7455}
7456
7457// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7458func (awc AzureWorkloadContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
7459	return &awc, true
7460}
7461
7462// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7463func (awc AzureWorkloadContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
7464	return &awc, true
7465}
7466
7467// AsDpmContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7468func (awc AzureWorkloadContainer) AsDpmContainer() (*DpmContainer, bool) {
7469	return nil, false
7470}
7471
7472// AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7473func (awc AzureWorkloadContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
7474	return nil, false
7475}
7476
7477// AsGenericContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7478func (awc AzureWorkloadContainer) AsGenericContainer() (*GenericContainer, bool) {
7479	return nil, false
7480}
7481
7482// AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7483func (awc AzureWorkloadContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
7484	return nil, false
7485}
7486
7487// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7488func (awc AzureWorkloadContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
7489	return nil, false
7490}
7491
7492// AsMabContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7493func (awc AzureWorkloadContainer) AsMabContainer() (*MabContainer, bool) {
7494	return nil, false
7495}
7496
7497// AsProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7498func (awc AzureWorkloadContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
7499	return nil, false
7500}
7501
7502// AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
7503func (awc AzureWorkloadContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
7504	return &awc, true
7505}
7506
7507// AzureWorkloadContainerExtendedInfo extended information of the container.
7508type AzureWorkloadContainerExtendedInfo struct {
7509	// HostServerName - Host Os Name in case of Stand Alone and Cluster Name in case of distributed container.
7510	HostServerName *string `json:"hostServerName,omitempty"`
7511	// InquiryInfo - Inquiry Status for the container.
7512	InquiryInfo *InquiryInfo `json:"inquiryInfo,omitempty"`
7513	// NodesList - List of the nodes in case of distributed container.
7514	NodesList *[]DistributedNodesInfo `json:"nodesList,omitempty"`
7515}
7516
7517// AzureWorkloadErrorInfo azure storage specific error information
7518type AzureWorkloadErrorInfo struct {
7519	// ErrorCode - Error code.
7520	ErrorCode *int32 `json:"errorCode,omitempty"`
7521	// ErrorString - Localized error string.
7522	ErrorString *string `json:"errorString,omitempty"`
7523	// ErrorTitle - Title: Typically, the entity that the error pertains to.
7524	ErrorTitle *string `json:"errorTitle,omitempty"`
7525	// Recommendations - List of localized recommendations for above error code.
7526	Recommendations *[]string `json:"recommendations,omitempty"`
7527	// AdditionalDetails - Additional details for above error code.
7528	AdditionalDetails *string `json:"additionalDetails,omitempty"`
7529}
7530
7531// AzureWorkloadJob azure storage specific job.
7532type AzureWorkloadJob struct {
7533	// WorkloadType - Workload type of the job
7534	WorkloadType *string `json:"workloadType,omitempty"`
7535	// Duration - Time elapsed during the execution of this job.
7536	Duration *string `json:"duration,omitempty"`
7537	// ActionsInfo - Gets or sets the state/actions applicable on this job like cancel/retry.
7538	ActionsInfo *[]JobSupportedAction `json:"actionsInfo,omitempty"`
7539	// ErrorDetails - Error details on execution of this job.
7540	ErrorDetails *[]AzureWorkloadErrorInfo `json:"errorDetails,omitempty"`
7541	// ExtendedInfo - Additional information about the job.
7542	ExtendedInfo *AzureWorkloadJobExtendedInfo `json:"extendedInfo,omitempty"`
7543	// EntityFriendlyName - Friendly name of the entity on which the current job is executing.
7544	EntityFriendlyName *string `json:"entityFriendlyName,omitempty"`
7545	// BackupManagementType - Backup management type to execute the current job. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
7546	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
7547	// Operation - The operation name.
7548	Operation *string `json:"operation,omitempty"`
7549	// Status - Job status.
7550	Status *string `json:"status,omitempty"`
7551	// StartTime - The start time.
7552	StartTime *date.Time `json:"startTime,omitempty"`
7553	// EndTime - The end time.
7554	EndTime *date.Time `json:"endTime,omitempty"`
7555	// ActivityID - ActivityId of job.
7556	ActivityID *string `json:"activityId,omitempty"`
7557	// JobType - Possible values include: 'JobTypeJob', 'JobTypeAzureIaaSVMJob', 'JobTypeAzureStorageJob', 'JobTypeAzureWorkloadJob', 'JobTypeDpmJob', 'JobTypeMabJob'
7558	JobType JobType `json:"jobType,omitempty"`
7559}
7560
7561// MarshalJSON is the custom marshaler for AzureWorkloadJob.
7562func (awj AzureWorkloadJob) MarshalJSON() ([]byte, error) {
7563	awj.JobType = JobTypeAzureWorkloadJob
7564	objectMap := make(map[string]interface{})
7565	if awj.WorkloadType != nil {
7566		objectMap["workloadType"] = awj.WorkloadType
7567	}
7568	if awj.Duration != nil {
7569		objectMap["duration"] = awj.Duration
7570	}
7571	if awj.ActionsInfo != nil {
7572		objectMap["actionsInfo"] = awj.ActionsInfo
7573	}
7574	if awj.ErrorDetails != nil {
7575		objectMap["errorDetails"] = awj.ErrorDetails
7576	}
7577	if awj.ExtendedInfo != nil {
7578		objectMap["extendedInfo"] = awj.ExtendedInfo
7579	}
7580	if awj.EntityFriendlyName != nil {
7581		objectMap["entityFriendlyName"] = awj.EntityFriendlyName
7582	}
7583	if awj.BackupManagementType != "" {
7584		objectMap["backupManagementType"] = awj.BackupManagementType
7585	}
7586	if awj.Operation != nil {
7587		objectMap["operation"] = awj.Operation
7588	}
7589	if awj.Status != nil {
7590		objectMap["status"] = awj.Status
7591	}
7592	if awj.StartTime != nil {
7593		objectMap["startTime"] = awj.StartTime
7594	}
7595	if awj.EndTime != nil {
7596		objectMap["endTime"] = awj.EndTime
7597	}
7598	if awj.ActivityID != nil {
7599		objectMap["activityId"] = awj.ActivityID
7600	}
7601	if awj.JobType != "" {
7602		objectMap["jobType"] = awj.JobType
7603	}
7604	return json.Marshal(objectMap)
7605}
7606
7607// AsAzureIaaSVMJob is the BasicJob implementation for AzureWorkloadJob.
7608func (awj AzureWorkloadJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
7609	return nil, false
7610}
7611
7612// AsAzureStorageJob is the BasicJob implementation for AzureWorkloadJob.
7613func (awj AzureWorkloadJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
7614	return nil, false
7615}
7616
7617// AsAzureWorkloadJob is the BasicJob implementation for AzureWorkloadJob.
7618func (awj AzureWorkloadJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
7619	return &awj, true
7620}
7621
7622// AsDpmJob is the BasicJob implementation for AzureWorkloadJob.
7623func (awj AzureWorkloadJob) AsDpmJob() (*DpmJob, bool) {
7624	return nil, false
7625}
7626
7627// AsMabJob is the BasicJob implementation for AzureWorkloadJob.
7628func (awj AzureWorkloadJob) AsMabJob() (*MabJob, bool) {
7629	return nil, false
7630}
7631
7632// AsJob is the BasicJob implementation for AzureWorkloadJob.
7633func (awj AzureWorkloadJob) AsJob() (*Job, bool) {
7634	return nil, false
7635}
7636
7637// AsBasicJob is the BasicJob implementation for AzureWorkloadJob.
7638func (awj AzureWorkloadJob) AsBasicJob() (BasicJob, bool) {
7639	return &awj, true
7640}
7641
7642// AzureWorkloadJobExtendedInfo azure VM workload-specific additional information for job.
7643type AzureWorkloadJobExtendedInfo struct {
7644	// TasksList - List of tasks for this job
7645	TasksList *[]AzureWorkloadJobTaskDetails `json:"tasksList,omitempty"`
7646	// PropertyBag - Job properties.
7647	PropertyBag map[string]*string `json:"propertyBag"`
7648	// DynamicErrorMessage - Non localized error message on job execution.
7649	DynamicErrorMessage *string `json:"dynamicErrorMessage,omitempty"`
7650}
7651
7652// MarshalJSON is the custom marshaler for AzureWorkloadJobExtendedInfo.
7653func (awjei AzureWorkloadJobExtendedInfo) MarshalJSON() ([]byte, error) {
7654	objectMap := make(map[string]interface{})
7655	if awjei.TasksList != nil {
7656		objectMap["tasksList"] = awjei.TasksList
7657	}
7658	if awjei.PropertyBag != nil {
7659		objectMap["propertyBag"] = awjei.PropertyBag
7660	}
7661	if awjei.DynamicErrorMessage != nil {
7662		objectMap["dynamicErrorMessage"] = awjei.DynamicErrorMessage
7663	}
7664	return json.Marshal(objectMap)
7665}
7666
7667// AzureWorkloadJobTaskDetails azure VM workload specific job task details.
7668type AzureWorkloadJobTaskDetails struct {
7669	// TaskID - The task display name.
7670	TaskID *string `json:"taskId,omitempty"`
7671	// Status - The status.
7672	Status *string `json:"status,omitempty"`
7673}
7674
7675// BasicAzureWorkloadPointInTimeRecoveryPoint recovery point specific to PointInTime
7676type BasicAzureWorkloadPointInTimeRecoveryPoint interface {
7677	AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool)
7678	AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool)
7679}
7680
7681// AzureWorkloadPointInTimeRecoveryPoint recovery point specific to PointInTime
7682type AzureWorkloadPointInTimeRecoveryPoint struct {
7683	// TimeRanges - List of log ranges
7684	TimeRanges *[]PointInTimeRange `json:"timeRanges,omitempty"`
7685	// RecoveryPointTimeInUTC - READ-ONLY; UTC time at which recovery point was created
7686	RecoveryPointTimeInUTC *date.Time `json:"recoveryPointTimeInUTC,omitempty"`
7687	// Type - READ-ONLY; Type of restore point. Possible values include: 'RestorePointTypeInvalid', 'RestorePointTypeFull', 'RestorePointTypeLog', 'RestorePointTypeDifferential'
7688	Type RestorePointType `json:"type,omitempty"`
7689	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
7690	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
7691}
7692
7693func unmarshalBasicAzureWorkloadPointInTimeRecoveryPoint(body []byte) (BasicAzureWorkloadPointInTimeRecoveryPoint, error) {
7694	var m map[string]interface{}
7695	err := json.Unmarshal(body, &m)
7696	if err != nil {
7697		return nil, err
7698	}
7699
7700	switch m["objectType"] {
7701	case string(ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint):
7702		var awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint
7703		err := json.Unmarshal(body, &awshpitrp)
7704		return awshpitrp, err
7705	default:
7706		var awpitrp AzureWorkloadPointInTimeRecoveryPoint
7707		err := json.Unmarshal(body, &awpitrp)
7708		return awpitrp, err
7709	}
7710}
7711func unmarshalBasicAzureWorkloadPointInTimeRecoveryPointArray(body []byte) ([]BasicAzureWorkloadPointInTimeRecoveryPoint, error) {
7712	var rawMessages []*json.RawMessage
7713	err := json.Unmarshal(body, &rawMessages)
7714	if err != nil {
7715		return nil, err
7716	}
7717
7718	awpitrpArray := make([]BasicAzureWorkloadPointInTimeRecoveryPoint, len(rawMessages))
7719
7720	for index, rawMessage := range rawMessages {
7721		awpitrp, err := unmarshalBasicAzureWorkloadPointInTimeRecoveryPoint(*rawMessage)
7722		if err != nil {
7723			return nil, err
7724		}
7725		awpitrpArray[index] = awpitrp
7726	}
7727	return awpitrpArray, nil
7728}
7729
7730// MarshalJSON is the custom marshaler for AzureWorkloadPointInTimeRecoveryPoint.
7731func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) MarshalJSON() ([]byte, error) {
7732	awpitrp.ObjectType = ObjectTypeAzureWorkloadPointInTimeRecoveryPoint
7733	objectMap := make(map[string]interface{})
7734	if awpitrp.TimeRanges != nil {
7735		objectMap["timeRanges"] = awpitrp.TimeRanges
7736	}
7737	if awpitrp.ObjectType != "" {
7738		objectMap["objectType"] = awpitrp.ObjectType
7739	}
7740	return json.Marshal(objectMap)
7741}
7742
7743// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7744func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
7745	return nil, false
7746}
7747
7748// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7749func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
7750	return &awpitrp, true
7751}
7752
7753// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7754func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
7755	return &awpitrp, true
7756}
7757
7758// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7759func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
7760	return nil, false
7761}
7762
7763// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7764func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
7765	return &awpitrp, true
7766}
7767
7768// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7769func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
7770	return nil, false
7771}
7772
7773// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7774func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
7775	return nil, false
7776}
7777
7778// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7779func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
7780	return nil, false
7781}
7782
7783// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7784func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
7785	return nil, false
7786}
7787
7788// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7789func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
7790	return nil, false
7791}
7792
7793// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7794func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
7795	return nil, false
7796}
7797
7798// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7799func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
7800	return nil, false
7801}
7802
7803// AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7804func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
7805	return nil, false
7806}
7807
7808// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
7809func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
7810	return &awpitrp, true
7811}
7812
7813// AzureWorkloadPointInTimeRestoreRequest azureWorkload SAP Hana -specific restore. Specifically for
7814// PointInTime/Log restore
7815type AzureWorkloadPointInTimeRestoreRequest struct {
7816	// PointInTime - PointInTime value
7817	PointInTime *date.Time `json:"pointInTime,omitempty"`
7818	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
7819	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
7820	// SourceResourceID - Fully qualified ARM ID of the VM on which workload that was running is being recovered.
7821	SourceResourceID *string `json:"sourceResourceId,omitempty"`
7822	// PropertyBag - Workload specific property bag.
7823	PropertyBag map[string]*string `json:"propertyBag"`
7824	// TargetInfo - Details of target database
7825	TargetInfo *TargetRestoreInfo `json:"targetInfo,omitempty"`
7826	// RecoveryMode - Defines whether the current recovery mode is file restore or database restore. Possible values include: 'RecoveryModeInvalid', 'RecoveryModeFileRecovery', 'RecoveryModeWorkloadRecovery'
7827	RecoveryMode RecoveryMode `json:"recoveryMode,omitempty"`
7828	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
7829	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
7830}
7831
7832// MarshalJSON is the custom marshaler for AzureWorkloadPointInTimeRestoreRequest.
7833func (awpitrr AzureWorkloadPointInTimeRestoreRequest) MarshalJSON() ([]byte, error) {
7834	awpitrr.ObjectType = ObjectTypeAzureWorkloadPointInTimeRestoreRequest
7835	objectMap := make(map[string]interface{})
7836	if awpitrr.PointInTime != nil {
7837		objectMap["pointInTime"] = awpitrr.PointInTime
7838	}
7839	if awpitrr.RecoveryType != "" {
7840		objectMap["recoveryType"] = awpitrr.RecoveryType
7841	}
7842	if awpitrr.SourceResourceID != nil {
7843		objectMap["sourceResourceId"] = awpitrr.SourceResourceID
7844	}
7845	if awpitrr.PropertyBag != nil {
7846		objectMap["propertyBag"] = awpitrr.PropertyBag
7847	}
7848	if awpitrr.TargetInfo != nil {
7849		objectMap["targetInfo"] = awpitrr.TargetInfo
7850	}
7851	if awpitrr.RecoveryMode != "" {
7852		objectMap["recoveryMode"] = awpitrr.RecoveryMode
7853	}
7854	if awpitrr.ObjectType != "" {
7855		objectMap["objectType"] = awpitrr.ObjectType
7856	}
7857	return json.Marshal(objectMap)
7858}
7859
7860// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7861func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
7862	return nil, false
7863}
7864
7865// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7866func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
7867	return &awpitrr, true
7868}
7869
7870// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7871func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
7872	return nil, false
7873}
7874
7875// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7876func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
7877	return &awpitrr, true
7878}
7879
7880// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7881func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
7882	return nil, false
7883}
7884
7885// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7886func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
7887	return nil, false
7888}
7889
7890// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7891func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
7892	return nil, false
7893}
7894
7895// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7896func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
7897	return nil, false
7898}
7899
7900// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7901func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
7902	return nil, false
7903}
7904
7905// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7906func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
7907	return nil, false
7908}
7909
7910// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7911func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
7912	return nil, false
7913}
7914
7915// AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7916func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
7917	return nil, false
7918}
7919
7920// AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
7921func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
7922	return &awpitrr, true
7923}
7924
7925// BasicAzureWorkloadRecoveryPoint workload specific recovery point, specifically encapsulates full/diff recovery point
7926type BasicAzureWorkloadRecoveryPoint interface {
7927	AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool)
7928	AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool)
7929	AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool)
7930	AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool)
7931	AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool)
7932	AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool)
7933	AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool)
7934	AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool)
7935}
7936
7937// AzureWorkloadRecoveryPoint workload specific recovery point, specifically encapsulates full/diff recovery
7938// point
7939type AzureWorkloadRecoveryPoint struct {
7940	// RecoveryPointTimeInUTC - READ-ONLY; UTC time at which recovery point was created
7941	RecoveryPointTimeInUTC *date.Time `json:"recoveryPointTimeInUTC,omitempty"`
7942	// Type - READ-ONLY; Type of restore point. Possible values include: 'RestorePointTypeInvalid', 'RestorePointTypeFull', 'RestorePointTypeLog', 'RestorePointTypeDifferential'
7943	Type RestorePointType `json:"type,omitempty"`
7944	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
7945	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
7946}
7947
7948func unmarshalBasicAzureWorkloadRecoveryPoint(body []byte) (BasicAzureWorkloadRecoveryPoint, error) {
7949	var m map[string]interface{}
7950	err := json.Unmarshal(body, &m)
7951	if err != nil {
7952		return nil, err
7953	}
7954
7955	switch m["objectType"] {
7956	case string(ObjectTypeAzureWorkloadPointInTimeRecoveryPoint):
7957		var awpitrp AzureWorkloadPointInTimeRecoveryPoint
7958		err := json.Unmarshal(body, &awpitrp)
7959		return awpitrp, err
7960	case string(ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint):
7961		var awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint
7962		err := json.Unmarshal(body, &awshpitrp)
7963		return awshpitrp, err
7964	case string(ObjectTypeAzureWorkloadSAPHanaRecoveryPoint):
7965		var awshrp AzureWorkloadSAPHanaRecoveryPoint
7966		err := json.Unmarshal(body, &awshrp)
7967		return awshrp, err
7968	case string(ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint):
7969		var awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint
7970		err := json.Unmarshal(body, &awspitrp)
7971		return awspitrp, err
7972	case string(ObjectTypeAzureWorkloadSQLRecoveryPoint):
7973		var awsrp AzureWorkloadSQLRecoveryPoint
7974		err := json.Unmarshal(body, &awsrp)
7975		return awsrp, err
7976	default:
7977		var awrp AzureWorkloadRecoveryPoint
7978		err := json.Unmarshal(body, &awrp)
7979		return awrp, err
7980	}
7981}
7982func unmarshalBasicAzureWorkloadRecoveryPointArray(body []byte) ([]BasicAzureWorkloadRecoveryPoint, error) {
7983	var rawMessages []*json.RawMessage
7984	err := json.Unmarshal(body, &rawMessages)
7985	if err != nil {
7986		return nil, err
7987	}
7988
7989	awrpArray := make([]BasicAzureWorkloadRecoveryPoint, len(rawMessages))
7990
7991	for index, rawMessage := range rawMessages {
7992		awrp, err := unmarshalBasicAzureWorkloadRecoveryPoint(*rawMessage)
7993		if err != nil {
7994			return nil, err
7995		}
7996		awrpArray[index] = awrp
7997	}
7998	return awrpArray, nil
7999}
8000
8001// MarshalJSON is the custom marshaler for AzureWorkloadRecoveryPoint.
8002func (awrp AzureWorkloadRecoveryPoint) MarshalJSON() ([]byte, error) {
8003	awrp.ObjectType = ObjectTypeAzureWorkloadRecoveryPoint
8004	objectMap := make(map[string]interface{})
8005	if awrp.ObjectType != "" {
8006		objectMap["objectType"] = awrp.ObjectType
8007	}
8008	return json.Marshal(objectMap)
8009}
8010
8011// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8012func (awrp AzureWorkloadRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
8013	return nil, false
8014}
8015
8016// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8017func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
8018	return nil, false
8019}
8020
8021// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8022func (awrp AzureWorkloadRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
8023	return nil, false
8024}
8025
8026// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8027func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
8028	return &awrp, true
8029}
8030
8031// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8032func (awrp AzureWorkloadRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
8033	return &awrp, true
8034}
8035
8036// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8037func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
8038	return nil, false
8039}
8040
8041// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8042func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
8043	return nil, false
8044}
8045
8046// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8047func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
8048	return nil, false
8049}
8050
8051// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8052func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
8053	return nil, false
8054}
8055
8056// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8057func (awrp AzureWorkloadRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
8058	return nil, false
8059}
8060
8061// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8062func (awrp AzureWorkloadRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
8063	return nil, false
8064}
8065
8066// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8067func (awrp AzureWorkloadRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
8068	return nil, false
8069}
8070
8071// AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8072func (awrp AzureWorkloadRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
8073	return nil, false
8074}
8075
8076// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
8077func (awrp AzureWorkloadRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
8078	return &awrp, true
8079}
8080
8081// BasicAzureWorkloadRestoreRequest azureWorkload-specific restore.
8082type BasicAzureWorkloadRestoreRequest interface {
8083	AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool)
8084	AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool)
8085	AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool)
8086	AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool)
8087	AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool)
8088	AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool)
8089	AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool)
8090	AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool)
8091}
8092
8093// AzureWorkloadRestoreRequest azureWorkload-specific restore.
8094type AzureWorkloadRestoreRequest struct {
8095	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
8096	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
8097	// SourceResourceID - Fully qualified ARM ID of the VM on which workload that was running is being recovered.
8098	SourceResourceID *string `json:"sourceResourceId,omitempty"`
8099	// PropertyBag - Workload specific property bag.
8100	PropertyBag map[string]*string `json:"propertyBag"`
8101	// TargetInfo - Details of target database
8102	TargetInfo *TargetRestoreInfo `json:"targetInfo,omitempty"`
8103	// RecoveryMode - Defines whether the current recovery mode is file restore or database restore. Possible values include: 'RecoveryModeInvalid', 'RecoveryModeFileRecovery', 'RecoveryModeWorkloadRecovery'
8104	RecoveryMode RecoveryMode `json:"recoveryMode,omitempty"`
8105	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
8106	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
8107}
8108
8109func unmarshalBasicAzureWorkloadRestoreRequest(body []byte) (BasicAzureWorkloadRestoreRequest, error) {
8110	var m map[string]interface{}
8111	err := json.Unmarshal(body, &m)
8112	if err != nil {
8113		return nil, err
8114	}
8115
8116	switch m["objectType"] {
8117	case string(ObjectTypeAzureWorkloadPointInTimeRestoreRequest):
8118		var awpitrr AzureWorkloadPointInTimeRestoreRequest
8119		err := json.Unmarshal(body, &awpitrr)
8120		return awpitrr, err
8121	case string(ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest):
8122		var awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest
8123		err := json.Unmarshal(body, &awshpitrr)
8124		return awshpitrr, err
8125	case string(ObjectTypeAzureWorkloadSAPHanaRestoreRequest):
8126		var awshrr AzureWorkloadSAPHanaRestoreRequest
8127		err := json.Unmarshal(body, &awshrr)
8128		return awshrr, err
8129	case string(ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest):
8130		var awspitrr AzureWorkloadSQLPointInTimeRestoreRequest
8131		err := json.Unmarshal(body, &awspitrr)
8132		return awspitrr, err
8133	case string(ObjectTypeAzureWorkloadSQLRestoreRequest):
8134		var awsrr AzureWorkloadSQLRestoreRequest
8135		err := json.Unmarshal(body, &awsrr)
8136		return awsrr, err
8137	default:
8138		var awrr AzureWorkloadRestoreRequest
8139		err := json.Unmarshal(body, &awrr)
8140		return awrr, err
8141	}
8142}
8143func unmarshalBasicAzureWorkloadRestoreRequestArray(body []byte) ([]BasicAzureWorkloadRestoreRequest, error) {
8144	var rawMessages []*json.RawMessage
8145	err := json.Unmarshal(body, &rawMessages)
8146	if err != nil {
8147		return nil, err
8148	}
8149
8150	awrrArray := make([]BasicAzureWorkloadRestoreRequest, len(rawMessages))
8151
8152	for index, rawMessage := range rawMessages {
8153		awrr, err := unmarshalBasicAzureWorkloadRestoreRequest(*rawMessage)
8154		if err != nil {
8155			return nil, err
8156		}
8157		awrrArray[index] = awrr
8158	}
8159	return awrrArray, nil
8160}
8161
8162// MarshalJSON is the custom marshaler for AzureWorkloadRestoreRequest.
8163func (awrr AzureWorkloadRestoreRequest) MarshalJSON() ([]byte, error) {
8164	awrr.ObjectType = ObjectTypeAzureWorkloadRestoreRequest
8165	objectMap := make(map[string]interface{})
8166	if awrr.RecoveryType != "" {
8167		objectMap["recoveryType"] = awrr.RecoveryType
8168	}
8169	if awrr.SourceResourceID != nil {
8170		objectMap["sourceResourceId"] = awrr.SourceResourceID
8171	}
8172	if awrr.PropertyBag != nil {
8173		objectMap["propertyBag"] = awrr.PropertyBag
8174	}
8175	if awrr.TargetInfo != nil {
8176		objectMap["targetInfo"] = awrr.TargetInfo
8177	}
8178	if awrr.RecoveryMode != "" {
8179		objectMap["recoveryMode"] = awrr.RecoveryMode
8180	}
8181	if awrr.ObjectType != "" {
8182		objectMap["objectType"] = awrr.ObjectType
8183	}
8184	return json.Marshal(objectMap)
8185}
8186
8187// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8188func (awrr AzureWorkloadRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
8189	return nil, false
8190}
8191
8192// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8193func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
8194	return nil, false
8195}
8196
8197// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8198func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
8199	return &awrr, true
8200}
8201
8202// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8203func (awrr AzureWorkloadRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
8204	return &awrr, true
8205}
8206
8207// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8208func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
8209	return nil, false
8210}
8211
8212// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8213func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
8214	return nil, false
8215}
8216
8217// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8218func (awrr AzureWorkloadRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
8219	return nil, false
8220}
8221
8222// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8223func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
8224	return nil, false
8225}
8226
8227// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8228func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
8229	return nil, false
8230}
8231
8232// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8233func (awrr AzureWorkloadRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
8234	return nil, false
8235}
8236
8237// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8238func (awrr AzureWorkloadRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
8239	return nil, false
8240}
8241
8242// AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8243func (awrr AzureWorkloadRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
8244	return nil, false
8245}
8246
8247// AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
8248func (awrr AzureWorkloadRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
8249	return &awrr, true
8250}
8251
8252// AzureWorkloadSAPHanaPointInTimeRecoveryPoint recovery point specific to PointInTime in SAPHana
8253type AzureWorkloadSAPHanaPointInTimeRecoveryPoint struct {
8254	// TimeRanges - List of log ranges
8255	TimeRanges *[]PointInTimeRange `json:"timeRanges,omitempty"`
8256	// RecoveryPointTimeInUTC - READ-ONLY; UTC time at which recovery point was created
8257	RecoveryPointTimeInUTC *date.Time `json:"recoveryPointTimeInUTC,omitempty"`
8258	// Type - READ-ONLY; Type of restore point. Possible values include: 'RestorePointTypeInvalid', 'RestorePointTypeFull', 'RestorePointTypeLog', 'RestorePointTypeDifferential'
8259	Type RestorePointType `json:"type,omitempty"`
8260	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
8261	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
8262}
8263
8264// MarshalJSON is the custom marshaler for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8265func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) MarshalJSON() ([]byte, error) {
8266	awshpitrp.ObjectType = ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint
8267	objectMap := make(map[string]interface{})
8268	if awshpitrp.TimeRanges != nil {
8269		objectMap["timeRanges"] = awshpitrp.TimeRanges
8270	}
8271	if awshpitrp.ObjectType != "" {
8272		objectMap["objectType"] = awshpitrp.ObjectType
8273	}
8274	return json.Marshal(objectMap)
8275}
8276
8277// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8278func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
8279	return nil, false
8280}
8281
8282// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8283func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
8284	return nil, false
8285}
8286
8287// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8288func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
8289	return &awshpitrp, true
8290}
8291
8292// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8293func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
8294	return nil, false
8295}
8296
8297// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8298func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
8299	return &awshpitrp, true
8300}
8301
8302// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8303func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
8304	return &awshpitrp, true
8305}
8306
8307// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8308func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
8309	return nil, false
8310}
8311
8312// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8313func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
8314	return nil, false
8315}
8316
8317// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8318func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
8319	return nil, false
8320}
8321
8322// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8323func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
8324	return nil, false
8325}
8326
8327// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8328func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
8329	return nil, false
8330}
8331
8332// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8333func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
8334	return nil, false
8335}
8336
8337// AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8338func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
8339	return nil, false
8340}
8341
8342// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
8343func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
8344	return &awshpitrp, true
8345}
8346
8347// AzureWorkloadSAPHanaPointInTimeRestoreRequest azureWorkload SAP Hana -specific restore. Specifically for
8348// PointInTime/Log restore
8349type AzureWorkloadSAPHanaPointInTimeRestoreRequest struct {
8350	// PointInTime - PointInTime value
8351	PointInTime *date.Time `json:"pointInTime,omitempty"`
8352	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
8353	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
8354	// SourceResourceID - Fully qualified ARM ID of the VM on which workload that was running is being recovered.
8355	SourceResourceID *string `json:"sourceResourceId,omitempty"`
8356	// PropertyBag - Workload specific property bag.
8357	PropertyBag map[string]*string `json:"propertyBag"`
8358	// TargetInfo - Details of target database
8359	TargetInfo *TargetRestoreInfo `json:"targetInfo,omitempty"`
8360	// RecoveryMode - Defines whether the current recovery mode is file restore or database restore. Possible values include: 'RecoveryModeInvalid', 'RecoveryModeFileRecovery', 'RecoveryModeWorkloadRecovery'
8361	RecoveryMode RecoveryMode `json:"recoveryMode,omitempty"`
8362	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
8363	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
8364}
8365
8366// MarshalJSON is the custom marshaler for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8367func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) MarshalJSON() ([]byte, error) {
8368	awshpitrr.ObjectType = ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest
8369	objectMap := make(map[string]interface{})
8370	if awshpitrr.PointInTime != nil {
8371		objectMap["pointInTime"] = awshpitrr.PointInTime
8372	}
8373	if awshpitrr.RecoveryType != "" {
8374		objectMap["recoveryType"] = awshpitrr.RecoveryType
8375	}
8376	if awshpitrr.SourceResourceID != nil {
8377		objectMap["sourceResourceId"] = awshpitrr.SourceResourceID
8378	}
8379	if awshpitrr.PropertyBag != nil {
8380		objectMap["propertyBag"] = awshpitrr.PropertyBag
8381	}
8382	if awshpitrr.TargetInfo != nil {
8383		objectMap["targetInfo"] = awshpitrr.TargetInfo
8384	}
8385	if awshpitrr.RecoveryMode != "" {
8386		objectMap["recoveryMode"] = awshpitrr.RecoveryMode
8387	}
8388	if awshpitrr.ObjectType != "" {
8389		objectMap["objectType"] = awshpitrr.ObjectType
8390	}
8391	return json.Marshal(objectMap)
8392}
8393
8394// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8395func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
8396	return nil, false
8397}
8398
8399// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8400func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
8401	return nil, false
8402}
8403
8404// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8405func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
8406	return nil, false
8407}
8408
8409// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8410func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
8411	return &awshpitrr, true
8412}
8413
8414// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8415func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
8416	return &awshpitrr, true
8417}
8418
8419// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8420func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
8421	return nil, false
8422}
8423
8424// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8425func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
8426	return &awshpitrr, true
8427}
8428
8429// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8430func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
8431	return nil, false
8432}
8433
8434// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8435func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
8436	return nil, false
8437}
8438
8439// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8440func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
8441	return nil, false
8442}
8443
8444// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8445func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
8446	return nil, false
8447}
8448
8449// AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8450func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
8451	return nil, false
8452}
8453
8454// AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
8455func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
8456	return &awshpitrr, true
8457}
8458
8459// AzureWorkloadSAPHanaRecoveryPoint sAPHana specific recoverypoint, specifically encapsulates full/diff
8460// recoverypoints
8461type AzureWorkloadSAPHanaRecoveryPoint struct {
8462	// RecoveryPointTimeInUTC - READ-ONLY; UTC time at which recovery point was created
8463	RecoveryPointTimeInUTC *date.Time `json:"recoveryPointTimeInUTC,omitempty"`
8464	// Type - READ-ONLY; Type of restore point. Possible values include: 'RestorePointTypeInvalid', 'RestorePointTypeFull', 'RestorePointTypeLog', 'RestorePointTypeDifferential'
8465	Type RestorePointType `json:"type,omitempty"`
8466	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
8467	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
8468}
8469
8470// MarshalJSON is the custom marshaler for AzureWorkloadSAPHanaRecoveryPoint.
8471func (awshrp AzureWorkloadSAPHanaRecoveryPoint) MarshalJSON() ([]byte, error) {
8472	awshrp.ObjectType = ObjectTypeAzureWorkloadSAPHanaRecoveryPoint
8473	objectMap := make(map[string]interface{})
8474	if awshrp.ObjectType != "" {
8475		objectMap["objectType"] = awshrp.ObjectType
8476	}
8477	return json.Marshal(objectMap)
8478}
8479
8480// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8481func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
8482	return nil, false
8483}
8484
8485// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8486func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
8487	return nil, false
8488}
8489
8490// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8491func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
8492	return nil, false
8493}
8494
8495// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8496func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
8497	return nil, false
8498}
8499
8500// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8501func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
8502	return &awshrp, true
8503}
8504
8505// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8506func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
8507	return nil, false
8508}
8509
8510// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8511func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
8512	return &awshrp, true
8513}
8514
8515// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8516func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
8517	return nil, false
8518}
8519
8520// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8521func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
8522	return nil, false
8523}
8524
8525// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8526func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
8527	return nil, false
8528}
8529
8530// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8531func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
8532	return nil, false
8533}
8534
8535// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8536func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
8537	return nil, false
8538}
8539
8540// AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8541func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
8542	return nil, false
8543}
8544
8545// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
8546func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
8547	return &awshrp, true
8548}
8549
8550// BasicAzureWorkloadSAPHanaRestoreRequest azureWorkload SAP Hana-specific restore.
8551type BasicAzureWorkloadSAPHanaRestoreRequest interface {
8552	AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool)
8553	AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool)
8554}
8555
8556// AzureWorkloadSAPHanaRestoreRequest azureWorkload SAP Hana-specific restore.
8557type AzureWorkloadSAPHanaRestoreRequest struct {
8558	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
8559	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
8560	// SourceResourceID - Fully qualified ARM ID of the VM on which workload that was running is being recovered.
8561	SourceResourceID *string `json:"sourceResourceId,omitempty"`
8562	// PropertyBag - Workload specific property bag.
8563	PropertyBag map[string]*string `json:"propertyBag"`
8564	// TargetInfo - Details of target database
8565	TargetInfo *TargetRestoreInfo `json:"targetInfo,omitempty"`
8566	// RecoveryMode - Defines whether the current recovery mode is file restore or database restore. Possible values include: 'RecoveryModeInvalid', 'RecoveryModeFileRecovery', 'RecoveryModeWorkloadRecovery'
8567	RecoveryMode RecoveryMode `json:"recoveryMode,omitempty"`
8568	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
8569	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
8570}
8571
8572func unmarshalBasicAzureWorkloadSAPHanaRestoreRequest(body []byte) (BasicAzureWorkloadSAPHanaRestoreRequest, error) {
8573	var m map[string]interface{}
8574	err := json.Unmarshal(body, &m)
8575	if err != nil {
8576		return nil, err
8577	}
8578
8579	switch m["objectType"] {
8580	case string(ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest):
8581		var awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest
8582		err := json.Unmarshal(body, &awshpitrr)
8583		return awshpitrr, err
8584	default:
8585		var awshrr AzureWorkloadSAPHanaRestoreRequest
8586		err := json.Unmarshal(body, &awshrr)
8587		return awshrr, err
8588	}
8589}
8590func unmarshalBasicAzureWorkloadSAPHanaRestoreRequestArray(body []byte) ([]BasicAzureWorkloadSAPHanaRestoreRequest, error) {
8591	var rawMessages []*json.RawMessage
8592	err := json.Unmarshal(body, &rawMessages)
8593	if err != nil {
8594		return nil, err
8595	}
8596
8597	awshrrArray := make([]BasicAzureWorkloadSAPHanaRestoreRequest, len(rawMessages))
8598
8599	for index, rawMessage := range rawMessages {
8600		awshrr, err := unmarshalBasicAzureWorkloadSAPHanaRestoreRequest(*rawMessage)
8601		if err != nil {
8602			return nil, err
8603		}
8604		awshrrArray[index] = awshrr
8605	}
8606	return awshrrArray, nil
8607}
8608
8609// MarshalJSON is the custom marshaler for AzureWorkloadSAPHanaRestoreRequest.
8610func (awshrr AzureWorkloadSAPHanaRestoreRequest) MarshalJSON() ([]byte, error) {
8611	awshrr.ObjectType = ObjectTypeAzureWorkloadSAPHanaRestoreRequest
8612	objectMap := make(map[string]interface{})
8613	if awshrr.RecoveryType != "" {
8614		objectMap["recoveryType"] = awshrr.RecoveryType
8615	}
8616	if awshrr.SourceResourceID != nil {
8617		objectMap["sourceResourceId"] = awshrr.SourceResourceID
8618	}
8619	if awshrr.PropertyBag != nil {
8620		objectMap["propertyBag"] = awshrr.PropertyBag
8621	}
8622	if awshrr.TargetInfo != nil {
8623		objectMap["targetInfo"] = awshrr.TargetInfo
8624	}
8625	if awshrr.RecoveryMode != "" {
8626		objectMap["recoveryMode"] = awshrr.RecoveryMode
8627	}
8628	if awshrr.ObjectType != "" {
8629		objectMap["objectType"] = awshrr.ObjectType
8630	}
8631	return json.Marshal(objectMap)
8632}
8633
8634// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8635func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
8636	return nil, false
8637}
8638
8639// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8640func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
8641	return nil, false
8642}
8643
8644// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8645func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
8646	return nil, false
8647}
8648
8649// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8650func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
8651	return &awshrr, true
8652}
8653
8654// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8655func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
8656	return nil, false
8657}
8658
8659// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8660func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
8661	return &awshrr, true
8662}
8663
8664// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8665func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
8666	return &awshrr, true
8667}
8668
8669// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8670func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
8671	return nil, false
8672}
8673
8674// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8675func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
8676	return nil, false
8677}
8678
8679// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8680func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
8681	return nil, false
8682}
8683
8684// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8685func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
8686	return nil, false
8687}
8688
8689// AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8690func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
8691	return nil, false
8692}
8693
8694// AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
8695func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
8696	return &awshrr, true
8697}
8698
8699// AzureWorkloadSQLAutoProtectionIntent azure Workload SQL Auto Protection intent item.
8700type AzureWorkloadSQLAutoProtectionIntent struct {
8701	// WorkloadItemType - Workload item type of the item for which intent is to be set. Possible values include: 'WorkloadItemTypeInvalid', 'WorkloadItemTypeSQLInstance', 'WorkloadItemTypeSQLDataBase', 'WorkloadItemTypeSAPHanaSystem', 'WorkloadItemTypeSAPHanaDatabase', 'WorkloadItemTypeSAPAseSystem', 'WorkloadItemTypeSAPAseDatabase'
8702	WorkloadItemType WorkloadItemType `json:"workloadItemType,omitempty"`
8703	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
8704	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
8705	// SourceResourceID - ARM ID of the resource to be backed up.
8706	SourceResourceID *string `json:"sourceResourceId,omitempty"`
8707	// ItemID - ID of the item which is getting protected, In case of Azure Vm , it is ProtectedItemId
8708	ItemID *string `json:"itemId,omitempty"`
8709	// PolicyID - ID of the backup policy with which this item is backed up.
8710	PolicyID *string `json:"policyId,omitempty"`
8711	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
8712	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
8713	// ProtectionIntentItemType - Possible values include: 'ProtectionIntentItemTypeProtectionIntent', 'ProtectionIntentItemTypeRecoveryServiceVaultItem', 'ProtectionIntentItemTypeAzureResourceItem', 'ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent', 'ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent'
8714	ProtectionIntentItemType ProtectionIntentItemType `json:"protectionIntentItemType,omitempty"`
8715}
8716
8717// MarshalJSON is the custom marshaler for AzureWorkloadSQLAutoProtectionIntent.
8718func (awsapi AzureWorkloadSQLAutoProtectionIntent) MarshalJSON() ([]byte, error) {
8719	awsapi.ProtectionIntentItemType = ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent
8720	objectMap := make(map[string]interface{})
8721	if awsapi.WorkloadItemType != "" {
8722		objectMap["workloadItemType"] = awsapi.WorkloadItemType
8723	}
8724	if awsapi.BackupManagementType != "" {
8725		objectMap["backupManagementType"] = awsapi.BackupManagementType
8726	}
8727	if awsapi.SourceResourceID != nil {
8728		objectMap["sourceResourceId"] = awsapi.SourceResourceID
8729	}
8730	if awsapi.ItemID != nil {
8731		objectMap["itemId"] = awsapi.ItemID
8732	}
8733	if awsapi.PolicyID != nil {
8734		objectMap["policyId"] = awsapi.PolicyID
8735	}
8736	if awsapi.ProtectionState != "" {
8737		objectMap["protectionState"] = awsapi.ProtectionState
8738	}
8739	if awsapi.ProtectionIntentItemType != "" {
8740		objectMap["protectionIntentItemType"] = awsapi.ProtectionIntentItemType
8741	}
8742	return json.Marshal(objectMap)
8743}
8744
8745// AsAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8746func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
8747	return nil, false
8748}
8749
8750// AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8751func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
8752	return &awsapi, true
8753}
8754
8755// AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8756func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
8757	return nil, false
8758}
8759
8760// AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8761func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
8762	return nil, false
8763}
8764
8765// AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8766func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
8767	return &awsapi, true
8768}
8769
8770// AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8771func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
8772	return &awsapi, true
8773}
8774
8775// AsProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8776func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
8777	return nil, false
8778}
8779
8780// AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
8781func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
8782	return &awsapi, true
8783}
8784
8785// AzureWorkloadSQLPointInTimeRecoveryPoint recovery point specific to PointInTime
8786type AzureWorkloadSQLPointInTimeRecoveryPoint struct {
8787	// TimeRanges - List of log ranges
8788	TimeRanges *[]PointInTimeRange `json:"timeRanges,omitempty"`
8789	// ExtendedInfo - Extended Info that provides data directory details. Will be populated in two cases:
8790	// When a specific recovery point is accessed using GetRecoveryPoint
8791	// Or when ListRecoveryPoints is called for Log RP only with ExtendedInfo query filter
8792	ExtendedInfo *AzureWorkloadSQLRecoveryPointExtendedInfo `json:"extendedInfo,omitempty"`
8793	// RecoveryPointTimeInUTC - READ-ONLY; UTC time at which recovery point was created
8794	RecoveryPointTimeInUTC *date.Time `json:"recoveryPointTimeInUTC,omitempty"`
8795	// Type - READ-ONLY; Type of restore point. Possible values include: 'RestorePointTypeInvalid', 'RestorePointTypeFull', 'RestorePointTypeLog', 'RestorePointTypeDifferential'
8796	Type RestorePointType `json:"type,omitempty"`
8797	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
8798	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
8799}
8800
8801// MarshalJSON is the custom marshaler for AzureWorkloadSQLPointInTimeRecoveryPoint.
8802func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) MarshalJSON() ([]byte, error) {
8803	awspitrp.ObjectType = ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint
8804	objectMap := make(map[string]interface{})
8805	if awspitrp.TimeRanges != nil {
8806		objectMap["timeRanges"] = awspitrp.TimeRanges
8807	}
8808	if awspitrp.ExtendedInfo != nil {
8809		objectMap["extendedInfo"] = awspitrp.ExtendedInfo
8810	}
8811	if awspitrp.ObjectType != "" {
8812		objectMap["objectType"] = awspitrp.ObjectType
8813	}
8814	return json.Marshal(objectMap)
8815}
8816
8817// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8818func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
8819	return nil, false
8820}
8821
8822// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8823func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
8824	return nil, false
8825}
8826
8827// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8828func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
8829	return nil, false
8830}
8831
8832// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8833func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
8834	return nil, false
8835}
8836
8837// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8838func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
8839	return &awspitrp, true
8840}
8841
8842// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8843func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
8844	return nil, false
8845}
8846
8847// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8848func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
8849	return nil, false
8850}
8851
8852// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8853func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
8854	return &awspitrp, true
8855}
8856
8857// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8858func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
8859	return nil, false
8860}
8861
8862// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8863func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
8864	return &awspitrp, true
8865}
8866
8867// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8868func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
8869	return nil, false
8870}
8871
8872// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8873func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
8874	return nil, false
8875}
8876
8877// AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8878func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
8879	return nil, false
8880}
8881
8882// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
8883func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
8884	return &awspitrp, true
8885}
8886
8887// AzureWorkloadSQLPointInTimeRestoreRequest azureWorkload SQL -specific restore. Specifically for
8888// PointInTime/Log restore
8889type AzureWorkloadSQLPointInTimeRestoreRequest struct {
8890	// PointInTime - PointInTime value
8891	PointInTime *date.Time `json:"pointInTime,omitempty"`
8892	// ShouldUseAlternateTargetLocation - Default option set to true. If this is set to false, alternate data directory must be provided
8893	ShouldUseAlternateTargetLocation *bool `json:"shouldUseAlternateTargetLocation,omitempty"`
8894	// IsNonRecoverable - SQL specific property where user can chose to set no-recovery when restore operation is tried
8895	IsNonRecoverable *bool `json:"isNonRecoverable,omitempty"`
8896	// AlternateDirectoryPaths - Data directory details
8897	AlternateDirectoryPaths *[]SQLDataDirectoryMapping `json:"alternateDirectoryPaths,omitempty"`
8898	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
8899	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
8900	// SourceResourceID - Fully qualified ARM ID of the VM on which workload that was running is being recovered.
8901	SourceResourceID *string `json:"sourceResourceId,omitempty"`
8902	// PropertyBag - Workload specific property bag.
8903	PropertyBag map[string]*string `json:"propertyBag"`
8904	// TargetInfo - Details of target database
8905	TargetInfo *TargetRestoreInfo `json:"targetInfo,omitempty"`
8906	// RecoveryMode - Defines whether the current recovery mode is file restore or database restore. Possible values include: 'RecoveryModeInvalid', 'RecoveryModeFileRecovery', 'RecoveryModeWorkloadRecovery'
8907	RecoveryMode RecoveryMode `json:"recoveryMode,omitempty"`
8908	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
8909	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
8910}
8911
8912// MarshalJSON is the custom marshaler for AzureWorkloadSQLPointInTimeRestoreRequest.
8913func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) MarshalJSON() ([]byte, error) {
8914	awspitrr.ObjectType = ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest
8915	objectMap := make(map[string]interface{})
8916	if awspitrr.PointInTime != nil {
8917		objectMap["pointInTime"] = awspitrr.PointInTime
8918	}
8919	if awspitrr.ShouldUseAlternateTargetLocation != nil {
8920		objectMap["shouldUseAlternateTargetLocation"] = awspitrr.ShouldUseAlternateTargetLocation
8921	}
8922	if awspitrr.IsNonRecoverable != nil {
8923		objectMap["isNonRecoverable"] = awspitrr.IsNonRecoverable
8924	}
8925	if awspitrr.AlternateDirectoryPaths != nil {
8926		objectMap["alternateDirectoryPaths"] = awspitrr.AlternateDirectoryPaths
8927	}
8928	if awspitrr.RecoveryType != "" {
8929		objectMap["recoveryType"] = awspitrr.RecoveryType
8930	}
8931	if awspitrr.SourceResourceID != nil {
8932		objectMap["sourceResourceId"] = awspitrr.SourceResourceID
8933	}
8934	if awspitrr.PropertyBag != nil {
8935		objectMap["propertyBag"] = awspitrr.PropertyBag
8936	}
8937	if awspitrr.TargetInfo != nil {
8938		objectMap["targetInfo"] = awspitrr.TargetInfo
8939	}
8940	if awspitrr.RecoveryMode != "" {
8941		objectMap["recoveryMode"] = awspitrr.RecoveryMode
8942	}
8943	if awspitrr.ObjectType != "" {
8944		objectMap["objectType"] = awspitrr.ObjectType
8945	}
8946	return json.Marshal(objectMap)
8947}
8948
8949// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8950func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
8951	return nil, false
8952}
8953
8954// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8955func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
8956	return nil, false
8957}
8958
8959// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8960func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
8961	return nil, false
8962}
8963
8964// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8965func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
8966	return &awspitrr, true
8967}
8968
8969// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8970func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
8971	return nil, false
8972}
8973
8974// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8975func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
8976	return nil, false
8977}
8978
8979// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8980func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
8981	return nil, false
8982}
8983
8984// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8985func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
8986	return &awspitrr, true
8987}
8988
8989// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8990func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
8991	return nil, false
8992}
8993
8994// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
8995func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
8996	return &awspitrr, true
8997}
8998
8999// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
9000func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
9001	return nil, false
9002}
9003
9004// AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
9005func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
9006	return nil, false
9007}
9008
9009// AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
9010func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
9011	return &awspitrr, true
9012}
9013
9014// BasicAzureWorkloadSQLRecoveryPoint SQL specific recoverypoint, specifically encapsulates full/diff recoverypoint
9015// along with extended info
9016type BasicAzureWorkloadSQLRecoveryPoint interface {
9017	AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool)
9018	AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool)
9019}
9020
9021// AzureWorkloadSQLRecoveryPoint SQL specific recoverypoint, specifically encapsulates full/diff recoverypoint
9022// along with extended info
9023type AzureWorkloadSQLRecoveryPoint struct {
9024	// ExtendedInfo - Extended Info that provides data directory details. Will be populated in two cases:
9025	// When a specific recovery point is accessed using GetRecoveryPoint
9026	// Or when ListRecoveryPoints is called for Log RP only with ExtendedInfo query filter
9027	ExtendedInfo *AzureWorkloadSQLRecoveryPointExtendedInfo `json:"extendedInfo,omitempty"`
9028	// RecoveryPointTimeInUTC - READ-ONLY; UTC time at which recovery point was created
9029	RecoveryPointTimeInUTC *date.Time `json:"recoveryPointTimeInUTC,omitempty"`
9030	// Type - READ-ONLY; Type of restore point. Possible values include: 'RestorePointTypeInvalid', 'RestorePointTypeFull', 'RestorePointTypeLog', 'RestorePointTypeDifferential'
9031	Type RestorePointType `json:"type,omitempty"`
9032	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
9033	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
9034}
9035
9036func unmarshalBasicAzureWorkloadSQLRecoveryPoint(body []byte) (BasicAzureWorkloadSQLRecoveryPoint, error) {
9037	var m map[string]interface{}
9038	err := json.Unmarshal(body, &m)
9039	if err != nil {
9040		return nil, err
9041	}
9042
9043	switch m["objectType"] {
9044	case string(ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint):
9045		var awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint
9046		err := json.Unmarshal(body, &awspitrp)
9047		return awspitrp, err
9048	default:
9049		var awsrp AzureWorkloadSQLRecoveryPoint
9050		err := json.Unmarshal(body, &awsrp)
9051		return awsrp, err
9052	}
9053}
9054func unmarshalBasicAzureWorkloadSQLRecoveryPointArray(body []byte) ([]BasicAzureWorkloadSQLRecoveryPoint, error) {
9055	var rawMessages []*json.RawMessage
9056	err := json.Unmarshal(body, &rawMessages)
9057	if err != nil {
9058		return nil, err
9059	}
9060
9061	awsrpArray := make([]BasicAzureWorkloadSQLRecoveryPoint, len(rawMessages))
9062
9063	for index, rawMessage := range rawMessages {
9064		awsrp, err := unmarshalBasicAzureWorkloadSQLRecoveryPoint(*rawMessage)
9065		if err != nil {
9066			return nil, err
9067		}
9068		awsrpArray[index] = awsrp
9069	}
9070	return awsrpArray, nil
9071}
9072
9073// MarshalJSON is the custom marshaler for AzureWorkloadSQLRecoveryPoint.
9074func (awsrp AzureWorkloadSQLRecoveryPoint) MarshalJSON() ([]byte, error) {
9075	awsrp.ObjectType = ObjectTypeAzureWorkloadSQLRecoveryPoint
9076	objectMap := make(map[string]interface{})
9077	if awsrp.ExtendedInfo != nil {
9078		objectMap["extendedInfo"] = awsrp.ExtendedInfo
9079	}
9080	if awsrp.ObjectType != "" {
9081		objectMap["objectType"] = awsrp.ObjectType
9082	}
9083	return json.Marshal(objectMap)
9084}
9085
9086// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9087func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
9088	return nil, false
9089}
9090
9091// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9092func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
9093	return nil, false
9094}
9095
9096// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9097func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
9098	return nil, false
9099}
9100
9101// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9102func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
9103	return nil, false
9104}
9105
9106// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9107func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
9108	return &awsrp, true
9109}
9110
9111// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9112func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
9113	return nil, false
9114}
9115
9116// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9117func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
9118	return nil, false
9119}
9120
9121// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9122func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
9123	return nil, false
9124}
9125
9126// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9127func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
9128	return &awsrp, true
9129}
9130
9131// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9132func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
9133	return &awsrp, true
9134}
9135
9136// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9137func (awsrp AzureWorkloadSQLRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
9138	return nil, false
9139}
9140
9141// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9142func (awsrp AzureWorkloadSQLRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
9143	return nil, false
9144}
9145
9146// AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9147func (awsrp AzureWorkloadSQLRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
9148	return nil, false
9149}
9150
9151// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
9152func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
9153	return &awsrp, true
9154}
9155
9156// AzureWorkloadSQLRecoveryPointExtendedInfo extended info class details
9157type AzureWorkloadSQLRecoveryPointExtendedInfo struct {
9158	// DataDirectoryTimeInUTC - READ-ONLY; UTC time at which data directory info was captured
9159	DataDirectoryTimeInUTC *date.Time `json:"dataDirectoryTimeInUTC,omitempty"`
9160	// DataDirectoryPaths - READ-ONLY; List of data directory paths during restore operation.
9161	DataDirectoryPaths *[]SQLDataDirectory `json:"dataDirectoryPaths,omitempty"`
9162}
9163
9164// MarshalJSON is the custom marshaler for AzureWorkloadSQLRecoveryPointExtendedInfo.
9165func (awsrpei AzureWorkloadSQLRecoveryPointExtendedInfo) MarshalJSON() ([]byte, error) {
9166	objectMap := make(map[string]interface{})
9167	return json.Marshal(objectMap)
9168}
9169
9170// BasicAzureWorkloadSQLRestoreRequest azureWorkload SQL -specific restore. Specifically for full/diff restore
9171type BasicAzureWorkloadSQLRestoreRequest interface {
9172	AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool)
9173	AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool)
9174}
9175
9176// AzureWorkloadSQLRestoreRequest azureWorkload SQL -specific restore. Specifically for full/diff restore
9177type AzureWorkloadSQLRestoreRequest struct {
9178	// ShouldUseAlternateTargetLocation - Default option set to true. If this is set to false, alternate data directory must be provided
9179	ShouldUseAlternateTargetLocation *bool `json:"shouldUseAlternateTargetLocation,omitempty"`
9180	// IsNonRecoverable - SQL specific property where user can chose to set no-recovery when restore operation is tried
9181	IsNonRecoverable *bool `json:"isNonRecoverable,omitempty"`
9182	// AlternateDirectoryPaths - Data directory details
9183	AlternateDirectoryPaths *[]SQLDataDirectoryMapping `json:"alternateDirectoryPaths,omitempty"`
9184	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
9185	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
9186	// SourceResourceID - Fully qualified ARM ID of the VM on which workload that was running is being recovered.
9187	SourceResourceID *string `json:"sourceResourceId,omitempty"`
9188	// PropertyBag - Workload specific property bag.
9189	PropertyBag map[string]*string `json:"propertyBag"`
9190	// TargetInfo - Details of target database
9191	TargetInfo *TargetRestoreInfo `json:"targetInfo,omitempty"`
9192	// RecoveryMode - Defines whether the current recovery mode is file restore or database restore. Possible values include: 'RecoveryModeInvalid', 'RecoveryModeFileRecovery', 'RecoveryModeWorkloadRecovery'
9193	RecoveryMode RecoveryMode `json:"recoveryMode,omitempty"`
9194	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
9195	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
9196}
9197
9198func unmarshalBasicAzureWorkloadSQLRestoreRequest(body []byte) (BasicAzureWorkloadSQLRestoreRequest, error) {
9199	var m map[string]interface{}
9200	err := json.Unmarshal(body, &m)
9201	if err != nil {
9202		return nil, err
9203	}
9204
9205	switch m["objectType"] {
9206	case string(ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest):
9207		var awspitrr AzureWorkloadSQLPointInTimeRestoreRequest
9208		err := json.Unmarshal(body, &awspitrr)
9209		return awspitrr, err
9210	default:
9211		var awsrr AzureWorkloadSQLRestoreRequest
9212		err := json.Unmarshal(body, &awsrr)
9213		return awsrr, err
9214	}
9215}
9216func unmarshalBasicAzureWorkloadSQLRestoreRequestArray(body []byte) ([]BasicAzureWorkloadSQLRestoreRequest, error) {
9217	var rawMessages []*json.RawMessage
9218	err := json.Unmarshal(body, &rawMessages)
9219	if err != nil {
9220		return nil, err
9221	}
9222
9223	awsrrArray := make([]BasicAzureWorkloadSQLRestoreRequest, len(rawMessages))
9224
9225	for index, rawMessage := range rawMessages {
9226		awsrr, err := unmarshalBasicAzureWorkloadSQLRestoreRequest(*rawMessage)
9227		if err != nil {
9228			return nil, err
9229		}
9230		awsrrArray[index] = awsrr
9231	}
9232	return awsrrArray, nil
9233}
9234
9235// MarshalJSON is the custom marshaler for AzureWorkloadSQLRestoreRequest.
9236func (awsrr AzureWorkloadSQLRestoreRequest) MarshalJSON() ([]byte, error) {
9237	awsrr.ObjectType = ObjectTypeAzureWorkloadSQLRestoreRequest
9238	objectMap := make(map[string]interface{})
9239	if awsrr.ShouldUseAlternateTargetLocation != nil {
9240		objectMap["shouldUseAlternateTargetLocation"] = awsrr.ShouldUseAlternateTargetLocation
9241	}
9242	if awsrr.IsNonRecoverable != nil {
9243		objectMap["isNonRecoverable"] = awsrr.IsNonRecoverable
9244	}
9245	if awsrr.AlternateDirectoryPaths != nil {
9246		objectMap["alternateDirectoryPaths"] = awsrr.AlternateDirectoryPaths
9247	}
9248	if awsrr.RecoveryType != "" {
9249		objectMap["recoveryType"] = awsrr.RecoveryType
9250	}
9251	if awsrr.SourceResourceID != nil {
9252		objectMap["sourceResourceId"] = awsrr.SourceResourceID
9253	}
9254	if awsrr.PropertyBag != nil {
9255		objectMap["propertyBag"] = awsrr.PropertyBag
9256	}
9257	if awsrr.TargetInfo != nil {
9258		objectMap["targetInfo"] = awsrr.TargetInfo
9259	}
9260	if awsrr.RecoveryMode != "" {
9261		objectMap["recoveryMode"] = awsrr.RecoveryMode
9262	}
9263	if awsrr.ObjectType != "" {
9264		objectMap["objectType"] = awsrr.ObjectType
9265	}
9266	return json.Marshal(objectMap)
9267}
9268
9269// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9270func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
9271	return nil, false
9272}
9273
9274// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9275func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
9276	return nil, false
9277}
9278
9279// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9280func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
9281	return nil, false
9282}
9283
9284// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9285func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
9286	return &awsrr, true
9287}
9288
9289// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9290func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
9291	return nil, false
9292}
9293
9294// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9295func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
9296	return nil, false
9297}
9298
9299// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9300func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
9301	return nil, false
9302}
9303
9304// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9305func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
9306	return nil, false
9307}
9308
9309// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9310func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
9311	return &awsrr, true
9312}
9313
9314// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9315func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
9316	return &awsrr, true
9317}
9318
9319// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9320func (awsrr AzureWorkloadSQLRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
9321	return nil, false
9322}
9323
9324// AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9325func (awsrr AzureWorkloadSQLRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
9326	return nil, false
9327}
9328
9329// AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
9330func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
9331	return &awsrr, true
9332}
9333
9334// BEKDetails BEK is bitlocker encryption key.
9335type BEKDetails struct {
9336	// SecretURL - Secret is BEK.
9337	SecretURL *string `json:"secretUrl,omitempty"`
9338	// SecretVaultID - ID of the Key Vault where this Secret is stored.
9339	SecretVaultID *string `json:"secretVaultId,omitempty"`
9340	// SecretData - BEK data.
9341	SecretData *string `json:"secretData,omitempty"`
9342}
9343
9344// BMSBackupEngineQueryObject query parameters to fetch list of backup engines.
9345type BMSBackupEngineQueryObject struct {
9346	// Expand - attribute to add extended info
9347	Expand *string `json:"expand,omitempty"`
9348}
9349
9350// BMSBackupEnginesQueryObject query parameters to fetch list of backup engines.
9351type BMSBackupEnginesQueryObject struct {
9352	// BackupManagementType - Backup management type for the backup engine. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9353	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9354	// FriendlyName - Friendly name of the backup engine.
9355	FriendlyName *string `json:"friendlyName,omitempty"`
9356	// Expand - Attribute to add extended info.
9357	Expand *string `json:"expand,omitempty"`
9358}
9359
9360// BMSBackupSummariesQueryObject query parameters to fetch backup summaries.
9361type BMSBackupSummariesQueryObject struct {
9362	// Type - Backup management type for this container. Possible values include: 'TypeInvalid', 'TypeBackupProtectedItemCountSummary', 'TypeBackupProtectionContainerCountSummary'
9363	Type Type `json:"type,omitempty"`
9364}
9365
9366// BMSContainerQueryObject the query filters that can be used with the list containers API.
9367type BMSContainerQueryObject struct {
9368	// BackupManagementType - Backup management type for this container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9369	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9370	// ContainerType - Type of container for filter. Possible values include: 'ContainerTypeInvalid', 'ContainerTypeUnknown', 'ContainerTypeIaasVMContainer', 'ContainerTypeIaasVMServiceContainer', 'ContainerTypeDPMContainer', 'ContainerTypeAzureBackupServerContainer', 'ContainerTypeMABContainer', 'ContainerTypeCluster', 'ContainerTypeAzureSQLContainer', 'ContainerTypeWindows', 'ContainerTypeVCenter', 'ContainerTypeVMAppContainer', 'ContainerTypeSQLAGWorkLoadContainer', 'ContainerTypeStorageContainer', 'ContainerTypeGenericContainer'
9371	ContainerType ContainerType `json:"containerType,omitempty"`
9372	// BackupEngineName - Backup engine name
9373	BackupEngineName *string `json:"backupEngineName,omitempty"`
9374	// FabricName - Fabric name for filter
9375	FabricName *string `json:"fabricName,omitempty"`
9376	// Status - Status of registration of this container with the Recovery Services Vault.
9377	Status *string `json:"status,omitempty"`
9378	// FriendlyName - Friendly name of this container.
9379	FriendlyName *string `json:"friendlyName,omitempty"`
9380}
9381
9382// BMSContainersInquiryQueryObject the query filters that can be used with the inquire container API.
9383type BMSContainersInquiryQueryObject struct {
9384	// BackupManagementType - Backup management type for this container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9385	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9386	// WorkloadType - Workload type for this container. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
9387	WorkloadType WorkloadType `json:"workloadType,omitempty"`
9388}
9389
9390// BMSPOQueryObject filters to list items that can be backed up.
9391type BMSPOQueryObject struct {
9392	// BackupManagementType - Backup management type. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9393	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9394	// WorkloadType - Workload type. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
9395	WorkloadType WorkloadType `json:"workloadType,omitempty"`
9396	// ContainerName - Full name of the container whose Protectable Objects should be returned.
9397	ContainerName *string `json:"containerName,omitempty"`
9398	// Status - Backup status query parameter.
9399	Status *string `json:"status,omitempty"`
9400	// FriendlyName - Friendly name.
9401	FriendlyName *string `json:"friendlyName,omitempty"`
9402}
9403
9404// BMSRefreshContainersQueryObject the query filters that can be used with the refresh container API.
9405type BMSRefreshContainersQueryObject struct {
9406	// BackupManagementType - Backup management type for this container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9407	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9408}
9409
9410// BMSRPQueryObject filters to list backup copies.
9411type BMSRPQueryObject struct {
9412	// StartDate - Backup copies created after this time.
9413	StartDate *date.Time `json:"startDate,omitempty"`
9414	// EndDate - Backup copies created before this time.
9415	EndDate *date.Time `json:"endDate,omitempty"`
9416	// RestorePointQueryType - RestorePoint type. Possible values include: 'RestorePointQueryTypeInvalid', 'RestorePointQueryTypeFull', 'RestorePointQueryTypeLog', 'RestorePointQueryTypeDifferential', 'RestorePointQueryTypeFullAndDifferential', 'RestorePointQueryTypeAll'
9417	RestorePointQueryType RestorePointQueryType `json:"restorePointQueryType,omitempty"`
9418	// ExtendedInfo - In Get Recovery Point, it tells whether extended information about recovery point is asked.
9419	ExtendedInfo *bool `json:"extendedInfo,omitempty"`
9420}
9421
9422// BMSWorkloadItemQueryObject filters to list items that can be backed up.
9423type BMSWorkloadItemQueryObject struct {
9424	// BackupManagementType - Backup management type. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9425	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9426	// WorkloadItemType - Workload Item type. Possible values include: 'WorkloadItemTypeInvalid', 'WorkloadItemTypeSQLInstance', 'WorkloadItemTypeSQLDataBase', 'WorkloadItemTypeSAPHanaSystem', 'WorkloadItemTypeSAPHanaDatabase', 'WorkloadItemTypeSAPAseSystem', 'WorkloadItemTypeSAPAseDatabase'
9427	WorkloadItemType WorkloadItemType `json:"workloadItemType,omitempty"`
9428	// WorkloadType - Workload type. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
9429	WorkloadType WorkloadType `json:"workloadType,omitempty"`
9430	// ProtectionStatus - Backup status query parameter. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
9431	ProtectionStatus ProtectionStatus `json:"protectionStatus,omitempty"`
9432}
9433
9434// ClientDiscoveryDisplay localized display information of an operation.
9435type ClientDiscoveryDisplay struct {
9436	// Provider - Name of the provider for display purposes
9437	Provider *string `json:"provider,omitempty"`
9438	// Resource - ResourceType for which this Operation can be performed.
9439	Resource *string `json:"resource,omitempty"`
9440	// Operation - Operations Name itself.
9441	Operation *string `json:"operation,omitempty"`
9442	// Description - Description of the operation having details of what operation is about.
9443	Description *string `json:"description,omitempty"`
9444}
9445
9446// ClientDiscoveryForLogSpecification class to represent shoebox log specification in json client
9447// discovery.
9448type ClientDiscoveryForLogSpecification struct {
9449	// Name - Name for shoebox log specification.
9450	Name *string `json:"name,omitempty"`
9451	// DisplayName - Localized display name
9452	DisplayName *string `json:"displayName,omitempty"`
9453	// BlobDuration - blob duration of shoebox log specification
9454	BlobDuration *string `json:"blobDuration,omitempty"`
9455}
9456
9457// ClientDiscoveryForProperties class to represent shoebox properties in json client discovery.
9458type ClientDiscoveryForProperties struct {
9459	// ServiceSpecification - Operation properties.
9460	ServiceSpecification *ClientDiscoveryForServiceSpecification `json:"serviceSpecification,omitempty"`
9461}
9462
9463// ClientDiscoveryForServiceSpecification class to represent shoebox service specification in json client
9464// discovery.
9465type ClientDiscoveryForServiceSpecification struct {
9466	// LogSpecifications - List of log specifications of this operation.
9467	LogSpecifications *[]ClientDiscoveryForLogSpecification `json:"logSpecifications,omitempty"`
9468}
9469
9470// ClientDiscoveryResponse operations List response which contains list of available APIs.
9471type ClientDiscoveryResponse struct {
9472	autorest.Response `json:"-"`
9473	// Value - List of available operations.
9474	Value *[]ClientDiscoveryValueForSingleAPI `json:"value,omitempty"`
9475	// NextLink - Link to the next chunk of Response.
9476	NextLink *string `json:"nextLink,omitempty"`
9477}
9478
9479// ClientDiscoveryResponseIterator provides access to a complete listing of
9480// ClientDiscoveryValueForSingleAPI values.
9481type ClientDiscoveryResponseIterator struct {
9482	i    int
9483	page ClientDiscoveryResponsePage
9484}
9485
9486// NextWithContext advances to the next value.  If there was an error making
9487// the request the iterator does not advance and the error is returned.
9488func (iter *ClientDiscoveryResponseIterator) NextWithContext(ctx context.Context) (err error) {
9489	if tracing.IsEnabled() {
9490		ctx = tracing.StartSpan(ctx, fqdn+"/ClientDiscoveryResponseIterator.NextWithContext")
9491		defer func() {
9492			sc := -1
9493			if iter.Response().Response.Response != nil {
9494				sc = iter.Response().Response.Response.StatusCode
9495			}
9496			tracing.EndSpan(ctx, sc, err)
9497		}()
9498	}
9499	iter.i++
9500	if iter.i < len(iter.page.Values()) {
9501		return nil
9502	}
9503	err = iter.page.NextWithContext(ctx)
9504	if err != nil {
9505		iter.i--
9506		return err
9507	}
9508	iter.i = 0
9509	return nil
9510}
9511
9512// Next advances to the next value.  If there was an error making
9513// the request the iterator does not advance and the error is returned.
9514// Deprecated: Use NextWithContext() instead.
9515func (iter *ClientDiscoveryResponseIterator) Next() error {
9516	return iter.NextWithContext(context.Background())
9517}
9518
9519// NotDone returns true if the enumeration should be started or is not yet complete.
9520func (iter ClientDiscoveryResponseIterator) NotDone() bool {
9521	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9522}
9523
9524// Response returns the raw server response from the last page request.
9525func (iter ClientDiscoveryResponseIterator) Response() ClientDiscoveryResponse {
9526	return iter.page.Response()
9527}
9528
9529// Value returns the current value or a zero-initialized value if the
9530// iterator has advanced beyond the end of the collection.
9531func (iter ClientDiscoveryResponseIterator) Value() ClientDiscoveryValueForSingleAPI {
9532	if !iter.page.NotDone() {
9533		return ClientDiscoveryValueForSingleAPI{}
9534	}
9535	return iter.page.Values()[iter.i]
9536}
9537
9538// Creates a new instance of the ClientDiscoveryResponseIterator type.
9539func NewClientDiscoveryResponseIterator(page ClientDiscoveryResponsePage) ClientDiscoveryResponseIterator {
9540	return ClientDiscoveryResponseIterator{page: page}
9541}
9542
9543// IsEmpty returns true if the ListResult contains no values.
9544func (cdr ClientDiscoveryResponse) IsEmpty() bool {
9545	return cdr.Value == nil || len(*cdr.Value) == 0
9546}
9547
9548// hasNextLink returns true if the NextLink is not empty.
9549func (cdr ClientDiscoveryResponse) hasNextLink() bool {
9550	return cdr.NextLink != nil && len(*cdr.NextLink) != 0
9551}
9552
9553// clientDiscoveryResponsePreparer prepares a request to retrieve the next set of results.
9554// It returns nil if no more results exist.
9555func (cdr ClientDiscoveryResponse) clientDiscoveryResponsePreparer(ctx context.Context) (*http.Request, error) {
9556	if !cdr.hasNextLink() {
9557		return nil, nil
9558	}
9559	return autorest.Prepare((&http.Request{}).WithContext(ctx),
9560		autorest.AsJSON(),
9561		autorest.AsGet(),
9562		autorest.WithBaseURL(to.String(cdr.NextLink)))
9563}
9564
9565// ClientDiscoveryResponsePage contains a page of ClientDiscoveryValueForSingleAPI values.
9566type ClientDiscoveryResponsePage struct {
9567	fn  func(context.Context, ClientDiscoveryResponse) (ClientDiscoveryResponse, error)
9568	cdr ClientDiscoveryResponse
9569}
9570
9571// NextWithContext advances to the next page of values.  If there was an error making
9572// the request the page does not advance and the error is returned.
9573func (page *ClientDiscoveryResponsePage) NextWithContext(ctx context.Context) (err error) {
9574	if tracing.IsEnabled() {
9575		ctx = tracing.StartSpan(ctx, fqdn+"/ClientDiscoveryResponsePage.NextWithContext")
9576		defer func() {
9577			sc := -1
9578			if page.Response().Response.Response != nil {
9579				sc = page.Response().Response.Response.StatusCode
9580			}
9581			tracing.EndSpan(ctx, sc, err)
9582		}()
9583	}
9584	for {
9585		next, err := page.fn(ctx, page.cdr)
9586		if err != nil {
9587			return err
9588		}
9589		page.cdr = next
9590		if !next.hasNextLink() || !next.IsEmpty() {
9591			break
9592		}
9593	}
9594	return nil
9595}
9596
9597// Next advances to the next page of values.  If there was an error making
9598// the request the page does not advance and the error is returned.
9599// Deprecated: Use NextWithContext() instead.
9600func (page *ClientDiscoveryResponsePage) Next() error {
9601	return page.NextWithContext(context.Background())
9602}
9603
9604// NotDone returns true if the page enumeration should be started or is not yet complete.
9605func (page ClientDiscoveryResponsePage) NotDone() bool {
9606	return !page.cdr.IsEmpty()
9607}
9608
9609// Response returns the raw server response from the last page request.
9610func (page ClientDiscoveryResponsePage) Response() ClientDiscoveryResponse {
9611	return page.cdr
9612}
9613
9614// Values returns the slice of values for the current page or nil if there are no values.
9615func (page ClientDiscoveryResponsePage) Values() []ClientDiscoveryValueForSingleAPI {
9616	if page.cdr.IsEmpty() {
9617		return nil
9618	}
9619	return *page.cdr.Value
9620}
9621
9622// Creates a new instance of the ClientDiscoveryResponsePage type.
9623func NewClientDiscoveryResponsePage(cur ClientDiscoveryResponse, getNextPage func(context.Context, ClientDiscoveryResponse) (ClientDiscoveryResponse, error)) ClientDiscoveryResponsePage {
9624	return ClientDiscoveryResponsePage{
9625		fn:  getNextPage,
9626		cdr: cur,
9627	}
9628}
9629
9630// ClientDiscoveryValueForSingleAPI available operation details.
9631type ClientDiscoveryValueForSingleAPI struct {
9632	// Name - Name of the Operation.
9633	Name *string `json:"name,omitempty"`
9634	// Display - Contains the localized display information for this particular operation
9635	Display *ClientDiscoveryDisplay `json:"display,omitempty"`
9636	// Origin - The intended executor of the operation;governs the display of the operation in the RBAC UX and the audit logs UX
9637	Origin *string `json:"origin,omitempty"`
9638	// Properties - ShoeBox properties for the given operation.
9639	Properties *ClientDiscoveryForProperties `json:"properties,omitempty"`
9640}
9641
9642// ClientScriptForConnect client script details for file / folder restore.
9643type ClientScriptForConnect struct {
9644	// ScriptContent - File content of the client script for file / folder restore.
9645	ScriptContent *string `json:"scriptContent,omitempty"`
9646	// ScriptExtension - File extension of the client script for file / folder restore - .ps1 , .sh , etc.
9647	ScriptExtension *string `json:"scriptExtension,omitempty"`
9648	// OsType - OS type - Windows, Linux etc. for which this file / folder restore client script works.
9649	OsType *string `json:"osType,omitempty"`
9650	// URL - URL of Executable from where to source the content. If this is not null then ScriptContent should not be used
9651	URL *string `json:"url,omitempty"`
9652	// ScriptNameSuffix - Mandatory suffix that should be added to the name of script that is given for download to user.
9653	// If its null or empty then , ignore it.
9654	ScriptNameSuffix *string `json:"scriptNameSuffix,omitempty"`
9655}
9656
9657// ContainerIdentityInfo container identity information
9658type ContainerIdentityInfo struct {
9659	// UniqueName - Unique name of the container
9660	UniqueName *string `json:"uniqueName,omitempty"`
9661	// AadTenantID - Protection container identity - AAD Tenant
9662	AadTenantID *string `json:"aadTenantId,omitempty"`
9663	// ServicePrincipalClientID - Protection container identity - AAD Service Principal
9664	ServicePrincipalClientID *string `json:"servicePrincipalClientId,omitempty"`
9665	// Audience - Protection container identity - Audience
9666	Audience *string `json:"audience,omitempty"`
9667}
9668
9669// DailyRetentionFormat daily retention format.
9670type DailyRetentionFormat struct {
9671	// DaysOfTheMonth - List of days of the month.
9672	DaysOfTheMonth *[]Day `json:"daysOfTheMonth,omitempty"`
9673}
9674
9675// DailyRetentionSchedule daily retention schedule.
9676type DailyRetentionSchedule struct {
9677	// RetentionTimes - Retention times of retention policy.
9678	RetentionTimes *[]date.Time `json:"retentionTimes,omitempty"`
9679	// RetentionDuration - Retention duration of retention Policy.
9680	RetentionDuration *RetentionDuration `json:"retentionDuration,omitempty"`
9681}
9682
9683// Day day of the week.
9684type Day struct {
9685	// Date - Date of the month
9686	Date *int32 `json:"date,omitempty"`
9687	// IsLast - Whether Date is last date of month
9688	IsLast *bool `json:"isLast,omitempty"`
9689}
9690
9691// DiskExclusionProperties ...
9692type DiskExclusionProperties struct {
9693	// DiskLunList - List of Disks' Logical Unit Numbers (LUN) to be used for VM Protection.
9694	DiskLunList *[]int32 `json:"diskLunList,omitempty"`
9695	// IsInclusionList - Flag to indicate whether DiskLunList is to be included/ excluded from backup.
9696	IsInclusionList *bool `json:"isInclusionList,omitempty"`
9697}
9698
9699// DiskInformation disk information
9700type DiskInformation struct {
9701	Lun  *int32  `json:"lun,omitempty"`
9702	Name *string `json:"name,omitempty"`
9703}
9704
9705// DistributedNodesInfo this is used to represent the various nodes of the distributed container.
9706type DistributedNodesInfo struct {
9707	// NodeName - Name of the node under a distributed container.
9708	NodeName *string `json:"nodeName,omitempty"`
9709	// Status - Status of this Node.
9710	// Failed | Succeeded
9711	Status *string `json:"status,omitempty"`
9712	// ErrorDetail - Error Details if the Status is non-success.
9713	ErrorDetail *ErrorDetail `json:"errorDetail,omitempty"`
9714}
9715
9716// DpmBackupEngine data Protection Manager (DPM) specific backup engine.
9717type DpmBackupEngine struct {
9718	// FriendlyName - Friendly name of the backup engine.
9719	FriendlyName *string `json:"friendlyName,omitempty"`
9720	// BackupManagementType - Type of backup management for the backup engine. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9721	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9722	// RegistrationStatus - Registration status of the backup engine with the Recovery Services Vault.
9723	RegistrationStatus *string `json:"registrationStatus,omitempty"`
9724	// BackupEngineState - Status of the backup engine with the Recovery Services Vault. = {Active/Deleting/DeleteFailed}
9725	BackupEngineState *string `json:"backupEngineState,omitempty"`
9726	// HealthStatus - Backup status of the backup engine.
9727	HealthStatus *string `json:"healthStatus,omitempty"`
9728	// CanReRegister - Flag indicating if the backup engine be registered, once already registered.
9729	CanReRegister *bool `json:"canReRegister,omitempty"`
9730	// BackupEngineID - ID of the backup engine.
9731	BackupEngineID *string `json:"backupEngineId,omitempty"`
9732	// DpmVersion - Backup engine version
9733	DpmVersion *string `json:"dpmVersion,omitempty"`
9734	// AzureBackupAgentVersion - Backup agent version
9735	AzureBackupAgentVersion *string `json:"azureBackupAgentVersion,omitempty"`
9736	// IsAzureBackupAgentUpgradeAvailable - To check if backup agent upgrade available
9737	IsAzureBackupAgentUpgradeAvailable *bool `json:"isAzureBackupAgentUpgradeAvailable,omitempty"`
9738	// IsDpmUpgradeAvailable - To check if backup engine upgrade available
9739	IsDpmUpgradeAvailable *bool `json:"isDpmUpgradeAvailable,omitempty"`
9740	// ExtendedInfo - Extended info of the backupengine
9741	ExtendedInfo *EngineExtendedInfo `json:"extendedInfo,omitempty"`
9742	// BackupEngineType - Possible values include: 'BackupEngineTypeBackupEngineBase', 'BackupEngineTypeAzureBackupServerEngine', 'BackupEngineTypeDpmBackupEngine'
9743	BackupEngineType EngineType `json:"backupEngineType,omitempty"`
9744}
9745
9746// MarshalJSON is the custom marshaler for DpmBackupEngine.
9747func (dbe DpmBackupEngine) MarshalJSON() ([]byte, error) {
9748	dbe.BackupEngineType = BackupEngineTypeDpmBackupEngine
9749	objectMap := make(map[string]interface{})
9750	if dbe.FriendlyName != nil {
9751		objectMap["friendlyName"] = dbe.FriendlyName
9752	}
9753	if dbe.BackupManagementType != "" {
9754		objectMap["backupManagementType"] = dbe.BackupManagementType
9755	}
9756	if dbe.RegistrationStatus != nil {
9757		objectMap["registrationStatus"] = dbe.RegistrationStatus
9758	}
9759	if dbe.BackupEngineState != nil {
9760		objectMap["backupEngineState"] = dbe.BackupEngineState
9761	}
9762	if dbe.HealthStatus != nil {
9763		objectMap["healthStatus"] = dbe.HealthStatus
9764	}
9765	if dbe.CanReRegister != nil {
9766		objectMap["canReRegister"] = dbe.CanReRegister
9767	}
9768	if dbe.BackupEngineID != nil {
9769		objectMap["backupEngineId"] = dbe.BackupEngineID
9770	}
9771	if dbe.DpmVersion != nil {
9772		objectMap["dpmVersion"] = dbe.DpmVersion
9773	}
9774	if dbe.AzureBackupAgentVersion != nil {
9775		objectMap["azureBackupAgentVersion"] = dbe.AzureBackupAgentVersion
9776	}
9777	if dbe.IsAzureBackupAgentUpgradeAvailable != nil {
9778		objectMap["isAzureBackupAgentUpgradeAvailable"] = dbe.IsAzureBackupAgentUpgradeAvailable
9779	}
9780	if dbe.IsDpmUpgradeAvailable != nil {
9781		objectMap["isDpmUpgradeAvailable"] = dbe.IsDpmUpgradeAvailable
9782	}
9783	if dbe.ExtendedInfo != nil {
9784		objectMap["extendedInfo"] = dbe.ExtendedInfo
9785	}
9786	if dbe.BackupEngineType != "" {
9787		objectMap["backupEngineType"] = dbe.BackupEngineType
9788	}
9789	return json.Marshal(objectMap)
9790}
9791
9792// AsAzureBackupServerEngine is the BasicEngineBase implementation for DpmBackupEngine.
9793func (dbe DpmBackupEngine) AsAzureBackupServerEngine() (*AzureBackupServerEngine, bool) {
9794	return nil, false
9795}
9796
9797// AsDpmBackupEngine is the BasicEngineBase implementation for DpmBackupEngine.
9798func (dbe DpmBackupEngine) AsDpmBackupEngine() (*DpmBackupEngine, bool) {
9799	return &dbe, true
9800}
9801
9802// AsEngineBase is the BasicEngineBase implementation for DpmBackupEngine.
9803func (dbe DpmBackupEngine) AsEngineBase() (*EngineBase, bool) {
9804	return nil, false
9805}
9806
9807// AsBasicEngineBase is the BasicEngineBase implementation for DpmBackupEngine.
9808func (dbe DpmBackupEngine) AsBasicEngineBase() (BasicEngineBase, bool) {
9809	return &dbe, true
9810}
9811
9812// BasicDpmContainer DPM workload-specific protection container.
9813type BasicDpmContainer interface {
9814	AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool)
9815	AsDpmContainer() (*DpmContainer, bool)
9816}
9817
9818// DpmContainer DPM workload-specific protection container.
9819type DpmContainer struct {
9820	// CanReRegister - Specifies whether the container is re-registrable.
9821	CanReRegister *bool `json:"canReRegister,omitempty"`
9822	// ContainerID - ID of container.
9823	ContainerID *string `json:"containerId,omitempty"`
9824	// ProtectedItemCount - Number of protected items in the BackupEngine
9825	ProtectedItemCount *int64 `json:"protectedItemCount,omitempty"`
9826	// DpmAgentVersion - Backup engine Agent version
9827	DpmAgentVersion *string `json:"dpmAgentVersion,omitempty"`
9828	// DpmServers - List of BackupEngines protecting the container
9829	DpmServers *[]string `json:"dpmServers,omitempty"`
9830	// UpgradeAvailable - To check if upgrade available
9831	UpgradeAvailable *bool `json:"upgradeAvailable,omitempty"`
9832	// ProtectionStatus - Protection status of the container.
9833	ProtectionStatus *string `json:"protectionStatus,omitempty"`
9834	// ExtendedInfo - Extended Info of the container.
9835	ExtendedInfo *DPMContainerExtendedInfo `json:"extendedInfo,omitempty"`
9836	// FriendlyName - Friendly name of the container.
9837	FriendlyName *string `json:"friendlyName,omitempty"`
9838	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
9839	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
9840	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
9841	RegistrationStatus *string `json:"registrationStatus,omitempty"`
9842	// HealthStatus - Status of health of the container.
9843	HealthStatus *string `json:"healthStatus,omitempty"`
9844	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
9845	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
9846}
9847
9848func unmarshalBasicDpmContainer(body []byte) (BasicDpmContainer, error) {
9849	var m map[string]interface{}
9850	err := json.Unmarshal(body, &m)
9851	if err != nil {
9852		return nil, err
9853	}
9854
9855	switch m["containerType"] {
9856	case string(ContainerTypeAzureBackupServerContainer1):
9857		var absc AzureBackupServerContainer
9858		err := json.Unmarshal(body, &absc)
9859		return absc, err
9860	default:
9861		var dc DpmContainer
9862		err := json.Unmarshal(body, &dc)
9863		return dc, err
9864	}
9865}
9866func unmarshalBasicDpmContainerArray(body []byte) ([]BasicDpmContainer, error) {
9867	var rawMessages []*json.RawMessage
9868	err := json.Unmarshal(body, &rawMessages)
9869	if err != nil {
9870		return nil, err
9871	}
9872
9873	dcArray := make([]BasicDpmContainer, len(rawMessages))
9874
9875	for index, rawMessage := range rawMessages {
9876		dc, err := unmarshalBasicDpmContainer(*rawMessage)
9877		if err != nil {
9878			return nil, err
9879		}
9880		dcArray[index] = dc
9881	}
9882	return dcArray, nil
9883}
9884
9885// MarshalJSON is the custom marshaler for DpmContainer.
9886func (dc DpmContainer) MarshalJSON() ([]byte, error) {
9887	dc.ContainerType = ContainerTypeDPMContainer1
9888	objectMap := make(map[string]interface{})
9889	if dc.CanReRegister != nil {
9890		objectMap["canReRegister"] = dc.CanReRegister
9891	}
9892	if dc.ContainerID != nil {
9893		objectMap["containerId"] = dc.ContainerID
9894	}
9895	if dc.ProtectedItemCount != nil {
9896		objectMap["protectedItemCount"] = dc.ProtectedItemCount
9897	}
9898	if dc.DpmAgentVersion != nil {
9899		objectMap["dpmAgentVersion"] = dc.DpmAgentVersion
9900	}
9901	if dc.DpmServers != nil {
9902		objectMap["dpmServers"] = dc.DpmServers
9903	}
9904	if dc.UpgradeAvailable != nil {
9905		objectMap["upgradeAvailable"] = dc.UpgradeAvailable
9906	}
9907	if dc.ProtectionStatus != nil {
9908		objectMap["protectionStatus"] = dc.ProtectionStatus
9909	}
9910	if dc.ExtendedInfo != nil {
9911		objectMap["extendedInfo"] = dc.ExtendedInfo
9912	}
9913	if dc.FriendlyName != nil {
9914		objectMap["friendlyName"] = dc.FriendlyName
9915	}
9916	if dc.BackupManagementType != "" {
9917		objectMap["backupManagementType"] = dc.BackupManagementType
9918	}
9919	if dc.RegistrationStatus != nil {
9920		objectMap["registrationStatus"] = dc.RegistrationStatus
9921	}
9922	if dc.HealthStatus != nil {
9923		objectMap["healthStatus"] = dc.HealthStatus
9924	}
9925	if dc.ContainerType != "" {
9926		objectMap["containerType"] = dc.ContainerType
9927	}
9928	return json.Marshal(objectMap)
9929}
9930
9931// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for DpmContainer.
9932func (dc DpmContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
9933	return nil, false
9934}
9935
9936// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for DpmContainer.
9937func (dc DpmContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
9938	return nil, false
9939}
9940
9941// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for DpmContainer.
9942func (dc DpmContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
9943	return nil, false
9944}
9945
9946// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
9947func (dc DpmContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
9948	return nil, false
9949}
9950
9951// AsAzureSQLContainer is the BasicProtectionContainer implementation for DpmContainer.
9952func (dc DpmContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
9953	return nil, false
9954}
9955
9956// AsAzureStorageContainer is the BasicProtectionContainer implementation for DpmContainer.
9957func (dc DpmContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
9958	return nil, false
9959}
9960
9961// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
9962func (dc DpmContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
9963	return nil, false
9964}
9965
9966// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for DpmContainer.
9967func (dc DpmContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
9968	return nil, false
9969}
9970
9971// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for DpmContainer.
9972func (dc DpmContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
9973	return nil, false
9974}
9975
9976// AsDpmContainer is the BasicProtectionContainer implementation for DpmContainer.
9977func (dc DpmContainer) AsDpmContainer() (*DpmContainer, bool) {
9978	return &dc, true
9979}
9980
9981// AsBasicDpmContainer is the BasicProtectionContainer implementation for DpmContainer.
9982func (dc DpmContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
9983	return &dc, true
9984}
9985
9986// AsGenericContainer is the BasicProtectionContainer implementation for DpmContainer.
9987func (dc DpmContainer) AsGenericContainer() (*GenericContainer, bool) {
9988	return nil, false
9989}
9990
9991// AsIaaSVMContainer is the BasicProtectionContainer implementation for DpmContainer.
9992func (dc DpmContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
9993	return nil, false
9994}
9995
9996// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for DpmContainer.
9997func (dc DpmContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
9998	return nil, false
9999}
10000
10001// AsMabContainer is the BasicProtectionContainer implementation for DpmContainer.
10002func (dc DpmContainer) AsMabContainer() (*MabContainer, bool) {
10003	return nil, false
10004}
10005
10006// AsProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
10007func (dc DpmContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
10008	return nil, false
10009}
10010
10011// AsBasicProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
10012func (dc DpmContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
10013	return &dc, true
10014}
10015
10016// DPMContainerExtendedInfo additional information of the DPMContainer.
10017type DPMContainerExtendedInfo struct {
10018	// LastRefreshedAt - Last refresh time of the DPMContainer.
10019	LastRefreshedAt *date.Time `json:"lastRefreshedAt,omitempty"`
10020}
10021
10022// DpmErrorInfo DPM workload-specific error information.
10023type DpmErrorInfo struct {
10024	// ErrorString - Localized error string.
10025	ErrorString *string `json:"errorString,omitempty"`
10026	// Recommendations - List of localized recommendations for above error code.
10027	Recommendations *[]string `json:"recommendations,omitempty"`
10028}
10029
10030// DpmJob DPM workload-specific job object.
10031type DpmJob struct {
10032	// Duration - Time elapsed for job.
10033	Duration *string `json:"duration,omitempty"`
10034	// DpmServerName - DPM server name managing the backup item or backup job.
10035	DpmServerName *string `json:"dpmServerName,omitempty"`
10036	// ContainerName - Name of cluster/server protecting current backup item, if any.
10037	ContainerName *string `json:"containerName,omitempty"`
10038	// ContainerType - Type of container.
10039	ContainerType *string `json:"containerType,omitempty"`
10040	// WorkloadType - Type of backup item.
10041	WorkloadType *string `json:"workloadType,omitempty"`
10042	// ActionsInfo - The state/actions applicable on this job like cancel/retry.
10043	ActionsInfo *[]JobSupportedAction `json:"actionsInfo,omitempty"`
10044	// ErrorDetails - The errors.
10045	ErrorDetails *[]DpmErrorInfo `json:"errorDetails,omitempty"`
10046	// ExtendedInfo - Additional information for this job.
10047	ExtendedInfo *DpmJobExtendedInfo `json:"extendedInfo,omitempty"`
10048	// EntityFriendlyName - Friendly name of the entity on which the current job is executing.
10049	EntityFriendlyName *string `json:"entityFriendlyName,omitempty"`
10050	// BackupManagementType - Backup management type to execute the current job. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
10051	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
10052	// Operation - The operation name.
10053	Operation *string `json:"operation,omitempty"`
10054	// Status - Job status.
10055	Status *string `json:"status,omitempty"`
10056	// StartTime - The start time.
10057	StartTime *date.Time `json:"startTime,omitempty"`
10058	// EndTime - The end time.
10059	EndTime *date.Time `json:"endTime,omitempty"`
10060	// ActivityID - ActivityId of job.
10061	ActivityID *string `json:"activityId,omitempty"`
10062	// JobType - Possible values include: 'JobTypeJob', 'JobTypeAzureIaaSVMJob', 'JobTypeAzureStorageJob', 'JobTypeAzureWorkloadJob', 'JobTypeDpmJob', 'JobTypeMabJob'
10063	JobType JobType `json:"jobType,omitempty"`
10064}
10065
10066// MarshalJSON is the custom marshaler for DpmJob.
10067func (dj DpmJob) MarshalJSON() ([]byte, error) {
10068	dj.JobType = JobTypeDpmJob
10069	objectMap := make(map[string]interface{})
10070	if dj.Duration != nil {
10071		objectMap["duration"] = dj.Duration
10072	}
10073	if dj.DpmServerName != nil {
10074		objectMap["dpmServerName"] = dj.DpmServerName
10075	}
10076	if dj.ContainerName != nil {
10077		objectMap["containerName"] = dj.ContainerName
10078	}
10079	if dj.ContainerType != nil {
10080		objectMap["containerType"] = dj.ContainerType
10081	}
10082	if dj.WorkloadType != nil {
10083		objectMap["workloadType"] = dj.WorkloadType
10084	}
10085	if dj.ActionsInfo != nil {
10086		objectMap["actionsInfo"] = dj.ActionsInfo
10087	}
10088	if dj.ErrorDetails != nil {
10089		objectMap["errorDetails"] = dj.ErrorDetails
10090	}
10091	if dj.ExtendedInfo != nil {
10092		objectMap["extendedInfo"] = dj.ExtendedInfo
10093	}
10094	if dj.EntityFriendlyName != nil {
10095		objectMap["entityFriendlyName"] = dj.EntityFriendlyName
10096	}
10097	if dj.BackupManagementType != "" {
10098		objectMap["backupManagementType"] = dj.BackupManagementType
10099	}
10100	if dj.Operation != nil {
10101		objectMap["operation"] = dj.Operation
10102	}
10103	if dj.Status != nil {
10104		objectMap["status"] = dj.Status
10105	}
10106	if dj.StartTime != nil {
10107		objectMap["startTime"] = dj.StartTime
10108	}
10109	if dj.EndTime != nil {
10110		objectMap["endTime"] = dj.EndTime
10111	}
10112	if dj.ActivityID != nil {
10113		objectMap["activityId"] = dj.ActivityID
10114	}
10115	if dj.JobType != "" {
10116		objectMap["jobType"] = dj.JobType
10117	}
10118	return json.Marshal(objectMap)
10119}
10120
10121// AsAzureIaaSVMJob is the BasicJob implementation for DpmJob.
10122func (dj DpmJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
10123	return nil, false
10124}
10125
10126// AsAzureStorageJob is the BasicJob implementation for DpmJob.
10127func (dj DpmJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
10128	return nil, false
10129}
10130
10131// AsAzureWorkloadJob is the BasicJob implementation for DpmJob.
10132func (dj DpmJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
10133	return nil, false
10134}
10135
10136// AsDpmJob is the BasicJob implementation for DpmJob.
10137func (dj DpmJob) AsDpmJob() (*DpmJob, bool) {
10138	return &dj, true
10139}
10140
10141// AsMabJob is the BasicJob implementation for DpmJob.
10142func (dj DpmJob) AsMabJob() (*MabJob, bool) {
10143	return nil, false
10144}
10145
10146// AsJob is the BasicJob implementation for DpmJob.
10147func (dj DpmJob) AsJob() (*Job, bool) {
10148	return nil, false
10149}
10150
10151// AsBasicJob is the BasicJob implementation for DpmJob.
10152func (dj DpmJob) AsBasicJob() (BasicJob, bool) {
10153	return &dj, true
10154}
10155
10156// DpmJobExtendedInfo additional information on the DPM workload-specific job.
10157type DpmJobExtendedInfo struct {
10158	// TasksList - List of tasks associated with this job.
10159	TasksList *[]DpmJobTaskDetails `json:"tasksList,omitempty"`
10160	// PropertyBag - The job properties.
10161	PropertyBag map[string]*string `json:"propertyBag"`
10162	// DynamicErrorMessage - Non localized error message on job execution.
10163	DynamicErrorMessage *string `json:"dynamicErrorMessage,omitempty"`
10164}
10165
10166// MarshalJSON is the custom marshaler for DpmJobExtendedInfo.
10167func (djei DpmJobExtendedInfo) MarshalJSON() ([]byte, error) {
10168	objectMap := make(map[string]interface{})
10169	if djei.TasksList != nil {
10170		objectMap["tasksList"] = djei.TasksList
10171	}
10172	if djei.PropertyBag != nil {
10173		objectMap["propertyBag"] = djei.PropertyBag
10174	}
10175	if djei.DynamicErrorMessage != nil {
10176		objectMap["dynamicErrorMessage"] = djei.DynamicErrorMessage
10177	}
10178	return json.Marshal(objectMap)
10179}
10180
10181// DpmJobTaskDetails DPM workload-specific job task details.
10182type DpmJobTaskDetails struct {
10183	// TaskID - The task display name.
10184	TaskID *string `json:"taskId,omitempty"`
10185	// StartTime - The start time.
10186	StartTime *date.Time `json:"startTime,omitempty"`
10187	// EndTime - The end time.
10188	EndTime *date.Time `json:"endTime,omitempty"`
10189	// Duration - Time elapsed for task.
10190	Duration *string `json:"duration,omitempty"`
10191	// Status - The status.
10192	Status *string `json:"status,omitempty"`
10193}
10194
10195// DPMProtectedItem additional information on Backup engine specific backup item.
10196type DPMProtectedItem struct {
10197	// FriendlyName - Friendly name of the managed item
10198	FriendlyName *string `json:"friendlyName,omitempty"`
10199	// BackupEngineName - Backup Management server protecting this backup item
10200	BackupEngineName *string `json:"backupEngineName,omitempty"`
10201	// ProtectionState - Protection state of the backup engine. Possible values include: 'ProtectedItemStateInvalid', 'ProtectedItemStateIRPending', 'ProtectedItemStateProtected', 'ProtectedItemStateProtectionError', 'ProtectedItemStateProtectionStopped', 'ProtectedItemStateProtectionPaused'
10202	ProtectionState ProtectedItemState `json:"protectionState,omitempty"`
10203	// ExtendedInfo - Extended info of the backup item.
10204	ExtendedInfo *DPMProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
10205	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
10206	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
10207	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
10208	WorkloadType DataSourceType `json:"workloadType,omitempty"`
10209	// ContainerName - Unique name of container
10210	ContainerName *string `json:"containerName,omitempty"`
10211	// SourceResourceID - ARM ID of the resource to be backed up.
10212	SourceResourceID *string `json:"sourceResourceId,omitempty"`
10213	// PolicyID - ID of the backup policy with which this item is backed up.
10214	PolicyID *string `json:"policyId,omitempty"`
10215	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
10216	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
10217	// BackupSetName - Name of the backup set the backup item belongs to
10218	BackupSetName *string `json:"backupSetName,omitempty"`
10219	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
10220	CreateMode CreateMode `json:"createMode,omitempty"`
10221	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
10222	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
10223	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
10224	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
10225	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
10226	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
10227	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
10228	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
10229	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
10230	IsRehydrate *bool `json:"isRehydrate,omitempty"`
10231	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
10232	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
10233}
10234
10235// MarshalJSON is the custom marshaler for DPMProtectedItem.
10236func (dpi DPMProtectedItem) MarshalJSON() ([]byte, error) {
10237	dpi.ProtectedItemType = ProtectedItemTypeDPMProtectedItem
10238	objectMap := make(map[string]interface{})
10239	if dpi.FriendlyName != nil {
10240		objectMap["friendlyName"] = dpi.FriendlyName
10241	}
10242	if dpi.BackupEngineName != nil {
10243		objectMap["backupEngineName"] = dpi.BackupEngineName
10244	}
10245	if dpi.ProtectionState != "" {
10246		objectMap["protectionState"] = dpi.ProtectionState
10247	}
10248	if dpi.ExtendedInfo != nil {
10249		objectMap["extendedInfo"] = dpi.ExtendedInfo
10250	}
10251	if dpi.BackupManagementType != "" {
10252		objectMap["backupManagementType"] = dpi.BackupManagementType
10253	}
10254	if dpi.WorkloadType != "" {
10255		objectMap["workloadType"] = dpi.WorkloadType
10256	}
10257	if dpi.ContainerName != nil {
10258		objectMap["containerName"] = dpi.ContainerName
10259	}
10260	if dpi.SourceResourceID != nil {
10261		objectMap["sourceResourceId"] = dpi.SourceResourceID
10262	}
10263	if dpi.PolicyID != nil {
10264		objectMap["policyId"] = dpi.PolicyID
10265	}
10266	if dpi.LastRecoveryPoint != nil {
10267		objectMap["lastRecoveryPoint"] = dpi.LastRecoveryPoint
10268	}
10269	if dpi.BackupSetName != nil {
10270		objectMap["backupSetName"] = dpi.BackupSetName
10271	}
10272	if dpi.CreateMode != "" {
10273		objectMap["createMode"] = dpi.CreateMode
10274	}
10275	if dpi.DeferredDeleteTimeInUTC != nil {
10276		objectMap["deferredDeleteTimeInUTC"] = dpi.DeferredDeleteTimeInUTC
10277	}
10278	if dpi.IsScheduledForDeferredDelete != nil {
10279		objectMap["isScheduledForDeferredDelete"] = dpi.IsScheduledForDeferredDelete
10280	}
10281	if dpi.DeferredDeleteTimeRemaining != nil {
10282		objectMap["deferredDeleteTimeRemaining"] = dpi.DeferredDeleteTimeRemaining
10283	}
10284	if dpi.IsDeferredDeleteScheduleUpcoming != nil {
10285		objectMap["isDeferredDeleteScheduleUpcoming"] = dpi.IsDeferredDeleteScheduleUpcoming
10286	}
10287	if dpi.IsRehydrate != nil {
10288		objectMap["isRehydrate"] = dpi.IsRehydrate
10289	}
10290	if dpi.ProtectedItemType != "" {
10291		objectMap["protectedItemType"] = dpi.ProtectedItemType
10292	}
10293	return json.Marshal(objectMap)
10294}
10295
10296// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10297func (dpi DPMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
10298	return nil, false
10299}
10300
10301// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10302func (dpi DPMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
10303	return nil, false
10304}
10305
10306// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10307func (dpi DPMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
10308	return nil, false
10309}
10310
10311// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10312func (dpi DPMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
10313	return nil, false
10314}
10315
10316// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10317func (dpi DPMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
10318	return nil, false
10319}
10320
10321// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10322func (dpi DPMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
10323	return nil, false
10324}
10325
10326// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10327func (dpi DPMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
10328	return nil, false
10329}
10330
10331// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10332func (dpi DPMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
10333	return nil, false
10334}
10335
10336// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10337func (dpi DPMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
10338	return nil, false
10339}
10340
10341// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10342func (dpi DPMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
10343	return nil, false
10344}
10345
10346// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10347func (dpi DPMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
10348	return nil, false
10349}
10350
10351// AsDPMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10352func (dpi DPMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
10353	return &dpi, true
10354}
10355
10356// AsGenericProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10357func (dpi DPMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
10358	return nil, false
10359}
10360
10361// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10362func (dpi DPMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
10363	return nil, false
10364}
10365
10366// AsProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10367func (dpi DPMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
10368	return nil, false
10369}
10370
10371// AsBasicProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
10372func (dpi DPMProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
10373	return &dpi, true
10374}
10375
10376// DPMProtectedItemExtendedInfo additional information of DPM Protected item.
10377type DPMProtectedItemExtendedInfo struct {
10378	// ProtectableObjectLoadPath - Attribute to provide information on various DBs.
10379	ProtectableObjectLoadPath map[string]*string `json:"protectableObjectLoadPath"`
10380	// Protected - To check if backup item is disk protected.
10381	Protected *bool `json:"protected,omitempty"`
10382	// IsPresentOnCloud - To check if backup item is cloud protected.
10383	IsPresentOnCloud *bool `json:"isPresentOnCloud,omitempty"`
10384	// LastBackupStatus - Last backup status information on backup item.
10385	LastBackupStatus *string `json:"lastBackupStatus,omitempty"`
10386	// LastRefreshedAt - Last refresh time on backup item.
10387	LastRefreshedAt *date.Time `json:"lastRefreshedAt,omitempty"`
10388	// OldestRecoveryPoint - Oldest cloud recovery point time.
10389	OldestRecoveryPoint *date.Time `json:"oldestRecoveryPoint,omitempty"`
10390	// RecoveryPointCount - cloud recovery point count.
10391	RecoveryPointCount *int32 `json:"recoveryPointCount,omitempty"`
10392	// OnPremiseOldestRecoveryPoint - Oldest disk recovery point time.
10393	OnPremiseOldestRecoveryPoint *date.Time `json:"onPremiseOldestRecoveryPoint,omitempty"`
10394	// OnPremiseLatestRecoveryPoint - latest disk recovery point time.
10395	OnPremiseLatestRecoveryPoint *date.Time `json:"onPremiseLatestRecoveryPoint,omitempty"`
10396	// OnPremiseRecoveryPointCount - disk recovery point count.
10397	OnPremiseRecoveryPointCount *int32 `json:"onPremiseRecoveryPointCount,omitempty"`
10398	// IsCollocated - To check if backup item is collocated.
10399	IsCollocated *bool `json:"isCollocated,omitempty"`
10400	// ProtectionGroupName - Protection group name of the backup item.
10401	ProtectionGroupName *string `json:"protectionGroupName,omitempty"`
10402	// DiskStorageUsedInBytes - Used Disk storage in bytes.
10403	DiskStorageUsedInBytes *string `json:"diskStorageUsedInBytes,omitempty"`
10404	// TotalDiskStorageSizeInBytes - total Disk storage in bytes.
10405	TotalDiskStorageSizeInBytes *string `json:"totalDiskStorageSizeInBytes,omitempty"`
10406}
10407
10408// MarshalJSON is the custom marshaler for DPMProtectedItemExtendedInfo.
10409func (dpiei DPMProtectedItemExtendedInfo) MarshalJSON() ([]byte, error) {
10410	objectMap := make(map[string]interface{})
10411	if dpiei.ProtectableObjectLoadPath != nil {
10412		objectMap["protectableObjectLoadPath"] = dpiei.ProtectableObjectLoadPath
10413	}
10414	if dpiei.Protected != nil {
10415		objectMap["protected"] = dpiei.Protected
10416	}
10417	if dpiei.IsPresentOnCloud != nil {
10418		objectMap["isPresentOnCloud"] = dpiei.IsPresentOnCloud
10419	}
10420	if dpiei.LastBackupStatus != nil {
10421		objectMap["lastBackupStatus"] = dpiei.LastBackupStatus
10422	}
10423	if dpiei.LastRefreshedAt != nil {
10424		objectMap["lastRefreshedAt"] = dpiei.LastRefreshedAt
10425	}
10426	if dpiei.OldestRecoveryPoint != nil {
10427		objectMap["oldestRecoveryPoint"] = dpiei.OldestRecoveryPoint
10428	}
10429	if dpiei.RecoveryPointCount != nil {
10430		objectMap["recoveryPointCount"] = dpiei.RecoveryPointCount
10431	}
10432	if dpiei.OnPremiseOldestRecoveryPoint != nil {
10433		objectMap["onPremiseOldestRecoveryPoint"] = dpiei.OnPremiseOldestRecoveryPoint
10434	}
10435	if dpiei.OnPremiseLatestRecoveryPoint != nil {
10436		objectMap["onPremiseLatestRecoveryPoint"] = dpiei.OnPremiseLatestRecoveryPoint
10437	}
10438	if dpiei.OnPremiseRecoveryPointCount != nil {
10439		objectMap["onPremiseRecoveryPointCount"] = dpiei.OnPremiseRecoveryPointCount
10440	}
10441	if dpiei.IsCollocated != nil {
10442		objectMap["isCollocated"] = dpiei.IsCollocated
10443	}
10444	if dpiei.ProtectionGroupName != nil {
10445		objectMap["protectionGroupName"] = dpiei.ProtectionGroupName
10446	}
10447	if dpiei.DiskStorageUsedInBytes != nil {
10448		objectMap["diskStorageUsedInBytes"] = dpiei.DiskStorageUsedInBytes
10449	}
10450	if dpiei.TotalDiskStorageSizeInBytes != nil {
10451		objectMap["totalDiskStorageSizeInBytes"] = dpiei.TotalDiskStorageSizeInBytes
10452	}
10453	return json.Marshal(objectMap)
10454}
10455
10456// EncryptionDetails details needed if the VM was encrypted at the time of backup.
10457type EncryptionDetails struct {
10458	// EncryptionEnabled - Identifies whether this backup copy represents an encrypted VM at the time of backup.
10459	EncryptionEnabled *bool `json:"encryptionEnabled,omitempty"`
10460	// KekURL - Key Url.
10461	KekURL *string `json:"kekUrl,omitempty"`
10462	// SecretKeyURL - Secret Url.
10463	SecretKeyURL *string `json:"secretKeyUrl,omitempty"`
10464	// KekVaultID - ID of Key Vault where KEK is stored.
10465	KekVaultID *string `json:"kekVaultId,omitempty"`
10466	// SecretKeyVaultID - ID of Key Vault where Secret is stored.
10467	SecretKeyVaultID *string `json:"secretKeyVaultId,omitempty"`
10468}
10469
10470// BasicEngineBase the base backup engine class. All workload specific backup engines derive from this class.
10471type BasicEngineBase interface {
10472	AsAzureBackupServerEngine() (*AzureBackupServerEngine, bool)
10473	AsDpmBackupEngine() (*DpmBackupEngine, bool)
10474	AsEngineBase() (*EngineBase, bool)
10475}
10476
10477// EngineBase the base backup engine class. All workload specific backup engines derive from this class.
10478type EngineBase struct {
10479	// FriendlyName - Friendly name of the backup engine.
10480	FriendlyName *string `json:"friendlyName,omitempty"`
10481	// BackupManagementType - Type of backup management for the backup engine. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
10482	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
10483	// RegistrationStatus - Registration status of the backup engine with the Recovery Services Vault.
10484	RegistrationStatus *string `json:"registrationStatus,omitempty"`
10485	// BackupEngineState - Status of the backup engine with the Recovery Services Vault. = {Active/Deleting/DeleteFailed}
10486	BackupEngineState *string `json:"backupEngineState,omitempty"`
10487	// HealthStatus - Backup status of the backup engine.
10488	HealthStatus *string `json:"healthStatus,omitempty"`
10489	// CanReRegister - Flag indicating if the backup engine be registered, once already registered.
10490	CanReRegister *bool `json:"canReRegister,omitempty"`
10491	// BackupEngineID - ID of the backup engine.
10492	BackupEngineID *string `json:"backupEngineId,omitempty"`
10493	// DpmVersion - Backup engine version
10494	DpmVersion *string `json:"dpmVersion,omitempty"`
10495	// AzureBackupAgentVersion - Backup agent version
10496	AzureBackupAgentVersion *string `json:"azureBackupAgentVersion,omitempty"`
10497	// IsAzureBackupAgentUpgradeAvailable - To check if backup agent upgrade available
10498	IsAzureBackupAgentUpgradeAvailable *bool `json:"isAzureBackupAgentUpgradeAvailable,omitempty"`
10499	// IsDpmUpgradeAvailable - To check if backup engine upgrade available
10500	IsDpmUpgradeAvailable *bool `json:"isDpmUpgradeAvailable,omitempty"`
10501	// ExtendedInfo - Extended info of the backupengine
10502	ExtendedInfo *EngineExtendedInfo `json:"extendedInfo,omitempty"`
10503	// BackupEngineType - Possible values include: 'BackupEngineTypeBackupEngineBase', 'BackupEngineTypeAzureBackupServerEngine', 'BackupEngineTypeDpmBackupEngine'
10504	BackupEngineType EngineType `json:"backupEngineType,omitempty"`
10505}
10506
10507func unmarshalBasicEngineBase(body []byte) (BasicEngineBase, error) {
10508	var m map[string]interface{}
10509	err := json.Unmarshal(body, &m)
10510	if err != nil {
10511		return nil, err
10512	}
10513
10514	switch m["backupEngineType"] {
10515	case string(BackupEngineTypeAzureBackupServerEngine):
10516		var abse AzureBackupServerEngine
10517		err := json.Unmarshal(body, &abse)
10518		return abse, err
10519	case string(BackupEngineTypeDpmBackupEngine):
10520		var dbe DpmBackupEngine
10521		err := json.Unmarshal(body, &dbe)
10522		return dbe, err
10523	default:
10524		var eb EngineBase
10525		err := json.Unmarshal(body, &eb)
10526		return eb, err
10527	}
10528}
10529func unmarshalBasicEngineBaseArray(body []byte) ([]BasicEngineBase, error) {
10530	var rawMessages []*json.RawMessage
10531	err := json.Unmarshal(body, &rawMessages)
10532	if err != nil {
10533		return nil, err
10534	}
10535
10536	ebArray := make([]BasicEngineBase, len(rawMessages))
10537
10538	for index, rawMessage := range rawMessages {
10539		eb, err := unmarshalBasicEngineBase(*rawMessage)
10540		if err != nil {
10541			return nil, err
10542		}
10543		ebArray[index] = eb
10544	}
10545	return ebArray, nil
10546}
10547
10548// MarshalJSON is the custom marshaler for EngineBase.
10549func (eb EngineBase) MarshalJSON() ([]byte, error) {
10550	eb.BackupEngineType = BackupEngineTypeBackupEngineBase
10551	objectMap := make(map[string]interface{})
10552	if eb.FriendlyName != nil {
10553		objectMap["friendlyName"] = eb.FriendlyName
10554	}
10555	if eb.BackupManagementType != "" {
10556		objectMap["backupManagementType"] = eb.BackupManagementType
10557	}
10558	if eb.RegistrationStatus != nil {
10559		objectMap["registrationStatus"] = eb.RegistrationStatus
10560	}
10561	if eb.BackupEngineState != nil {
10562		objectMap["backupEngineState"] = eb.BackupEngineState
10563	}
10564	if eb.HealthStatus != nil {
10565		objectMap["healthStatus"] = eb.HealthStatus
10566	}
10567	if eb.CanReRegister != nil {
10568		objectMap["canReRegister"] = eb.CanReRegister
10569	}
10570	if eb.BackupEngineID != nil {
10571		objectMap["backupEngineId"] = eb.BackupEngineID
10572	}
10573	if eb.DpmVersion != nil {
10574		objectMap["dpmVersion"] = eb.DpmVersion
10575	}
10576	if eb.AzureBackupAgentVersion != nil {
10577		objectMap["azureBackupAgentVersion"] = eb.AzureBackupAgentVersion
10578	}
10579	if eb.IsAzureBackupAgentUpgradeAvailable != nil {
10580		objectMap["isAzureBackupAgentUpgradeAvailable"] = eb.IsAzureBackupAgentUpgradeAvailable
10581	}
10582	if eb.IsDpmUpgradeAvailable != nil {
10583		objectMap["isDpmUpgradeAvailable"] = eb.IsDpmUpgradeAvailable
10584	}
10585	if eb.ExtendedInfo != nil {
10586		objectMap["extendedInfo"] = eb.ExtendedInfo
10587	}
10588	if eb.BackupEngineType != "" {
10589		objectMap["backupEngineType"] = eb.BackupEngineType
10590	}
10591	return json.Marshal(objectMap)
10592}
10593
10594// AsAzureBackupServerEngine is the BasicEngineBase implementation for EngineBase.
10595func (eb EngineBase) AsAzureBackupServerEngine() (*AzureBackupServerEngine, bool) {
10596	return nil, false
10597}
10598
10599// AsDpmBackupEngine is the BasicEngineBase implementation for EngineBase.
10600func (eb EngineBase) AsDpmBackupEngine() (*DpmBackupEngine, bool) {
10601	return nil, false
10602}
10603
10604// AsEngineBase is the BasicEngineBase implementation for EngineBase.
10605func (eb EngineBase) AsEngineBase() (*EngineBase, bool) {
10606	return &eb, true
10607}
10608
10609// AsBasicEngineBase is the BasicEngineBase implementation for EngineBase.
10610func (eb EngineBase) AsBasicEngineBase() (BasicEngineBase, bool) {
10611	return &eb, true
10612}
10613
10614// EngineBaseResource the base backup engine class. All workload specific backup engines derive from this
10615// class.
10616type EngineBaseResource struct {
10617	autorest.Response `json:"-"`
10618	// Properties - BackupEngineBaseResource properties
10619	Properties BasicEngineBase `json:"properties,omitempty"`
10620	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
10621	ID *string `json:"id,omitempty"`
10622	// Name - READ-ONLY; Resource name associated with the resource.
10623	Name *string `json:"name,omitempty"`
10624	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
10625	Type *string `json:"type,omitempty"`
10626	// Location - Resource location.
10627	Location *string `json:"location,omitempty"`
10628	// Tags - Resource tags.
10629	Tags map[string]*string `json:"tags"`
10630	// ETag - Optional ETag.
10631	ETag *string `json:"eTag,omitempty"`
10632}
10633
10634// MarshalJSON is the custom marshaler for EngineBaseResource.
10635func (ebr EngineBaseResource) MarshalJSON() ([]byte, error) {
10636	objectMap := make(map[string]interface{})
10637	objectMap["properties"] = ebr.Properties
10638	if ebr.Location != nil {
10639		objectMap["location"] = ebr.Location
10640	}
10641	if ebr.Tags != nil {
10642		objectMap["tags"] = ebr.Tags
10643	}
10644	if ebr.ETag != nil {
10645		objectMap["eTag"] = ebr.ETag
10646	}
10647	return json.Marshal(objectMap)
10648}
10649
10650// UnmarshalJSON is the custom unmarshaler for EngineBaseResource struct.
10651func (ebr *EngineBaseResource) UnmarshalJSON(body []byte) error {
10652	var m map[string]*json.RawMessage
10653	err := json.Unmarshal(body, &m)
10654	if err != nil {
10655		return err
10656	}
10657	for k, v := range m {
10658		switch k {
10659		case "properties":
10660			if v != nil {
10661				properties, err := unmarshalBasicEngineBase(*v)
10662				if err != nil {
10663					return err
10664				}
10665				ebr.Properties = properties
10666			}
10667		case "id":
10668			if v != nil {
10669				var ID string
10670				err = json.Unmarshal(*v, &ID)
10671				if err != nil {
10672					return err
10673				}
10674				ebr.ID = &ID
10675			}
10676		case "name":
10677			if v != nil {
10678				var name string
10679				err = json.Unmarshal(*v, &name)
10680				if err != nil {
10681					return err
10682				}
10683				ebr.Name = &name
10684			}
10685		case "type":
10686			if v != nil {
10687				var typeVar string
10688				err = json.Unmarshal(*v, &typeVar)
10689				if err != nil {
10690					return err
10691				}
10692				ebr.Type = &typeVar
10693			}
10694		case "location":
10695			if v != nil {
10696				var location string
10697				err = json.Unmarshal(*v, &location)
10698				if err != nil {
10699					return err
10700				}
10701				ebr.Location = &location
10702			}
10703		case "tags":
10704			if v != nil {
10705				var tags map[string]*string
10706				err = json.Unmarshal(*v, &tags)
10707				if err != nil {
10708					return err
10709				}
10710				ebr.Tags = tags
10711			}
10712		case "eTag":
10713			if v != nil {
10714				var eTag string
10715				err = json.Unmarshal(*v, &eTag)
10716				if err != nil {
10717					return err
10718				}
10719				ebr.ETag = &eTag
10720			}
10721		}
10722	}
10723
10724	return nil
10725}
10726
10727// EngineBaseResourceList list of BackupEngineBase resources
10728type EngineBaseResourceList struct {
10729	autorest.Response `json:"-"`
10730	// Value - List of resources.
10731	Value *[]EngineBaseResource `json:"value,omitempty"`
10732	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
10733	NextLink *string `json:"nextLink,omitempty"`
10734}
10735
10736// EngineBaseResourceListIterator provides access to a complete listing of EngineBaseResource values.
10737type EngineBaseResourceListIterator struct {
10738	i    int
10739	page EngineBaseResourceListPage
10740}
10741
10742// NextWithContext advances to the next value.  If there was an error making
10743// the request the iterator does not advance and the error is returned.
10744func (iter *EngineBaseResourceListIterator) NextWithContext(ctx context.Context) (err error) {
10745	if tracing.IsEnabled() {
10746		ctx = tracing.StartSpan(ctx, fqdn+"/EngineBaseResourceListIterator.NextWithContext")
10747		defer func() {
10748			sc := -1
10749			if iter.Response().Response.Response != nil {
10750				sc = iter.Response().Response.Response.StatusCode
10751			}
10752			tracing.EndSpan(ctx, sc, err)
10753		}()
10754	}
10755	iter.i++
10756	if iter.i < len(iter.page.Values()) {
10757		return nil
10758	}
10759	err = iter.page.NextWithContext(ctx)
10760	if err != nil {
10761		iter.i--
10762		return err
10763	}
10764	iter.i = 0
10765	return nil
10766}
10767
10768// Next advances to the next value.  If there was an error making
10769// the request the iterator does not advance and the error is returned.
10770// Deprecated: Use NextWithContext() instead.
10771func (iter *EngineBaseResourceListIterator) Next() error {
10772	return iter.NextWithContext(context.Background())
10773}
10774
10775// NotDone returns true if the enumeration should be started or is not yet complete.
10776func (iter EngineBaseResourceListIterator) NotDone() bool {
10777	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10778}
10779
10780// Response returns the raw server response from the last page request.
10781func (iter EngineBaseResourceListIterator) Response() EngineBaseResourceList {
10782	return iter.page.Response()
10783}
10784
10785// Value returns the current value or a zero-initialized value if the
10786// iterator has advanced beyond the end of the collection.
10787func (iter EngineBaseResourceListIterator) Value() EngineBaseResource {
10788	if !iter.page.NotDone() {
10789		return EngineBaseResource{}
10790	}
10791	return iter.page.Values()[iter.i]
10792}
10793
10794// Creates a new instance of the EngineBaseResourceListIterator type.
10795func NewEngineBaseResourceListIterator(page EngineBaseResourceListPage) EngineBaseResourceListIterator {
10796	return EngineBaseResourceListIterator{page: page}
10797}
10798
10799// IsEmpty returns true if the ListResult contains no values.
10800func (ebrl EngineBaseResourceList) IsEmpty() bool {
10801	return ebrl.Value == nil || len(*ebrl.Value) == 0
10802}
10803
10804// hasNextLink returns true if the NextLink is not empty.
10805func (ebrl EngineBaseResourceList) hasNextLink() bool {
10806	return ebrl.NextLink != nil && len(*ebrl.NextLink) != 0
10807}
10808
10809// engineBaseResourceListPreparer prepares a request to retrieve the next set of results.
10810// It returns nil if no more results exist.
10811func (ebrl EngineBaseResourceList) engineBaseResourceListPreparer(ctx context.Context) (*http.Request, error) {
10812	if !ebrl.hasNextLink() {
10813		return nil, nil
10814	}
10815	return autorest.Prepare((&http.Request{}).WithContext(ctx),
10816		autorest.AsJSON(),
10817		autorest.AsGet(),
10818		autorest.WithBaseURL(to.String(ebrl.NextLink)))
10819}
10820
10821// EngineBaseResourceListPage contains a page of EngineBaseResource values.
10822type EngineBaseResourceListPage struct {
10823	fn   func(context.Context, EngineBaseResourceList) (EngineBaseResourceList, error)
10824	ebrl EngineBaseResourceList
10825}
10826
10827// NextWithContext advances to the next page of values.  If there was an error making
10828// the request the page does not advance and the error is returned.
10829func (page *EngineBaseResourceListPage) NextWithContext(ctx context.Context) (err error) {
10830	if tracing.IsEnabled() {
10831		ctx = tracing.StartSpan(ctx, fqdn+"/EngineBaseResourceListPage.NextWithContext")
10832		defer func() {
10833			sc := -1
10834			if page.Response().Response.Response != nil {
10835				sc = page.Response().Response.Response.StatusCode
10836			}
10837			tracing.EndSpan(ctx, sc, err)
10838		}()
10839	}
10840	for {
10841		next, err := page.fn(ctx, page.ebrl)
10842		if err != nil {
10843			return err
10844		}
10845		page.ebrl = next
10846		if !next.hasNextLink() || !next.IsEmpty() {
10847			break
10848		}
10849	}
10850	return nil
10851}
10852
10853// Next advances to the next page of values.  If there was an error making
10854// the request the page does not advance and the error is returned.
10855// Deprecated: Use NextWithContext() instead.
10856func (page *EngineBaseResourceListPage) Next() error {
10857	return page.NextWithContext(context.Background())
10858}
10859
10860// NotDone returns true if the page enumeration should be started or is not yet complete.
10861func (page EngineBaseResourceListPage) NotDone() bool {
10862	return !page.ebrl.IsEmpty()
10863}
10864
10865// Response returns the raw server response from the last page request.
10866func (page EngineBaseResourceListPage) Response() EngineBaseResourceList {
10867	return page.ebrl
10868}
10869
10870// Values returns the slice of values for the current page or nil if there are no values.
10871func (page EngineBaseResourceListPage) Values() []EngineBaseResource {
10872	if page.ebrl.IsEmpty() {
10873		return nil
10874	}
10875	return *page.ebrl.Value
10876}
10877
10878// Creates a new instance of the EngineBaseResourceListPage type.
10879func NewEngineBaseResourceListPage(cur EngineBaseResourceList, getNextPage func(context.Context, EngineBaseResourceList) (EngineBaseResourceList, error)) EngineBaseResourceListPage {
10880	return EngineBaseResourceListPage{
10881		fn:   getNextPage,
10882		ebrl: cur,
10883	}
10884}
10885
10886// EngineExtendedInfo additional information on backup engine.
10887type EngineExtendedInfo struct {
10888	// DatabaseName - Database name of backup engine.
10889	DatabaseName *string `json:"databaseName,omitempty"`
10890	// ProtectedItemsCount - Number of protected items in the backup engine.
10891	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
10892	// ProtectedServersCount - Number of protected servers in the backup engine.
10893	ProtectedServersCount *int32 `json:"protectedServersCount,omitempty"`
10894	// DiskCount - Number of disks in the backup engine.
10895	DiskCount *int32 `json:"diskCount,omitempty"`
10896	// UsedDiskSpace - Disk space used in the backup engine.
10897	UsedDiskSpace *float64 `json:"usedDiskSpace,omitempty"`
10898	// AvailableDiskSpace - Disk space currently available in the backup engine.
10899	AvailableDiskSpace *float64 `json:"availableDiskSpace,omitempty"`
10900	// RefreshedAt - Last refresh time in the backup engine.
10901	RefreshedAt *date.Time `json:"refreshedAt,omitempty"`
10902	// AzureProtectedInstances - Protected instances in the backup engine.
10903	AzureProtectedInstances *int32 `json:"azureProtectedInstances,omitempty"`
10904}
10905
10906// ErrorAdditionalInfo the resource management error additional info.
10907type ErrorAdditionalInfo struct {
10908	// Type - READ-ONLY; The additional info type.
10909	Type *string `json:"type,omitempty"`
10910	// Info - READ-ONLY; The additional info.
10911	Info interface{} `json:"info,omitempty"`
10912}
10913
10914// MarshalJSON is the custom marshaler for ErrorAdditionalInfo.
10915func (eai ErrorAdditionalInfo) MarshalJSON() ([]byte, error) {
10916	objectMap := make(map[string]interface{})
10917	return json.Marshal(objectMap)
10918}
10919
10920// ErrorDetail error Detail class which encapsulates Code, Message and Recommendations.
10921type ErrorDetail struct {
10922	// Code - READ-ONLY; Error code.
10923	Code *string `json:"code,omitempty"`
10924	// Message - READ-ONLY; Error Message related to the Code.
10925	Message *string `json:"message,omitempty"`
10926	// Recommendations - READ-ONLY; List of recommendation strings.
10927	Recommendations *[]string `json:"recommendations,omitempty"`
10928}
10929
10930// MarshalJSON is the custom marshaler for ErrorDetail.
10931func (ed ErrorDetail) MarshalJSON() ([]byte, error) {
10932	objectMap := make(map[string]interface{})
10933	return json.Marshal(objectMap)
10934}
10935
10936// ErrorResponse common error response for all Azure Resource Manager APIs to return error details for
10937// failed operations. (This also follows the OData error response format.)
10938type ErrorResponse struct {
10939	// Code - READ-ONLY; The error code.
10940	Code *string `json:"code,omitempty"`
10941	// Message - READ-ONLY; The error message.
10942	Message *string `json:"message,omitempty"`
10943	// Target - READ-ONLY; The error target.
10944	Target *string `json:"target,omitempty"`
10945	// Details - READ-ONLY; The error details.
10946	Details *[]ErrorResponse `json:"details,omitempty"`
10947	// AdditionalInfo - READ-ONLY; The error additional info.
10948	AdditionalInfo *[]ErrorAdditionalInfo `json:"additionalInfo,omitempty"`
10949}
10950
10951// MarshalJSON is the custom marshaler for ErrorResponse.
10952func (er ErrorResponse) MarshalJSON() ([]byte, error) {
10953	objectMap := make(map[string]interface{})
10954	return json.Marshal(objectMap)
10955}
10956
10957// ExportJobsOperationResultInfo this class is used to send blob details after exporting jobs.
10958type ExportJobsOperationResultInfo struct {
10959	// BlobURL - URL of the blob into which the serialized string of list of jobs is exported.
10960	BlobURL *string `json:"blobUrl,omitempty"`
10961	// BlobSasKey - SAS key to access the blob. It expires in 15 mins.
10962	BlobSasKey *string `json:"blobSasKey,omitempty"`
10963	// ExcelFileBlobURL - URL of the blob into which the ExcelFile is uploaded.
10964	ExcelFileBlobURL *string `json:"excelFileBlobUrl,omitempty"`
10965	// ExcelFileBlobSasKey - SAS key to access the blob. It expires in 15 mins.
10966	ExcelFileBlobSasKey *string `json:"excelFileBlobSasKey,omitempty"`
10967	// ObjectType - Possible values include: 'ObjectTypeOperationResultInfoBase', 'ObjectTypeExportJobsOperationResultInfo', 'ObjectTypeOperationResultInfo'
10968	ObjectType ObjectTypeBasicOperationResultInfoBase `json:"objectType,omitempty"`
10969}
10970
10971// MarshalJSON is the custom marshaler for ExportJobsOperationResultInfo.
10972func (ejori ExportJobsOperationResultInfo) MarshalJSON() ([]byte, error) {
10973	ejori.ObjectType = ObjectTypeExportJobsOperationResultInfo
10974	objectMap := make(map[string]interface{})
10975	if ejori.BlobURL != nil {
10976		objectMap["blobUrl"] = ejori.BlobURL
10977	}
10978	if ejori.BlobSasKey != nil {
10979		objectMap["blobSasKey"] = ejori.BlobSasKey
10980	}
10981	if ejori.ExcelFileBlobURL != nil {
10982		objectMap["excelFileBlobUrl"] = ejori.ExcelFileBlobURL
10983	}
10984	if ejori.ExcelFileBlobSasKey != nil {
10985		objectMap["excelFileBlobSasKey"] = ejori.ExcelFileBlobSasKey
10986	}
10987	if ejori.ObjectType != "" {
10988		objectMap["objectType"] = ejori.ObjectType
10989	}
10990	return json.Marshal(objectMap)
10991}
10992
10993// AsExportJobsOperationResultInfo is the BasicOperationResultInfoBase implementation for ExportJobsOperationResultInfo.
10994func (ejori ExportJobsOperationResultInfo) AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool) {
10995	return &ejori, true
10996}
10997
10998// AsOperationResultInfo is the BasicOperationResultInfoBase implementation for ExportJobsOperationResultInfo.
10999func (ejori ExportJobsOperationResultInfo) AsOperationResultInfo() (*OperationResultInfo, bool) {
11000	return nil, false
11001}
11002
11003// AsOperationResultInfoBase is the BasicOperationResultInfoBase implementation for ExportJobsOperationResultInfo.
11004func (ejori ExportJobsOperationResultInfo) AsOperationResultInfoBase() (*OperationResultInfoBase, bool) {
11005	return nil, false
11006}
11007
11008// AsBasicOperationResultInfoBase is the BasicOperationResultInfoBase implementation for ExportJobsOperationResultInfo.
11009func (ejori ExportJobsOperationResultInfo) AsBasicOperationResultInfoBase() (BasicOperationResultInfoBase, bool) {
11010	return &ejori, true
11011}
11012
11013// ExtendedProperties extended Properties for Azure IaasVM Backup.
11014type ExtendedProperties struct {
11015	// DiskExclusionProperties - Extended Properties for Disk Exclusion.
11016	DiskExclusionProperties *DiskExclusionProperties `json:"diskExclusionProperties,omitempty"`
11017}
11018
11019// BasicFeatureSupportRequest base class for feature request
11020type BasicFeatureSupportRequest interface {
11021	AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool)
11022	AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool)
11023	AsFeatureSupportRequest() (*FeatureSupportRequest, bool)
11024}
11025
11026// FeatureSupportRequest base class for feature request
11027type FeatureSupportRequest struct {
11028	// FeatureType - Possible values include: 'FeatureTypeFeatureSupportRequest', 'FeatureTypeAzureBackupGoals', 'FeatureTypeAzureVMResourceBackup'
11029	FeatureType FeatureType `json:"featureType,omitempty"`
11030}
11031
11032func unmarshalBasicFeatureSupportRequest(body []byte) (BasicFeatureSupportRequest, error) {
11033	var m map[string]interface{}
11034	err := json.Unmarshal(body, &m)
11035	if err != nil {
11036		return nil, err
11037	}
11038
11039	switch m["featureType"] {
11040	case string(FeatureTypeAzureBackupGoals):
11041		var abgfsr AzureBackupGoalFeatureSupportRequest
11042		err := json.Unmarshal(body, &abgfsr)
11043		return abgfsr, err
11044	case string(FeatureTypeAzureVMResourceBackup):
11045		var avrfsr AzureVMResourceFeatureSupportRequest
11046		err := json.Unmarshal(body, &avrfsr)
11047		return avrfsr, err
11048	default:
11049		var fsr FeatureSupportRequest
11050		err := json.Unmarshal(body, &fsr)
11051		return fsr, err
11052	}
11053}
11054func unmarshalBasicFeatureSupportRequestArray(body []byte) ([]BasicFeatureSupportRequest, error) {
11055	var rawMessages []*json.RawMessage
11056	err := json.Unmarshal(body, &rawMessages)
11057	if err != nil {
11058		return nil, err
11059	}
11060
11061	fsrArray := make([]BasicFeatureSupportRequest, len(rawMessages))
11062
11063	for index, rawMessage := range rawMessages {
11064		fsr, err := unmarshalBasicFeatureSupportRequest(*rawMessage)
11065		if err != nil {
11066			return nil, err
11067		}
11068		fsrArray[index] = fsr
11069	}
11070	return fsrArray, nil
11071}
11072
11073// MarshalJSON is the custom marshaler for FeatureSupportRequest.
11074func (fsr FeatureSupportRequest) MarshalJSON() ([]byte, error) {
11075	fsr.FeatureType = FeatureTypeFeatureSupportRequest
11076	objectMap := make(map[string]interface{})
11077	if fsr.FeatureType != "" {
11078		objectMap["featureType"] = fsr.FeatureType
11079	}
11080	return json.Marshal(objectMap)
11081}
11082
11083// AsAzureBackupGoalFeatureSupportRequest is the BasicFeatureSupportRequest implementation for FeatureSupportRequest.
11084func (fsr FeatureSupportRequest) AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool) {
11085	return nil, false
11086}
11087
11088// AsAzureVMResourceFeatureSupportRequest is the BasicFeatureSupportRequest implementation for FeatureSupportRequest.
11089func (fsr FeatureSupportRequest) AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool) {
11090	return nil, false
11091}
11092
11093// AsFeatureSupportRequest is the BasicFeatureSupportRequest implementation for FeatureSupportRequest.
11094func (fsr FeatureSupportRequest) AsFeatureSupportRequest() (*FeatureSupportRequest, bool) {
11095	return &fsr, true
11096}
11097
11098// AsBasicFeatureSupportRequest is the BasicFeatureSupportRequest implementation for FeatureSupportRequest.
11099func (fsr FeatureSupportRequest) AsBasicFeatureSupportRequest() (BasicFeatureSupportRequest, bool) {
11100	return &fsr, true
11101}
11102
11103// GenericContainer base class for generic container of backup items
11104type GenericContainer struct {
11105	// FabricName - Name of the container's fabric
11106	FabricName *string `json:"fabricName,omitempty"`
11107	// ExtendedInformation - Extended information (not returned in List container API calls)
11108	ExtendedInformation *GenericContainerExtendedInfo `json:"extendedInformation,omitempty"`
11109	// FriendlyName - Friendly name of the container.
11110	FriendlyName *string `json:"friendlyName,omitempty"`
11111	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
11112	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
11113	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
11114	RegistrationStatus *string `json:"registrationStatus,omitempty"`
11115	// HealthStatus - Status of health of the container.
11116	HealthStatus *string `json:"healthStatus,omitempty"`
11117	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
11118	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
11119}
11120
11121// MarshalJSON is the custom marshaler for GenericContainer.
11122func (gc GenericContainer) MarshalJSON() ([]byte, error) {
11123	gc.ContainerType = ContainerTypeGenericContainer1
11124	objectMap := make(map[string]interface{})
11125	if gc.FabricName != nil {
11126		objectMap["fabricName"] = gc.FabricName
11127	}
11128	if gc.ExtendedInformation != nil {
11129		objectMap["extendedInformation"] = gc.ExtendedInformation
11130	}
11131	if gc.FriendlyName != nil {
11132		objectMap["friendlyName"] = gc.FriendlyName
11133	}
11134	if gc.BackupManagementType != "" {
11135		objectMap["backupManagementType"] = gc.BackupManagementType
11136	}
11137	if gc.RegistrationStatus != nil {
11138		objectMap["registrationStatus"] = gc.RegistrationStatus
11139	}
11140	if gc.HealthStatus != nil {
11141		objectMap["healthStatus"] = gc.HealthStatus
11142	}
11143	if gc.ContainerType != "" {
11144		objectMap["containerType"] = gc.ContainerType
11145	}
11146	return json.Marshal(objectMap)
11147}
11148
11149// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for GenericContainer.
11150func (gc GenericContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
11151	return nil, false
11152}
11153
11154// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for GenericContainer.
11155func (gc GenericContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
11156	return nil, false
11157}
11158
11159// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for GenericContainer.
11160func (gc GenericContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
11161	return nil, false
11162}
11163
11164// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
11165func (gc GenericContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
11166	return nil, false
11167}
11168
11169// AsAzureSQLContainer is the BasicProtectionContainer implementation for GenericContainer.
11170func (gc GenericContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
11171	return nil, false
11172}
11173
11174// AsAzureStorageContainer is the BasicProtectionContainer implementation for GenericContainer.
11175func (gc GenericContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
11176	return nil, false
11177}
11178
11179// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
11180func (gc GenericContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
11181	return nil, false
11182}
11183
11184// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for GenericContainer.
11185func (gc GenericContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
11186	return nil, false
11187}
11188
11189// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for GenericContainer.
11190func (gc GenericContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
11191	return nil, false
11192}
11193
11194// AsDpmContainer is the BasicProtectionContainer implementation for GenericContainer.
11195func (gc GenericContainer) AsDpmContainer() (*DpmContainer, bool) {
11196	return nil, false
11197}
11198
11199// AsBasicDpmContainer is the BasicProtectionContainer implementation for GenericContainer.
11200func (gc GenericContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
11201	return nil, false
11202}
11203
11204// AsGenericContainer is the BasicProtectionContainer implementation for GenericContainer.
11205func (gc GenericContainer) AsGenericContainer() (*GenericContainer, bool) {
11206	return &gc, true
11207}
11208
11209// AsIaaSVMContainer is the BasicProtectionContainer implementation for GenericContainer.
11210func (gc GenericContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
11211	return nil, false
11212}
11213
11214// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for GenericContainer.
11215func (gc GenericContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
11216	return nil, false
11217}
11218
11219// AsMabContainer is the BasicProtectionContainer implementation for GenericContainer.
11220func (gc GenericContainer) AsMabContainer() (*MabContainer, bool) {
11221	return nil, false
11222}
11223
11224// AsProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
11225func (gc GenericContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
11226	return nil, false
11227}
11228
11229// AsBasicProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
11230func (gc GenericContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
11231	return &gc, true
11232}
11233
11234// GenericContainerExtendedInfo container extended information
11235type GenericContainerExtendedInfo struct {
11236	// RawCertData - Public key of container cert
11237	RawCertData *string `json:"rawCertData,omitempty"`
11238	// ContainerIdentityInfo - Container identity information
11239	ContainerIdentityInfo *ContainerIdentityInfo `json:"containerIdentityInfo,omitempty"`
11240	// ServiceEndpoints - Azure Backup Service Endpoints for the container
11241	ServiceEndpoints map[string]*string `json:"serviceEndpoints"`
11242}
11243
11244// MarshalJSON is the custom marshaler for GenericContainerExtendedInfo.
11245func (gcei GenericContainerExtendedInfo) MarshalJSON() ([]byte, error) {
11246	objectMap := make(map[string]interface{})
11247	if gcei.RawCertData != nil {
11248		objectMap["rawCertData"] = gcei.RawCertData
11249	}
11250	if gcei.ContainerIdentityInfo != nil {
11251		objectMap["containerIdentityInfo"] = gcei.ContainerIdentityInfo
11252	}
11253	if gcei.ServiceEndpoints != nil {
11254		objectMap["serviceEndpoints"] = gcei.ServiceEndpoints
11255	}
11256	return json.Marshal(objectMap)
11257}
11258
11259// GenericProtectedItem base class for backup items.
11260type GenericProtectedItem struct {
11261	// FriendlyName - Friendly name of the container.
11262	FriendlyName *string `json:"friendlyName,omitempty"`
11263	// PolicyState - Indicates consistency of policy object and policy applied to this backup item.
11264	PolicyState *string `json:"policyState,omitempty"`
11265	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStateInvalid', 'ProtectionStateIRPending', 'ProtectionStateProtected', 'ProtectionStateProtectionError', 'ProtectionStateProtectionStopped', 'ProtectionStateProtectionPaused'
11266	ProtectionState ProtectionState `json:"protectionState,omitempty"`
11267	// ProtectedItemID - Data Plane Service ID of the protected item.
11268	ProtectedItemID *int64 `json:"protectedItemId,omitempty"`
11269	// SourceAssociations - Loosely coupled (type, value) associations (example - parent of a protected item)
11270	SourceAssociations map[string]*string `json:"sourceAssociations"`
11271	// FabricName - Name of this backup item's fabric.
11272	FabricName *string `json:"fabricName,omitempty"`
11273	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
11274	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
11275	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
11276	WorkloadType DataSourceType `json:"workloadType,omitempty"`
11277	// ContainerName - Unique name of container
11278	ContainerName *string `json:"containerName,omitempty"`
11279	// SourceResourceID - ARM ID of the resource to be backed up.
11280	SourceResourceID *string `json:"sourceResourceId,omitempty"`
11281	// PolicyID - ID of the backup policy with which this item is backed up.
11282	PolicyID *string `json:"policyId,omitempty"`
11283	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
11284	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
11285	// BackupSetName - Name of the backup set the backup item belongs to
11286	BackupSetName *string `json:"backupSetName,omitempty"`
11287	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
11288	CreateMode CreateMode `json:"createMode,omitempty"`
11289	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
11290	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
11291	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
11292	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
11293	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
11294	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
11295	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
11296	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
11297	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
11298	IsRehydrate *bool `json:"isRehydrate,omitempty"`
11299	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
11300	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
11301}
11302
11303// MarshalJSON is the custom marshaler for GenericProtectedItem.
11304func (gpi GenericProtectedItem) MarshalJSON() ([]byte, error) {
11305	gpi.ProtectedItemType = ProtectedItemTypeGenericProtectedItem
11306	objectMap := make(map[string]interface{})
11307	if gpi.FriendlyName != nil {
11308		objectMap["friendlyName"] = gpi.FriendlyName
11309	}
11310	if gpi.PolicyState != nil {
11311		objectMap["policyState"] = gpi.PolicyState
11312	}
11313	if gpi.ProtectionState != "" {
11314		objectMap["protectionState"] = gpi.ProtectionState
11315	}
11316	if gpi.ProtectedItemID != nil {
11317		objectMap["protectedItemId"] = gpi.ProtectedItemID
11318	}
11319	if gpi.SourceAssociations != nil {
11320		objectMap["sourceAssociations"] = gpi.SourceAssociations
11321	}
11322	if gpi.FabricName != nil {
11323		objectMap["fabricName"] = gpi.FabricName
11324	}
11325	if gpi.BackupManagementType != "" {
11326		objectMap["backupManagementType"] = gpi.BackupManagementType
11327	}
11328	if gpi.WorkloadType != "" {
11329		objectMap["workloadType"] = gpi.WorkloadType
11330	}
11331	if gpi.ContainerName != nil {
11332		objectMap["containerName"] = gpi.ContainerName
11333	}
11334	if gpi.SourceResourceID != nil {
11335		objectMap["sourceResourceId"] = gpi.SourceResourceID
11336	}
11337	if gpi.PolicyID != nil {
11338		objectMap["policyId"] = gpi.PolicyID
11339	}
11340	if gpi.LastRecoveryPoint != nil {
11341		objectMap["lastRecoveryPoint"] = gpi.LastRecoveryPoint
11342	}
11343	if gpi.BackupSetName != nil {
11344		objectMap["backupSetName"] = gpi.BackupSetName
11345	}
11346	if gpi.CreateMode != "" {
11347		objectMap["createMode"] = gpi.CreateMode
11348	}
11349	if gpi.DeferredDeleteTimeInUTC != nil {
11350		objectMap["deferredDeleteTimeInUTC"] = gpi.DeferredDeleteTimeInUTC
11351	}
11352	if gpi.IsScheduledForDeferredDelete != nil {
11353		objectMap["isScheduledForDeferredDelete"] = gpi.IsScheduledForDeferredDelete
11354	}
11355	if gpi.DeferredDeleteTimeRemaining != nil {
11356		objectMap["deferredDeleteTimeRemaining"] = gpi.DeferredDeleteTimeRemaining
11357	}
11358	if gpi.IsDeferredDeleteScheduleUpcoming != nil {
11359		objectMap["isDeferredDeleteScheduleUpcoming"] = gpi.IsDeferredDeleteScheduleUpcoming
11360	}
11361	if gpi.IsRehydrate != nil {
11362		objectMap["isRehydrate"] = gpi.IsRehydrate
11363	}
11364	if gpi.ProtectedItemType != "" {
11365		objectMap["protectedItemType"] = gpi.ProtectedItemType
11366	}
11367	return json.Marshal(objectMap)
11368}
11369
11370// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11371func (gpi GenericProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
11372	return nil, false
11373}
11374
11375// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11376func (gpi GenericProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
11377	return nil, false
11378}
11379
11380// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11381func (gpi GenericProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
11382	return nil, false
11383}
11384
11385// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11386func (gpi GenericProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
11387	return nil, false
11388}
11389
11390// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11391func (gpi GenericProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
11392	return nil, false
11393}
11394
11395// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11396func (gpi GenericProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
11397	return nil, false
11398}
11399
11400// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11401func (gpi GenericProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
11402	return nil, false
11403}
11404
11405// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11406func (gpi GenericProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
11407	return nil, false
11408}
11409
11410// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11411func (gpi GenericProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
11412	return nil, false
11413}
11414
11415// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11416func (gpi GenericProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
11417	return nil, false
11418}
11419
11420// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11421func (gpi GenericProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
11422	return nil, false
11423}
11424
11425// AsDPMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11426func (gpi GenericProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
11427	return nil, false
11428}
11429
11430// AsGenericProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11431func (gpi GenericProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
11432	return &gpi, true
11433}
11434
11435// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11436func (gpi GenericProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
11437	return nil, false
11438}
11439
11440// AsProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11441func (gpi GenericProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
11442	return nil, false
11443}
11444
11445// AsBasicProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
11446func (gpi GenericProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
11447	return &gpi, true
11448}
11449
11450// GenericProtectionPolicy azure VM (Mercury) workload-specific backup policy.
11451type GenericProtectionPolicy struct {
11452	// SubProtectionPolicy - List of sub-protection policies which includes schedule and retention
11453	SubProtectionPolicy *[]SubProtectionPolicy `json:"subProtectionPolicy,omitempty"`
11454	// TimeZone - TimeZone optional input as string. For example: TimeZone = "Pacific Standard Time".
11455	TimeZone *string `json:"timeZone,omitempty"`
11456	// FabricName - Name of this policy's fabric.
11457	FabricName *string `json:"fabricName,omitempty"`
11458	// ProtectedItemsCount - Number of items associated with this policy.
11459	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
11460	// BackupManagementType - Possible values include: 'BackupManagementTypeProtectionPolicy', 'BackupManagementTypeAzureWorkload', 'BackupManagementTypeAzureStorage', 'BackupManagementTypeAzureIaasVM', 'BackupManagementTypeAzureSQL', 'BackupManagementTypeGenericProtectionPolicy', 'BackupManagementTypeMAB'
11461	BackupManagementType ManagementTypeBasicProtectionPolicy `json:"backupManagementType,omitempty"`
11462}
11463
11464// MarshalJSON is the custom marshaler for GenericProtectionPolicy.
11465func (gpp GenericProtectionPolicy) MarshalJSON() ([]byte, error) {
11466	gpp.BackupManagementType = BackupManagementTypeGenericProtectionPolicy
11467	objectMap := make(map[string]interface{})
11468	if gpp.SubProtectionPolicy != nil {
11469		objectMap["subProtectionPolicy"] = gpp.SubProtectionPolicy
11470	}
11471	if gpp.TimeZone != nil {
11472		objectMap["timeZone"] = gpp.TimeZone
11473	}
11474	if gpp.FabricName != nil {
11475		objectMap["fabricName"] = gpp.FabricName
11476	}
11477	if gpp.ProtectedItemsCount != nil {
11478		objectMap["protectedItemsCount"] = gpp.ProtectedItemsCount
11479	}
11480	if gpp.BackupManagementType != "" {
11481		objectMap["backupManagementType"] = gpp.BackupManagementType
11482	}
11483	return json.Marshal(objectMap)
11484}
11485
11486// AsAzureVMWorkloadProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11487func (gpp GenericProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
11488	return nil, false
11489}
11490
11491// AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11492func (gpp GenericProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
11493	return nil, false
11494}
11495
11496// AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11497func (gpp GenericProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
11498	return nil, false
11499}
11500
11501// AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11502func (gpp GenericProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
11503	return nil, false
11504}
11505
11506// AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11507func (gpp GenericProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
11508	return &gpp, true
11509}
11510
11511// AsMabProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11512func (gpp GenericProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
11513	return nil, false
11514}
11515
11516// AsProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11517func (gpp GenericProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
11518	return nil, false
11519}
11520
11521// AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
11522func (gpp GenericProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
11523	return &gpp, true
11524}
11525
11526// GenericRecoveryPoint generic backup copy.
11527type GenericRecoveryPoint struct {
11528	// FriendlyName - Friendly name of the backup copy.
11529	FriendlyName *string `json:"friendlyName,omitempty"`
11530	// RecoveryPointType - Type of the backup copy.
11531	RecoveryPointType *string `json:"recoveryPointType,omitempty"`
11532	// RecoveryPointTime - Time at which this backup copy was created.
11533	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
11534	// RecoveryPointAdditionalInfo - Additional information associated with this backup copy.
11535	RecoveryPointAdditionalInfo *string `json:"recoveryPointAdditionalInfo,omitempty"`
11536	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
11537	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
11538}
11539
11540// MarshalJSON is the custom marshaler for GenericRecoveryPoint.
11541func (grp GenericRecoveryPoint) MarshalJSON() ([]byte, error) {
11542	grp.ObjectType = ObjectTypeGenericRecoveryPoint
11543	objectMap := make(map[string]interface{})
11544	if grp.FriendlyName != nil {
11545		objectMap["friendlyName"] = grp.FriendlyName
11546	}
11547	if grp.RecoveryPointType != nil {
11548		objectMap["recoveryPointType"] = grp.RecoveryPointType
11549	}
11550	if grp.RecoveryPointTime != nil {
11551		objectMap["recoveryPointTime"] = grp.RecoveryPointTime
11552	}
11553	if grp.RecoveryPointAdditionalInfo != nil {
11554		objectMap["recoveryPointAdditionalInfo"] = grp.RecoveryPointAdditionalInfo
11555	}
11556	if grp.ObjectType != "" {
11557		objectMap["objectType"] = grp.ObjectType
11558	}
11559	return json.Marshal(objectMap)
11560}
11561
11562// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11563func (grp GenericRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
11564	return nil, false
11565}
11566
11567// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11568func (grp GenericRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
11569	return nil, false
11570}
11571
11572// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11573func (grp GenericRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
11574	return nil, false
11575}
11576
11577// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11578func (grp GenericRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
11579	return nil, false
11580}
11581
11582// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11583func (grp GenericRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
11584	return nil, false
11585}
11586
11587// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11588func (grp GenericRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
11589	return nil, false
11590}
11591
11592// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11593func (grp GenericRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
11594	return nil, false
11595}
11596
11597// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11598func (grp GenericRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
11599	return nil, false
11600}
11601
11602// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11603func (grp GenericRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
11604	return nil, false
11605}
11606
11607// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11608func (grp GenericRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
11609	return nil, false
11610}
11611
11612// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11613func (grp GenericRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
11614	return &grp, true
11615}
11616
11617// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11618func (grp GenericRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
11619	return nil, false
11620}
11621
11622// AsRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11623func (grp GenericRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
11624	return nil, false
11625}
11626
11627// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
11628func (grp GenericRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
11629	return &grp, true
11630}
11631
11632// GetProtectedItemQueryObject filters to list backup items.
11633type GetProtectedItemQueryObject struct {
11634	// Expand - Specifies if the additional information should be provided for this item.
11635	Expand *string `json:"expand,omitempty"`
11636}
11637
11638// IaasVMBackupRequest iaaS VM workload-specific backup request.
11639type IaasVMBackupRequest struct {
11640	// RecoveryPointExpiryTimeInUTC - Backup copy will expire after the time specified (UTC).
11641	RecoveryPointExpiryTimeInUTC *date.Time `json:"recoveryPointExpiryTimeInUTC,omitempty"`
11642	// ObjectType - Possible values include: 'ObjectTypeBackupRequest', 'ObjectTypeAzureFileShareBackupRequest', 'ObjectTypeAzureWorkloadBackupRequest', 'ObjectTypeIaasVMBackupRequest'
11643	ObjectType ObjectTypeBasicRequest `json:"objectType,omitempty"`
11644}
11645
11646// MarshalJSON is the custom marshaler for IaasVMBackupRequest.
11647func (ivbr IaasVMBackupRequest) MarshalJSON() ([]byte, error) {
11648	ivbr.ObjectType = ObjectTypeIaasVMBackupRequest
11649	objectMap := make(map[string]interface{})
11650	if ivbr.RecoveryPointExpiryTimeInUTC != nil {
11651		objectMap["recoveryPointExpiryTimeInUTC"] = ivbr.RecoveryPointExpiryTimeInUTC
11652	}
11653	if ivbr.ObjectType != "" {
11654		objectMap["objectType"] = ivbr.ObjectType
11655	}
11656	return json.Marshal(objectMap)
11657}
11658
11659// AsAzureFileShareBackupRequest is the BasicRequest implementation for IaasVMBackupRequest.
11660func (ivbr IaasVMBackupRequest) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
11661	return nil, false
11662}
11663
11664// AsAzureWorkloadBackupRequest is the BasicRequest implementation for IaasVMBackupRequest.
11665func (ivbr IaasVMBackupRequest) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
11666	return nil, false
11667}
11668
11669// AsIaasVMBackupRequest is the BasicRequest implementation for IaasVMBackupRequest.
11670func (ivbr IaasVMBackupRequest) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
11671	return &ivbr, true
11672}
11673
11674// AsRequest is the BasicRequest implementation for IaasVMBackupRequest.
11675func (ivbr IaasVMBackupRequest) AsRequest() (*Request, bool) {
11676	return nil, false
11677}
11678
11679// AsBasicRequest is the BasicRequest implementation for IaasVMBackupRequest.
11680func (ivbr IaasVMBackupRequest) AsBasicRequest() (BasicRequest, bool) {
11681	return &ivbr, true
11682}
11683
11684// BasicIaaSVMContainer iaaS VM workload-specific container.
11685type BasicIaaSVMContainer interface {
11686	AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool)
11687	AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool)
11688	AsIaaSVMContainer() (*IaaSVMContainer, bool)
11689}
11690
11691// IaaSVMContainer iaaS VM workload-specific container.
11692type IaaSVMContainer struct {
11693	// VirtualMachineID - Fully qualified ARM url of the virtual machine represented by this Azure IaaS VM container.
11694	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
11695	// VirtualMachineVersion - Specifies whether the container represents a Classic or an Azure Resource Manager VM.
11696	VirtualMachineVersion *string `json:"virtualMachineVersion,omitempty"`
11697	// ResourceGroup - Resource group name of Recovery Services Vault.
11698	ResourceGroup *string `json:"resourceGroup,omitempty"`
11699	// FriendlyName - Friendly name of the container.
11700	FriendlyName *string `json:"friendlyName,omitempty"`
11701	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
11702	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
11703	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
11704	RegistrationStatus *string `json:"registrationStatus,omitempty"`
11705	// HealthStatus - Status of health of the container.
11706	HealthStatus *string `json:"healthStatus,omitempty"`
11707	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
11708	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
11709}
11710
11711func unmarshalBasicIaaSVMContainer(body []byte) (BasicIaaSVMContainer, error) {
11712	var m map[string]interface{}
11713	err := json.Unmarshal(body, &m)
11714	if err != nil {
11715		return nil, err
11716	}
11717
11718	switch m["containerType"] {
11719	case string(ContainerTypeMicrosoftClassicComputevirtualMachines):
11720		var aisccvc AzureIaaSClassicComputeVMContainer
11721		err := json.Unmarshal(body, &aisccvc)
11722		return aisccvc, err
11723	case string(ContainerTypeMicrosoftComputevirtualMachines):
11724		var aiscvc AzureIaaSComputeVMContainer
11725		err := json.Unmarshal(body, &aiscvc)
11726		return aiscvc, err
11727	default:
11728		var isc IaaSVMContainer
11729		err := json.Unmarshal(body, &isc)
11730		return isc, err
11731	}
11732}
11733func unmarshalBasicIaaSVMContainerArray(body []byte) ([]BasicIaaSVMContainer, error) {
11734	var rawMessages []*json.RawMessage
11735	err := json.Unmarshal(body, &rawMessages)
11736	if err != nil {
11737		return nil, err
11738	}
11739
11740	iscArray := make([]BasicIaaSVMContainer, len(rawMessages))
11741
11742	for index, rawMessage := range rawMessages {
11743		isc, err := unmarshalBasicIaaSVMContainer(*rawMessage)
11744		if err != nil {
11745			return nil, err
11746		}
11747		iscArray[index] = isc
11748	}
11749	return iscArray, nil
11750}
11751
11752// MarshalJSON is the custom marshaler for IaaSVMContainer.
11753func (isc IaaSVMContainer) MarshalJSON() ([]byte, error) {
11754	isc.ContainerType = ContainerTypeIaaSVMContainer
11755	objectMap := make(map[string]interface{})
11756	if isc.VirtualMachineID != nil {
11757		objectMap["virtualMachineId"] = isc.VirtualMachineID
11758	}
11759	if isc.VirtualMachineVersion != nil {
11760		objectMap["virtualMachineVersion"] = isc.VirtualMachineVersion
11761	}
11762	if isc.ResourceGroup != nil {
11763		objectMap["resourceGroup"] = isc.ResourceGroup
11764	}
11765	if isc.FriendlyName != nil {
11766		objectMap["friendlyName"] = isc.FriendlyName
11767	}
11768	if isc.BackupManagementType != "" {
11769		objectMap["backupManagementType"] = isc.BackupManagementType
11770	}
11771	if isc.RegistrationStatus != nil {
11772		objectMap["registrationStatus"] = isc.RegistrationStatus
11773	}
11774	if isc.HealthStatus != nil {
11775		objectMap["healthStatus"] = isc.HealthStatus
11776	}
11777	if isc.ContainerType != "" {
11778		objectMap["containerType"] = isc.ContainerType
11779	}
11780	return json.Marshal(objectMap)
11781}
11782
11783// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11784func (isc IaaSVMContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
11785	return nil, false
11786}
11787
11788// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11789func (isc IaaSVMContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
11790	return nil, false
11791}
11792
11793// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11794func (isc IaaSVMContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
11795	return nil, false
11796}
11797
11798// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11799func (isc IaaSVMContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
11800	return nil, false
11801}
11802
11803// AsAzureSQLContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11804func (isc IaaSVMContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
11805	return nil, false
11806}
11807
11808// AsAzureStorageContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11809func (isc IaaSVMContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
11810	return nil, false
11811}
11812
11813// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11814func (isc IaaSVMContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
11815	return nil, false
11816}
11817
11818// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11819func (isc IaaSVMContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
11820	return nil, false
11821}
11822
11823// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11824func (isc IaaSVMContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
11825	return nil, false
11826}
11827
11828// AsDpmContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11829func (isc IaaSVMContainer) AsDpmContainer() (*DpmContainer, bool) {
11830	return nil, false
11831}
11832
11833// AsBasicDpmContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11834func (isc IaaSVMContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
11835	return nil, false
11836}
11837
11838// AsGenericContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11839func (isc IaaSVMContainer) AsGenericContainer() (*GenericContainer, bool) {
11840	return nil, false
11841}
11842
11843// AsIaaSVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11844func (isc IaaSVMContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
11845	return &isc, true
11846}
11847
11848// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11849func (isc IaaSVMContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
11850	return &isc, true
11851}
11852
11853// AsMabContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11854func (isc IaaSVMContainer) AsMabContainer() (*MabContainer, bool) {
11855	return nil, false
11856}
11857
11858// AsProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11859func (isc IaaSVMContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
11860	return nil, false
11861}
11862
11863// AsBasicProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
11864func (isc IaaSVMContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
11865	return &isc, true
11866}
11867
11868// IaasVMILRRegistrationRequest restore files/folders from a backup copy of IaaS VM.
11869type IaasVMILRRegistrationRequest struct {
11870	// RecoveryPointID - ID of the IaaS VM backup copy from where the files/folders have to be restored.
11871	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
11872	// VirtualMachineID - Fully qualified ARM ID of the virtual machine whose the files / folders have to be restored.
11873	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
11874	// InitiatorName - iSCSI initiator name.
11875	InitiatorName *string `json:"initiatorName,omitempty"`
11876	// RenewExistingRegistration - Whether to renew existing registration with the iSCSI server.
11877	RenewExistingRegistration *bool `json:"renewExistingRegistration,omitempty"`
11878	// ObjectType - Possible values include: 'ObjectTypeILRRequest', 'ObjectTypeAzureFileShareProvisionILRRequest', 'ObjectTypeIaasVMILRRegistrationRequest'
11879	ObjectType ObjectTypeBasicILRRequest `json:"objectType,omitempty"`
11880}
11881
11882// MarshalJSON is the custom marshaler for IaasVMILRRegistrationRequest.
11883func (ivrr IaasVMILRRegistrationRequest) MarshalJSON() ([]byte, error) {
11884	ivrr.ObjectType = ObjectTypeIaasVMILRRegistrationRequest
11885	objectMap := make(map[string]interface{})
11886	if ivrr.RecoveryPointID != nil {
11887		objectMap["recoveryPointId"] = ivrr.RecoveryPointID
11888	}
11889	if ivrr.VirtualMachineID != nil {
11890		objectMap["virtualMachineId"] = ivrr.VirtualMachineID
11891	}
11892	if ivrr.InitiatorName != nil {
11893		objectMap["initiatorName"] = ivrr.InitiatorName
11894	}
11895	if ivrr.RenewExistingRegistration != nil {
11896		objectMap["renewExistingRegistration"] = ivrr.RenewExistingRegistration
11897	}
11898	if ivrr.ObjectType != "" {
11899		objectMap["objectType"] = ivrr.ObjectType
11900	}
11901	return json.Marshal(objectMap)
11902}
11903
11904// AsAzureFileShareProvisionILRRequest is the BasicILRRequest implementation for IaasVMILRRegistrationRequest.
11905func (ivrr IaasVMILRRegistrationRequest) AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool) {
11906	return nil, false
11907}
11908
11909// AsIaasVMILRRegistrationRequest is the BasicILRRequest implementation for IaasVMILRRegistrationRequest.
11910func (ivrr IaasVMILRRegistrationRequest) AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool) {
11911	return &ivrr, true
11912}
11913
11914// AsILRRequest is the BasicILRRequest implementation for IaasVMILRRegistrationRequest.
11915func (ivrr IaasVMILRRegistrationRequest) AsILRRequest() (*ILRRequest, bool) {
11916	return nil, false
11917}
11918
11919// AsBasicILRRequest is the BasicILRRequest implementation for IaasVMILRRegistrationRequest.
11920func (ivrr IaasVMILRRegistrationRequest) AsBasicILRRequest() (BasicILRRequest, bool) {
11921	return &ivrr, true
11922}
11923
11924// BasicIaaSVMProtectableItem iaaS VM workload-specific backup item.
11925type BasicIaaSVMProtectableItem interface {
11926	AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool)
11927	AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool)
11928	AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool)
11929}
11930
11931// IaaSVMProtectableItem iaaS VM workload-specific backup item.
11932type IaaSVMProtectableItem struct {
11933	// VirtualMachineID - Fully qualified ARM ID of the virtual machine.
11934	VirtualMachineID *string `json:"virtualMachineId,omitempty"`
11935	// BackupManagementType - Type of backup management to backup an item.
11936	BackupManagementType *string `json:"backupManagementType,omitempty"`
11937	// WorkloadType - Type of workload for the backup management
11938	WorkloadType *string `json:"workloadType,omitempty"`
11939	// FriendlyName - Friendly name of the backup item.
11940	FriendlyName *string `json:"friendlyName,omitempty"`
11941	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
11942	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
11943	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
11944	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
11945}
11946
11947func unmarshalBasicIaaSVMProtectableItem(body []byte) (BasicIaaSVMProtectableItem, error) {
11948	var m map[string]interface{}
11949	err := json.Unmarshal(body, &m)
11950	if err != nil {
11951		return nil, err
11952	}
11953
11954	switch m["protectableItemType"] {
11955	case string(ProtectableItemTypeMicrosoftClassicComputevirtualMachines):
11956		var aisccvpi AzureIaaSClassicComputeVMProtectableItem
11957		err := json.Unmarshal(body, &aisccvpi)
11958		return aisccvpi, err
11959	case string(ProtectableItemTypeMicrosoftComputevirtualMachines):
11960		var aiscvpi AzureIaaSComputeVMProtectableItem
11961		err := json.Unmarshal(body, &aiscvpi)
11962		return aiscvpi, err
11963	default:
11964		var ispi IaaSVMProtectableItem
11965		err := json.Unmarshal(body, &ispi)
11966		return ispi, err
11967	}
11968}
11969func unmarshalBasicIaaSVMProtectableItemArray(body []byte) ([]BasicIaaSVMProtectableItem, error) {
11970	var rawMessages []*json.RawMessage
11971	err := json.Unmarshal(body, &rawMessages)
11972	if err != nil {
11973		return nil, err
11974	}
11975
11976	ispiArray := make([]BasicIaaSVMProtectableItem, len(rawMessages))
11977
11978	for index, rawMessage := range rawMessages {
11979		ispi, err := unmarshalBasicIaaSVMProtectableItem(*rawMessage)
11980		if err != nil {
11981			return nil, err
11982		}
11983		ispiArray[index] = ispi
11984	}
11985	return ispiArray, nil
11986}
11987
11988// MarshalJSON is the custom marshaler for IaaSVMProtectableItem.
11989func (ispi IaaSVMProtectableItem) MarshalJSON() ([]byte, error) {
11990	ispi.ProtectableItemType = ProtectableItemTypeIaaSVMProtectableItem
11991	objectMap := make(map[string]interface{})
11992	if ispi.VirtualMachineID != nil {
11993		objectMap["virtualMachineId"] = ispi.VirtualMachineID
11994	}
11995	if ispi.BackupManagementType != nil {
11996		objectMap["backupManagementType"] = ispi.BackupManagementType
11997	}
11998	if ispi.WorkloadType != nil {
11999		objectMap["workloadType"] = ispi.WorkloadType
12000	}
12001	if ispi.FriendlyName != nil {
12002		objectMap["friendlyName"] = ispi.FriendlyName
12003	}
12004	if ispi.ProtectionState != "" {
12005		objectMap["protectionState"] = ispi.ProtectionState
12006	}
12007	if ispi.ProtectableItemType != "" {
12008		objectMap["protectableItemType"] = ispi.ProtectableItemType
12009	}
12010	return json.Marshal(objectMap)
12011}
12012
12013// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12014func (ispi IaaSVMProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
12015	return nil, false
12016}
12017
12018// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12019func (ispi IaaSVMProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
12020	return nil, false
12021}
12022
12023// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12024func (ispi IaaSVMProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
12025	return nil, false
12026}
12027
12028// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12029func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
12030	return nil, false
12031}
12032
12033// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12034func (ispi IaaSVMProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
12035	return nil, false
12036}
12037
12038// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12039func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
12040	return nil, false
12041}
12042
12043// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12044func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
12045	return nil, false
12046}
12047
12048// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12049func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
12050	return nil, false
12051}
12052
12053// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12054func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
12055	return nil, false
12056}
12057
12058// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12059func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
12060	return nil, false
12061}
12062
12063// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12064func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
12065	return nil, false
12066}
12067
12068// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12069func (ispi IaaSVMProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
12070	return &ispi, true
12071}
12072
12073// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12074func (ispi IaaSVMProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
12075	return &ispi, true
12076}
12077
12078// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12079func (ispi IaaSVMProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
12080	return nil, false
12081}
12082
12083// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
12084func (ispi IaaSVMProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
12085	return &ispi, true
12086}
12087
12088// IaasVMRecoveryPoint iaaS VM workload specific backup copy.
12089type IaasVMRecoveryPoint struct {
12090	// RecoveryPointType - READ-ONLY; Type of the backup copy.
12091	RecoveryPointType *string `json:"recoveryPointType,omitempty"`
12092	// RecoveryPointTime - READ-ONLY; Time at which this backup copy was created.
12093	RecoveryPointTime *date.Time `json:"recoveryPointTime,omitempty"`
12094	// RecoveryPointAdditionalInfo - READ-ONLY; Additional information associated with this backup copy.
12095	RecoveryPointAdditionalInfo *string `json:"recoveryPointAdditionalInfo,omitempty"`
12096	// SourceVMStorageType - READ-ONLY; Storage type of the VM whose backup copy is created.
12097	SourceVMStorageType *string `json:"sourceVMStorageType,omitempty"`
12098	// IsSourceVMEncrypted - READ-ONLY; Identifies whether the VM was encrypted when the backup copy is created.
12099	IsSourceVMEncrypted *bool `json:"isSourceVMEncrypted,omitempty"`
12100	// KeyAndSecret - Required details for recovering an encrypted VM. Applicable only when IsSourceVMEncrypted is true.
12101	KeyAndSecret *KeyAndSecretDetails `json:"keyAndSecret,omitempty"`
12102	// IsInstantIlrSessionActive - Is the session to recover items from this backup copy still active.
12103	IsInstantIlrSessionActive *bool `json:"isInstantIlrSessionActive,omitempty"`
12104	// RecoveryPointTierDetails - Recovery point tier information.
12105	RecoveryPointTierDetails *[]RecoveryPointTierInformation `json:"recoveryPointTierDetails,omitempty"`
12106	// IsManagedVirtualMachine - Whether VM is with Managed Disks
12107	IsManagedVirtualMachine *bool `json:"isManagedVirtualMachine,omitempty"`
12108	// VirtualMachineSize - Virtual Machine Size
12109	VirtualMachineSize *string `json:"virtualMachineSize,omitempty"`
12110	// OriginalStorageAccountOption - Original Storage Account Option
12111	OriginalStorageAccountOption *bool `json:"originalStorageAccountOption,omitempty"`
12112	// OsType - OS type
12113	OsType *string `json:"osType,omitempty"`
12114	// RecoveryPointDiskConfiguration - Disk configuration
12115	RecoveryPointDiskConfiguration *RecoveryPointDiskConfiguration `json:"recoveryPointDiskConfiguration,omitempty"`
12116	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
12117	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
12118}
12119
12120// MarshalJSON is the custom marshaler for IaasVMRecoveryPoint.
12121func (ivrp IaasVMRecoveryPoint) MarshalJSON() ([]byte, error) {
12122	ivrp.ObjectType = ObjectTypeIaasVMRecoveryPoint
12123	objectMap := make(map[string]interface{})
12124	if ivrp.KeyAndSecret != nil {
12125		objectMap["keyAndSecret"] = ivrp.KeyAndSecret
12126	}
12127	if ivrp.IsInstantIlrSessionActive != nil {
12128		objectMap["isInstantIlrSessionActive"] = ivrp.IsInstantIlrSessionActive
12129	}
12130	if ivrp.RecoveryPointTierDetails != nil {
12131		objectMap["recoveryPointTierDetails"] = ivrp.RecoveryPointTierDetails
12132	}
12133	if ivrp.IsManagedVirtualMachine != nil {
12134		objectMap["isManagedVirtualMachine"] = ivrp.IsManagedVirtualMachine
12135	}
12136	if ivrp.VirtualMachineSize != nil {
12137		objectMap["virtualMachineSize"] = ivrp.VirtualMachineSize
12138	}
12139	if ivrp.OriginalStorageAccountOption != nil {
12140		objectMap["originalStorageAccountOption"] = ivrp.OriginalStorageAccountOption
12141	}
12142	if ivrp.OsType != nil {
12143		objectMap["osType"] = ivrp.OsType
12144	}
12145	if ivrp.RecoveryPointDiskConfiguration != nil {
12146		objectMap["recoveryPointDiskConfiguration"] = ivrp.RecoveryPointDiskConfiguration
12147	}
12148	if ivrp.ObjectType != "" {
12149		objectMap["objectType"] = ivrp.ObjectType
12150	}
12151	return json.Marshal(objectMap)
12152}
12153
12154// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12155func (ivrp IaasVMRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
12156	return nil, false
12157}
12158
12159// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12160func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
12161	return nil, false
12162}
12163
12164// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12165func (ivrp IaasVMRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
12166	return nil, false
12167}
12168
12169// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12170func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
12171	return nil, false
12172}
12173
12174// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12175func (ivrp IaasVMRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
12176	return nil, false
12177}
12178
12179// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12180func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
12181	return nil, false
12182}
12183
12184// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12185func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
12186	return nil, false
12187}
12188
12189// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12190func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
12191	return nil, false
12192}
12193
12194// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12195func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
12196	return nil, false
12197}
12198
12199// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12200func (ivrp IaasVMRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
12201	return nil, false
12202}
12203
12204// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12205func (ivrp IaasVMRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
12206	return nil, false
12207}
12208
12209// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12210func (ivrp IaasVMRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
12211	return &ivrp, true
12212}
12213
12214// AsRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12215func (ivrp IaasVMRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
12216	return nil, false
12217}
12218
12219// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
12220func (ivrp IaasVMRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
12221	return &ivrp, true
12222}
12223
12224// IaasVMRestoreRequest iaaS VM workload-specific restore.
12225type IaasVMRestoreRequest struct {
12226	// RecoveryPointID - ID of the backup copy to be recovered.
12227	RecoveryPointID *string `json:"recoveryPointId,omitempty"`
12228	// RecoveryType - Type of this recovery. Possible values include: 'RecoveryTypeInvalid', 'RecoveryTypeOriginalLocation', 'RecoveryTypeAlternateLocation', 'RecoveryTypeRestoreDisks', 'RecoveryTypeOffline'
12229	RecoveryType RecoveryType `json:"recoveryType,omitempty"`
12230	// SourceResourceID - Fully qualified ARM ID of the VM which is being recovered.
12231	SourceResourceID *string `json:"sourceResourceId,omitempty"`
12232	// TargetVirtualMachineID - This is the complete ARM Id of the VM that will be created.
12233	// For e.g. /subscriptions/{subId}/resourcegroups/{rg}/provider/Microsoft.Compute/virtualmachines/{vm}
12234	TargetVirtualMachineID *string `json:"targetVirtualMachineId,omitempty"`
12235	// TargetResourceGroupID - This is the ARM Id of the resource group that you want to create for this Virtual machine and other artifacts.
12236	// For e.g. /subscriptions/{subId}/resourcegroups/{rg}
12237	TargetResourceGroupID *string `json:"targetResourceGroupId,omitempty"`
12238	// StorageAccountID - Fully qualified ARM ID of the storage account to which the VM has to be restored.
12239	StorageAccountID *string `json:"storageAccountId,omitempty"`
12240	// VirtualNetworkID - This is the virtual network Id of the vnet that will be attached to the virtual machine.
12241	// User will be validated for join action permissions in the linked access.
12242	VirtualNetworkID *string `json:"virtualNetworkId,omitempty"`
12243	// SubnetID - Subnet ID, is the subnet ID associated with the to be restored VM. For Classic VMs it would be
12244	// {VnetID}/Subnet/{SubnetName} and, for the Azure Resource Manager VMs it would be ARM resource ID used to represent
12245	// the subnet.
12246	SubnetID *string `json:"subnetId,omitempty"`
12247	// TargetDomainNameID - Fully qualified ARM ID of the domain name to be associated to the VM being restored. This applies only to Classic
12248	// Virtual Machines.
12249	TargetDomainNameID *string `json:"targetDomainNameId,omitempty"`
12250	// Region - Region in which the virtual machine is restored.
12251	Region *string `json:"region,omitempty"`
12252	// AffinityGroup - Affinity group associated to VM to be restored. Used only for Classic Compute Virtual Machines.
12253	AffinityGroup *string `json:"affinityGroup,omitempty"`
12254	// CreateNewCloudService - Should a new cloud service be created while restoring the VM. If this is false, VM will be restored to the same
12255	// cloud service as it was at the time of backup.
12256	CreateNewCloudService *bool `json:"createNewCloudService,omitempty"`
12257	// OriginalStorageAccountOption - Original Storage Account Option
12258	OriginalStorageAccountOption *bool `json:"originalStorageAccountOption,omitempty"`
12259	// EncryptionDetails - Details needed if the VM was encrypted at the time of backup.
12260	EncryptionDetails *EncryptionDetails `json:"encryptionDetails,omitempty"`
12261	// RestoreDiskLunList - List of Disk LUNs for partial restore
12262	RestoreDiskLunList *[]int32 `json:"restoreDiskLunList,omitempty"`
12263	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
12264	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
12265}
12266
12267// MarshalJSON is the custom marshaler for IaasVMRestoreRequest.
12268func (ivrr IaasVMRestoreRequest) MarshalJSON() ([]byte, error) {
12269	ivrr.ObjectType = ObjectTypeIaasVMRestoreRequest
12270	objectMap := make(map[string]interface{})
12271	if ivrr.RecoveryPointID != nil {
12272		objectMap["recoveryPointId"] = ivrr.RecoveryPointID
12273	}
12274	if ivrr.RecoveryType != "" {
12275		objectMap["recoveryType"] = ivrr.RecoveryType
12276	}
12277	if ivrr.SourceResourceID != nil {
12278		objectMap["sourceResourceId"] = ivrr.SourceResourceID
12279	}
12280	if ivrr.TargetVirtualMachineID != nil {
12281		objectMap["targetVirtualMachineId"] = ivrr.TargetVirtualMachineID
12282	}
12283	if ivrr.TargetResourceGroupID != nil {
12284		objectMap["targetResourceGroupId"] = ivrr.TargetResourceGroupID
12285	}
12286	if ivrr.StorageAccountID != nil {
12287		objectMap["storageAccountId"] = ivrr.StorageAccountID
12288	}
12289	if ivrr.VirtualNetworkID != nil {
12290		objectMap["virtualNetworkId"] = ivrr.VirtualNetworkID
12291	}
12292	if ivrr.SubnetID != nil {
12293		objectMap["subnetId"] = ivrr.SubnetID
12294	}
12295	if ivrr.TargetDomainNameID != nil {
12296		objectMap["targetDomainNameId"] = ivrr.TargetDomainNameID
12297	}
12298	if ivrr.Region != nil {
12299		objectMap["region"] = ivrr.Region
12300	}
12301	if ivrr.AffinityGroup != nil {
12302		objectMap["affinityGroup"] = ivrr.AffinityGroup
12303	}
12304	if ivrr.CreateNewCloudService != nil {
12305		objectMap["createNewCloudService"] = ivrr.CreateNewCloudService
12306	}
12307	if ivrr.OriginalStorageAccountOption != nil {
12308		objectMap["originalStorageAccountOption"] = ivrr.OriginalStorageAccountOption
12309	}
12310	if ivrr.EncryptionDetails != nil {
12311		objectMap["encryptionDetails"] = ivrr.EncryptionDetails
12312	}
12313	if ivrr.RestoreDiskLunList != nil {
12314		objectMap["restoreDiskLunList"] = ivrr.RestoreDiskLunList
12315	}
12316	if ivrr.ObjectType != "" {
12317		objectMap["objectType"] = ivrr.ObjectType
12318	}
12319	return json.Marshal(objectMap)
12320}
12321
12322// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12323func (ivrr IaasVMRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
12324	return nil, false
12325}
12326
12327// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12328func (ivrr IaasVMRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
12329	return nil, false
12330}
12331
12332// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12333func (ivrr IaasVMRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
12334	return nil, false
12335}
12336
12337// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12338func (ivrr IaasVMRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
12339	return nil, false
12340}
12341
12342// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12343func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
12344	return nil, false
12345}
12346
12347// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12348func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
12349	return nil, false
12350}
12351
12352// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12353func (ivrr IaasVMRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
12354	return nil, false
12355}
12356
12357// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12358func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
12359	return nil, false
12360}
12361
12362// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12363func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
12364	return nil, false
12365}
12366
12367// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12368func (ivrr IaasVMRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
12369	return nil, false
12370}
12371
12372// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12373func (ivrr IaasVMRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
12374	return &ivrr, true
12375}
12376
12377// AsRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12378func (ivrr IaasVMRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
12379	return nil, false
12380}
12381
12382// AsBasicRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
12383func (ivrr IaasVMRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
12384	return &ivrr, true
12385}
12386
12387// BasicILRRequest parameters to Provision ILR API.
12388type BasicILRRequest interface {
12389	AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool)
12390	AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool)
12391	AsILRRequest() (*ILRRequest, bool)
12392}
12393
12394// ILRRequest parameters to Provision ILR API.
12395type ILRRequest struct {
12396	// ObjectType - Possible values include: 'ObjectTypeILRRequest', 'ObjectTypeAzureFileShareProvisionILRRequest', 'ObjectTypeIaasVMILRRegistrationRequest'
12397	ObjectType ObjectTypeBasicILRRequest `json:"objectType,omitempty"`
12398}
12399
12400func unmarshalBasicILRRequest(body []byte) (BasicILRRequest, error) {
12401	var m map[string]interface{}
12402	err := json.Unmarshal(body, &m)
12403	if err != nil {
12404		return nil, err
12405	}
12406
12407	switch m["objectType"] {
12408	case string(ObjectTypeAzureFileShareProvisionILRRequest):
12409		var afspir AzureFileShareProvisionILRRequest
12410		err := json.Unmarshal(body, &afspir)
12411		return afspir, err
12412	case string(ObjectTypeIaasVMILRRegistrationRequest):
12413		var ivrr IaasVMILRRegistrationRequest
12414		err := json.Unmarshal(body, &ivrr)
12415		return ivrr, err
12416	default:
12417		var ir ILRRequest
12418		err := json.Unmarshal(body, &ir)
12419		return ir, err
12420	}
12421}
12422func unmarshalBasicILRRequestArray(body []byte) ([]BasicILRRequest, error) {
12423	var rawMessages []*json.RawMessage
12424	err := json.Unmarshal(body, &rawMessages)
12425	if err != nil {
12426		return nil, err
12427	}
12428
12429	irArray := make([]BasicILRRequest, len(rawMessages))
12430
12431	for index, rawMessage := range rawMessages {
12432		ir, err := unmarshalBasicILRRequest(*rawMessage)
12433		if err != nil {
12434			return nil, err
12435		}
12436		irArray[index] = ir
12437	}
12438	return irArray, nil
12439}
12440
12441// MarshalJSON is the custom marshaler for ILRRequest.
12442func (ir ILRRequest) MarshalJSON() ([]byte, error) {
12443	ir.ObjectType = ObjectTypeILRRequest
12444	objectMap := make(map[string]interface{})
12445	if ir.ObjectType != "" {
12446		objectMap["objectType"] = ir.ObjectType
12447	}
12448	return json.Marshal(objectMap)
12449}
12450
12451// AsAzureFileShareProvisionILRRequest is the BasicILRRequest implementation for ILRRequest.
12452func (ir ILRRequest) AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool) {
12453	return nil, false
12454}
12455
12456// AsIaasVMILRRegistrationRequest is the BasicILRRequest implementation for ILRRequest.
12457func (ir ILRRequest) AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool) {
12458	return nil, false
12459}
12460
12461// AsILRRequest is the BasicILRRequest implementation for ILRRequest.
12462func (ir ILRRequest) AsILRRequest() (*ILRRequest, bool) {
12463	return &ir, true
12464}
12465
12466// AsBasicILRRequest is the BasicILRRequest implementation for ILRRequest.
12467func (ir ILRRequest) AsBasicILRRequest() (BasicILRRequest, bool) {
12468	return &ir, true
12469}
12470
12471// ILRRequestResource parameters to Provision ILR API.
12472type ILRRequestResource struct {
12473	// Properties - ILRRequestResource properties
12474	Properties BasicILRRequest `json:"properties,omitempty"`
12475	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
12476	ID *string `json:"id,omitempty"`
12477	// Name - READ-ONLY; Resource name associated with the resource.
12478	Name *string `json:"name,omitempty"`
12479	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
12480	Type *string `json:"type,omitempty"`
12481	// Location - Resource location.
12482	Location *string `json:"location,omitempty"`
12483	// Tags - Resource tags.
12484	Tags map[string]*string `json:"tags"`
12485	// ETag - Optional ETag.
12486	ETag *string `json:"eTag,omitempty"`
12487}
12488
12489// MarshalJSON is the custom marshaler for ILRRequestResource.
12490func (irr ILRRequestResource) MarshalJSON() ([]byte, error) {
12491	objectMap := make(map[string]interface{})
12492	objectMap["properties"] = irr.Properties
12493	if irr.Location != nil {
12494		objectMap["location"] = irr.Location
12495	}
12496	if irr.Tags != nil {
12497		objectMap["tags"] = irr.Tags
12498	}
12499	if irr.ETag != nil {
12500		objectMap["eTag"] = irr.ETag
12501	}
12502	return json.Marshal(objectMap)
12503}
12504
12505// UnmarshalJSON is the custom unmarshaler for ILRRequestResource struct.
12506func (irr *ILRRequestResource) UnmarshalJSON(body []byte) error {
12507	var m map[string]*json.RawMessage
12508	err := json.Unmarshal(body, &m)
12509	if err != nil {
12510		return err
12511	}
12512	for k, v := range m {
12513		switch k {
12514		case "properties":
12515			if v != nil {
12516				properties, err := unmarshalBasicILRRequest(*v)
12517				if err != nil {
12518					return err
12519				}
12520				irr.Properties = properties
12521			}
12522		case "id":
12523			if v != nil {
12524				var ID string
12525				err = json.Unmarshal(*v, &ID)
12526				if err != nil {
12527					return err
12528				}
12529				irr.ID = &ID
12530			}
12531		case "name":
12532			if v != nil {
12533				var name string
12534				err = json.Unmarshal(*v, &name)
12535				if err != nil {
12536					return err
12537				}
12538				irr.Name = &name
12539			}
12540		case "type":
12541			if v != nil {
12542				var typeVar string
12543				err = json.Unmarshal(*v, &typeVar)
12544				if err != nil {
12545					return err
12546				}
12547				irr.Type = &typeVar
12548			}
12549		case "location":
12550			if v != nil {
12551				var location string
12552				err = json.Unmarshal(*v, &location)
12553				if err != nil {
12554					return err
12555				}
12556				irr.Location = &location
12557			}
12558		case "tags":
12559			if v != nil {
12560				var tags map[string]*string
12561				err = json.Unmarshal(*v, &tags)
12562				if err != nil {
12563					return err
12564				}
12565				irr.Tags = tags
12566			}
12567		case "eTag":
12568			if v != nil {
12569				var eTag string
12570				err = json.Unmarshal(*v, &eTag)
12571				if err != nil {
12572					return err
12573				}
12574				irr.ETag = &eTag
12575			}
12576		}
12577	}
12578
12579	return nil
12580}
12581
12582// InquiryInfo details about inquired protectable items under a given container.
12583type InquiryInfo struct {
12584	// Status - Inquiry Status for this container such as
12585	// InProgress | Failed | Succeeded
12586	Status *string `json:"status,omitempty"`
12587	// ErrorDetail - Error Details if the Status is non-success.
12588	ErrorDetail *ErrorDetail `json:"errorDetail,omitempty"`
12589	// InquiryDetails - Inquiry Details which will have workload specific details.
12590	// For e.g. - For SQL and oracle this will contain different details.
12591	InquiryDetails *[]WorkloadInquiryDetails `json:"inquiryDetails,omitempty"`
12592}
12593
12594// InquiryValidation validation for inquired protectable items under a given container.
12595type InquiryValidation struct {
12596	// Status - Status for the Inquiry Validation.
12597	Status *string `json:"status,omitempty"`
12598	// ErrorDetail - Error Detail in case the status is non-success.
12599	ErrorDetail *ErrorDetail `json:"errorDetail,omitempty"`
12600	// AdditionalDetail - READ-ONLY; Error Additional Detail in case the status is non-success.
12601	AdditionalDetail *string `json:"additionalDetail,omitempty"`
12602}
12603
12604// MarshalJSON is the custom marshaler for InquiryValidation.
12605func (iv InquiryValidation) MarshalJSON() ([]byte, error) {
12606	objectMap := make(map[string]interface{})
12607	if iv.Status != nil {
12608		objectMap["status"] = iv.Status
12609	}
12610	if iv.ErrorDetail != nil {
12611		objectMap["errorDetail"] = iv.ErrorDetail
12612	}
12613	return json.Marshal(objectMap)
12614}
12615
12616// InstantItemRecoveryTarget target details for file / folder restore.
12617type InstantItemRecoveryTarget struct {
12618	// ClientScripts - List of client scripts.
12619	ClientScripts *[]ClientScriptForConnect `json:"clientScripts,omitempty"`
12620}
12621
12622// InstantRPAdditionalDetails ...
12623type InstantRPAdditionalDetails struct {
12624	AzureBackupRGNamePrefix *string `json:"azureBackupRGNamePrefix,omitempty"`
12625	AzureBackupRGNameSuffix *string `json:"azureBackupRGNameSuffix,omitempty"`
12626}
12627
12628// BasicJob defines workload agnostic properties for a job.
12629type BasicJob interface {
12630	AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool)
12631	AsAzureStorageJob() (*AzureStorageJob, bool)
12632	AsAzureWorkloadJob() (*AzureWorkloadJob, bool)
12633	AsDpmJob() (*DpmJob, bool)
12634	AsMabJob() (*MabJob, bool)
12635	AsJob() (*Job, bool)
12636}
12637
12638// Job defines workload agnostic properties for a job.
12639type Job struct {
12640	// EntityFriendlyName - Friendly name of the entity on which the current job is executing.
12641	EntityFriendlyName *string `json:"entityFriendlyName,omitempty"`
12642	// BackupManagementType - Backup management type to execute the current job. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
12643	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
12644	// Operation - The operation name.
12645	Operation *string `json:"operation,omitempty"`
12646	// Status - Job status.
12647	Status *string `json:"status,omitempty"`
12648	// StartTime - The start time.
12649	StartTime *date.Time `json:"startTime,omitempty"`
12650	// EndTime - The end time.
12651	EndTime *date.Time `json:"endTime,omitempty"`
12652	// ActivityID - ActivityId of job.
12653	ActivityID *string `json:"activityId,omitempty"`
12654	// JobType - Possible values include: 'JobTypeJob', 'JobTypeAzureIaaSVMJob', 'JobTypeAzureStorageJob', 'JobTypeAzureWorkloadJob', 'JobTypeDpmJob', 'JobTypeMabJob'
12655	JobType JobType `json:"jobType,omitempty"`
12656}
12657
12658func unmarshalBasicJob(body []byte) (BasicJob, error) {
12659	var m map[string]interface{}
12660	err := json.Unmarshal(body, &m)
12661	if err != nil {
12662		return nil, err
12663	}
12664
12665	switch m["jobType"] {
12666	case string(JobTypeAzureIaaSVMJob):
12667		var aisj AzureIaaSVMJob
12668		err := json.Unmarshal(body, &aisj)
12669		return aisj, err
12670	case string(JobTypeAzureStorageJob):
12671		var asj AzureStorageJob
12672		err := json.Unmarshal(body, &asj)
12673		return asj, err
12674	case string(JobTypeAzureWorkloadJob):
12675		var awj AzureWorkloadJob
12676		err := json.Unmarshal(body, &awj)
12677		return awj, err
12678	case string(JobTypeDpmJob):
12679		var dj DpmJob
12680		err := json.Unmarshal(body, &dj)
12681		return dj, err
12682	case string(JobTypeMabJob):
12683		var mj MabJob
12684		err := json.Unmarshal(body, &mj)
12685		return mj, err
12686	default:
12687		var j Job
12688		err := json.Unmarshal(body, &j)
12689		return j, err
12690	}
12691}
12692func unmarshalBasicJobArray(body []byte) ([]BasicJob, error) {
12693	var rawMessages []*json.RawMessage
12694	err := json.Unmarshal(body, &rawMessages)
12695	if err != nil {
12696		return nil, err
12697	}
12698
12699	jArray := make([]BasicJob, len(rawMessages))
12700
12701	for index, rawMessage := range rawMessages {
12702		j, err := unmarshalBasicJob(*rawMessage)
12703		if err != nil {
12704			return nil, err
12705		}
12706		jArray[index] = j
12707	}
12708	return jArray, nil
12709}
12710
12711// MarshalJSON is the custom marshaler for Job.
12712func (j Job) MarshalJSON() ([]byte, error) {
12713	j.JobType = JobTypeJob
12714	objectMap := make(map[string]interface{})
12715	if j.EntityFriendlyName != nil {
12716		objectMap["entityFriendlyName"] = j.EntityFriendlyName
12717	}
12718	if j.BackupManagementType != "" {
12719		objectMap["backupManagementType"] = j.BackupManagementType
12720	}
12721	if j.Operation != nil {
12722		objectMap["operation"] = j.Operation
12723	}
12724	if j.Status != nil {
12725		objectMap["status"] = j.Status
12726	}
12727	if j.StartTime != nil {
12728		objectMap["startTime"] = j.StartTime
12729	}
12730	if j.EndTime != nil {
12731		objectMap["endTime"] = j.EndTime
12732	}
12733	if j.ActivityID != nil {
12734		objectMap["activityId"] = j.ActivityID
12735	}
12736	if j.JobType != "" {
12737		objectMap["jobType"] = j.JobType
12738	}
12739	return json.Marshal(objectMap)
12740}
12741
12742// AsAzureIaaSVMJob is the BasicJob implementation for Job.
12743func (j Job) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
12744	return nil, false
12745}
12746
12747// AsAzureStorageJob is the BasicJob implementation for Job.
12748func (j Job) AsAzureStorageJob() (*AzureStorageJob, bool) {
12749	return nil, false
12750}
12751
12752// AsAzureWorkloadJob is the BasicJob implementation for Job.
12753func (j Job) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
12754	return nil, false
12755}
12756
12757// AsDpmJob is the BasicJob implementation for Job.
12758func (j Job) AsDpmJob() (*DpmJob, bool) {
12759	return nil, false
12760}
12761
12762// AsMabJob is the BasicJob implementation for Job.
12763func (j Job) AsMabJob() (*MabJob, bool) {
12764	return nil, false
12765}
12766
12767// AsJob is the BasicJob implementation for Job.
12768func (j Job) AsJob() (*Job, bool) {
12769	return &j, true
12770}
12771
12772// AsBasicJob is the BasicJob implementation for Job.
12773func (j Job) AsBasicJob() (BasicJob, bool) {
12774	return &j, true
12775}
12776
12777// JobQueryObject filters to list the jobs.
12778type JobQueryObject struct {
12779	// Status - Status of the job. Possible values include: 'JobStatusInvalid', 'JobStatusInProgress', 'JobStatusCompleted', 'JobStatusFailed', 'JobStatusCompletedWithWarnings', 'JobStatusCancelled', 'JobStatusCancelling'
12780	Status JobStatus `json:"status,omitempty"`
12781	// BackupManagementType - Type of backup management for the job. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
12782	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
12783	// Operation - Type of operation. Possible values include: 'JobOperationTypeInvalid', 'JobOperationTypeRegister', 'JobOperationTypeUnRegister', 'JobOperationTypeConfigureBackup', 'JobOperationTypeBackup', 'JobOperationTypeRestore', 'JobOperationTypeDisableBackup', 'JobOperationTypeDeleteBackupData', 'JobOperationTypeCrossRegionRestore', 'JobOperationTypeUndelete'
12784	Operation JobOperationType `json:"operation,omitempty"`
12785	// JobID - JobID represents the job uniquely.
12786	JobID *string `json:"jobId,omitempty"`
12787	// StartTime - Job has started at this time. Value is in UTC.
12788	StartTime *date.Time `json:"startTime,omitempty"`
12789	// EndTime - Job has ended at this time. Value is in UTC.
12790	EndTime *date.Time `json:"endTime,omitempty"`
12791}
12792
12793// JobResource defines workload agnostic properties for a job.
12794type JobResource struct {
12795	autorest.Response `json:"-"`
12796	// Properties - JobResource properties
12797	Properties BasicJob `json:"properties,omitempty"`
12798	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
12799	ID *string `json:"id,omitempty"`
12800	// Name - READ-ONLY; Resource name associated with the resource.
12801	Name *string `json:"name,omitempty"`
12802	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
12803	Type *string `json:"type,omitempty"`
12804	// Location - Resource location.
12805	Location *string `json:"location,omitempty"`
12806	// Tags - Resource tags.
12807	Tags map[string]*string `json:"tags"`
12808	// ETag - Optional ETag.
12809	ETag *string `json:"eTag,omitempty"`
12810}
12811
12812// MarshalJSON is the custom marshaler for JobResource.
12813func (jr JobResource) MarshalJSON() ([]byte, error) {
12814	objectMap := make(map[string]interface{})
12815	objectMap["properties"] = jr.Properties
12816	if jr.Location != nil {
12817		objectMap["location"] = jr.Location
12818	}
12819	if jr.Tags != nil {
12820		objectMap["tags"] = jr.Tags
12821	}
12822	if jr.ETag != nil {
12823		objectMap["eTag"] = jr.ETag
12824	}
12825	return json.Marshal(objectMap)
12826}
12827
12828// UnmarshalJSON is the custom unmarshaler for JobResource struct.
12829func (jr *JobResource) UnmarshalJSON(body []byte) error {
12830	var m map[string]*json.RawMessage
12831	err := json.Unmarshal(body, &m)
12832	if err != nil {
12833		return err
12834	}
12835	for k, v := range m {
12836		switch k {
12837		case "properties":
12838			if v != nil {
12839				properties, err := unmarshalBasicJob(*v)
12840				if err != nil {
12841					return err
12842				}
12843				jr.Properties = properties
12844			}
12845		case "id":
12846			if v != nil {
12847				var ID string
12848				err = json.Unmarshal(*v, &ID)
12849				if err != nil {
12850					return err
12851				}
12852				jr.ID = &ID
12853			}
12854		case "name":
12855			if v != nil {
12856				var name string
12857				err = json.Unmarshal(*v, &name)
12858				if err != nil {
12859					return err
12860				}
12861				jr.Name = &name
12862			}
12863		case "type":
12864			if v != nil {
12865				var typeVar string
12866				err = json.Unmarshal(*v, &typeVar)
12867				if err != nil {
12868					return err
12869				}
12870				jr.Type = &typeVar
12871			}
12872		case "location":
12873			if v != nil {
12874				var location string
12875				err = json.Unmarshal(*v, &location)
12876				if err != nil {
12877					return err
12878				}
12879				jr.Location = &location
12880			}
12881		case "tags":
12882			if v != nil {
12883				var tags map[string]*string
12884				err = json.Unmarshal(*v, &tags)
12885				if err != nil {
12886					return err
12887				}
12888				jr.Tags = tags
12889			}
12890		case "eTag":
12891			if v != nil {
12892				var eTag string
12893				err = json.Unmarshal(*v, &eTag)
12894				if err != nil {
12895					return err
12896				}
12897				jr.ETag = &eTag
12898			}
12899		}
12900	}
12901
12902	return nil
12903}
12904
12905// JobResourceList list of Job resources
12906type JobResourceList struct {
12907	autorest.Response `json:"-"`
12908	// Value - List of resources.
12909	Value *[]JobResource `json:"value,omitempty"`
12910	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
12911	NextLink *string `json:"nextLink,omitempty"`
12912}
12913
12914// JobResourceListIterator provides access to a complete listing of JobResource values.
12915type JobResourceListIterator struct {
12916	i    int
12917	page JobResourceListPage
12918}
12919
12920// NextWithContext advances to the next value.  If there was an error making
12921// the request the iterator does not advance and the error is returned.
12922func (iter *JobResourceListIterator) NextWithContext(ctx context.Context) (err error) {
12923	if tracing.IsEnabled() {
12924		ctx = tracing.StartSpan(ctx, fqdn+"/JobResourceListIterator.NextWithContext")
12925		defer func() {
12926			sc := -1
12927			if iter.Response().Response.Response != nil {
12928				sc = iter.Response().Response.Response.StatusCode
12929			}
12930			tracing.EndSpan(ctx, sc, err)
12931		}()
12932	}
12933	iter.i++
12934	if iter.i < len(iter.page.Values()) {
12935		return nil
12936	}
12937	err = iter.page.NextWithContext(ctx)
12938	if err != nil {
12939		iter.i--
12940		return err
12941	}
12942	iter.i = 0
12943	return nil
12944}
12945
12946// Next advances to the next value.  If there was an error making
12947// the request the iterator does not advance and the error is returned.
12948// Deprecated: Use NextWithContext() instead.
12949func (iter *JobResourceListIterator) Next() error {
12950	return iter.NextWithContext(context.Background())
12951}
12952
12953// NotDone returns true if the enumeration should be started or is not yet complete.
12954func (iter JobResourceListIterator) NotDone() bool {
12955	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12956}
12957
12958// Response returns the raw server response from the last page request.
12959func (iter JobResourceListIterator) Response() JobResourceList {
12960	return iter.page.Response()
12961}
12962
12963// Value returns the current value or a zero-initialized value if the
12964// iterator has advanced beyond the end of the collection.
12965func (iter JobResourceListIterator) Value() JobResource {
12966	if !iter.page.NotDone() {
12967		return JobResource{}
12968	}
12969	return iter.page.Values()[iter.i]
12970}
12971
12972// Creates a new instance of the JobResourceListIterator type.
12973func NewJobResourceListIterator(page JobResourceListPage) JobResourceListIterator {
12974	return JobResourceListIterator{page: page}
12975}
12976
12977// IsEmpty returns true if the ListResult contains no values.
12978func (jrl JobResourceList) IsEmpty() bool {
12979	return jrl.Value == nil || len(*jrl.Value) == 0
12980}
12981
12982// hasNextLink returns true if the NextLink is not empty.
12983func (jrl JobResourceList) hasNextLink() bool {
12984	return jrl.NextLink != nil && len(*jrl.NextLink) != 0
12985}
12986
12987// jobResourceListPreparer prepares a request to retrieve the next set of results.
12988// It returns nil if no more results exist.
12989func (jrl JobResourceList) jobResourceListPreparer(ctx context.Context) (*http.Request, error) {
12990	if !jrl.hasNextLink() {
12991		return nil, nil
12992	}
12993	return autorest.Prepare((&http.Request{}).WithContext(ctx),
12994		autorest.AsJSON(),
12995		autorest.AsGet(),
12996		autorest.WithBaseURL(to.String(jrl.NextLink)))
12997}
12998
12999// JobResourceListPage contains a page of JobResource values.
13000type JobResourceListPage struct {
13001	fn  func(context.Context, JobResourceList) (JobResourceList, error)
13002	jrl JobResourceList
13003}
13004
13005// NextWithContext advances to the next page of values.  If there was an error making
13006// the request the page does not advance and the error is returned.
13007func (page *JobResourceListPage) NextWithContext(ctx context.Context) (err error) {
13008	if tracing.IsEnabled() {
13009		ctx = tracing.StartSpan(ctx, fqdn+"/JobResourceListPage.NextWithContext")
13010		defer func() {
13011			sc := -1
13012			if page.Response().Response.Response != nil {
13013				sc = page.Response().Response.Response.StatusCode
13014			}
13015			tracing.EndSpan(ctx, sc, err)
13016		}()
13017	}
13018	for {
13019		next, err := page.fn(ctx, page.jrl)
13020		if err != nil {
13021			return err
13022		}
13023		page.jrl = next
13024		if !next.hasNextLink() || !next.IsEmpty() {
13025			break
13026		}
13027	}
13028	return nil
13029}
13030
13031// Next advances to the next page of values.  If there was an error making
13032// the request the page does not advance and the error is returned.
13033// Deprecated: Use NextWithContext() instead.
13034func (page *JobResourceListPage) Next() error {
13035	return page.NextWithContext(context.Background())
13036}
13037
13038// NotDone returns true if the page enumeration should be started or is not yet complete.
13039func (page JobResourceListPage) NotDone() bool {
13040	return !page.jrl.IsEmpty()
13041}
13042
13043// Response returns the raw server response from the last page request.
13044func (page JobResourceListPage) Response() JobResourceList {
13045	return page.jrl
13046}
13047
13048// Values returns the slice of values for the current page or nil if there are no values.
13049func (page JobResourceListPage) Values() []JobResource {
13050	if page.jrl.IsEmpty() {
13051		return nil
13052	}
13053	return *page.jrl.Value
13054}
13055
13056// Creates a new instance of the JobResourceListPage type.
13057func NewJobResourceListPage(cur JobResourceList, getNextPage func(context.Context, JobResourceList) (JobResourceList, error)) JobResourceListPage {
13058	return JobResourceListPage{
13059		fn:  getNextPage,
13060		jrl: cur,
13061	}
13062}
13063
13064// KEKDetails KEK is encryption key for BEK.
13065type KEKDetails struct {
13066	// KeyURL - Key is KEK.
13067	KeyURL *string `json:"keyUrl,omitempty"`
13068	// KeyVaultID - Key Vault ID where this Key is stored.
13069	KeyVaultID *string `json:"keyVaultId,omitempty"`
13070	// KeyBackupData - KEK data.
13071	KeyBackupData *string `json:"keyBackupData,omitempty"`
13072}
13073
13074// KeyAndSecretDetails BEK is bitlocker key.
13075// KEK is encryption key for BEK
13076// If the VM was encrypted then we will store following details :
13077// 1. Secret(BEK) - Url + Backup Data + vaultId.
13078// 2. Key(KEK) - Url + Backup Data + vaultId.
13079// 3. EncryptionMechanism
13080// BEK and KEK can potentially have different vault ids.
13081type KeyAndSecretDetails struct {
13082	// KekDetails - KEK is encryption key for BEK.
13083	KekDetails *KEKDetails `json:"kekDetails,omitempty"`
13084	// BekDetails - BEK is bitlocker encryption key.
13085	BekDetails *BEKDetails `json:"bekDetails,omitempty"`
13086	// EncryptionMechanism - Encryption mechanism: None/ SinglePass/ DoublePass
13087	EncryptionMechanism *string `json:"encryptionMechanism,omitempty"`
13088}
13089
13090// KPIResourceHealthDetails KPI Resource Health Details
13091type KPIResourceHealthDetails struct {
13092	// ResourceHealthStatus - Resource Health Status. Possible values include: 'ResourceHealthStatusHealthy', 'ResourceHealthStatusTransientDegraded', 'ResourceHealthStatusPersistentDegraded', 'ResourceHealthStatusTransientUnhealthy', 'ResourceHealthStatusPersistentUnhealthy', 'ResourceHealthStatusInvalid'
13093	ResourceHealthStatus ResourceHealthStatus `json:"resourceHealthStatus,omitempty"`
13094	// ResourceHealthDetails - Resource Health Status
13095	ResourceHealthDetails *[]ResourceHealthDetails `json:"resourceHealthDetails,omitempty"`
13096}
13097
13098// LogSchedulePolicy log policy schedule.
13099type LogSchedulePolicy struct {
13100	// ScheduleFrequencyInMins - Frequency of the log schedule operation of this policy in minutes.
13101	ScheduleFrequencyInMins *int32 `json:"scheduleFrequencyInMins,omitempty"`
13102	// SchedulePolicyType - Possible values include: 'SchedulePolicyTypeSchedulePolicy', 'SchedulePolicyTypeLogSchedulePolicy', 'SchedulePolicyTypeLongTermSchedulePolicy', 'SchedulePolicyTypeSimpleSchedulePolicy'
13103	SchedulePolicyType SchedulePolicyType `json:"schedulePolicyType,omitempty"`
13104}
13105
13106// MarshalJSON is the custom marshaler for LogSchedulePolicy.
13107func (lsp LogSchedulePolicy) MarshalJSON() ([]byte, error) {
13108	lsp.SchedulePolicyType = SchedulePolicyTypeLogSchedulePolicy
13109	objectMap := make(map[string]interface{})
13110	if lsp.ScheduleFrequencyInMins != nil {
13111		objectMap["scheduleFrequencyInMins"] = lsp.ScheduleFrequencyInMins
13112	}
13113	if lsp.SchedulePolicyType != "" {
13114		objectMap["schedulePolicyType"] = lsp.SchedulePolicyType
13115	}
13116	return json.Marshal(objectMap)
13117}
13118
13119// AsLogSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
13120func (lsp LogSchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
13121	return &lsp, true
13122}
13123
13124// AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
13125func (lsp LogSchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
13126	return nil, false
13127}
13128
13129// AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
13130func (lsp LogSchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
13131	return nil, false
13132}
13133
13134// AsSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
13135func (lsp LogSchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
13136	return nil, false
13137}
13138
13139// AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
13140func (lsp LogSchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
13141	return &lsp, true
13142}
13143
13144// LongTermRetentionPolicy long term retention policy.
13145type LongTermRetentionPolicy struct {
13146	// DailySchedule - Daily retention schedule of the protection policy.
13147	DailySchedule *DailyRetentionSchedule `json:"dailySchedule,omitempty"`
13148	// WeeklySchedule - Weekly retention schedule of the protection policy.
13149	WeeklySchedule *WeeklyRetentionSchedule `json:"weeklySchedule,omitempty"`
13150	// MonthlySchedule - Monthly retention schedule of the protection policy.
13151	MonthlySchedule *MonthlyRetentionSchedule `json:"monthlySchedule,omitempty"`
13152	// YearlySchedule - Yearly retention schedule of the protection policy.
13153	YearlySchedule *YearlyRetentionSchedule `json:"yearlySchedule,omitempty"`
13154	// RetentionPolicyType - Possible values include: 'RetentionPolicyTypeRetentionPolicy', 'RetentionPolicyTypeLongTermRetentionPolicy', 'RetentionPolicyTypeSimpleRetentionPolicy'
13155	RetentionPolicyType RetentionPolicyType `json:"retentionPolicyType,omitempty"`
13156}
13157
13158// MarshalJSON is the custom marshaler for LongTermRetentionPolicy.
13159func (ltrp LongTermRetentionPolicy) MarshalJSON() ([]byte, error) {
13160	ltrp.RetentionPolicyType = RetentionPolicyTypeLongTermRetentionPolicy
13161	objectMap := make(map[string]interface{})
13162	if ltrp.DailySchedule != nil {
13163		objectMap["dailySchedule"] = ltrp.DailySchedule
13164	}
13165	if ltrp.WeeklySchedule != nil {
13166		objectMap["weeklySchedule"] = ltrp.WeeklySchedule
13167	}
13168	if ltrp.MonthlySchedule != nil {
13169		objectMap["monthlySchedule"] = ltrp.MonthlySchedule
13170	}
13171	if ltrp.YearlySchedule != nil {
13172		objectMap["yearlySchedule"] = ltrp.YearlySchedule
13173	}
13174	if ltrp.RetentionPolicyType != "" {
13175		objectMap["retentionPolicyType"] = ltrp.RetentionPolicyType
13176	}
13177	return json.Marshal(objectMap)
13178}
13179
13180// AsLongTermRetentionPolicy is the BasicRetentionPolicy implementation for LongTermRetentionPolicy.
13181func (ltrp LongTermRetentionPolicy) AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool) {
13182	return &ltrp, true
13183}
13184
13185// AsSimpleRetentionPolicy is the BasicRetentionPolicy implementation for LongTermRetentionPolicy.
13186func (ltrp LongTermRetentionPolicy) AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool) {
13187	return nil, false
13188}
13189
13190// AsRetentionPolicy is the BasicRetentionPolicy implementation for LongTermRetentionPolicy.
13191func (ltrp LongTermRetentionPolicy) AsRetentionPolicy() (*RetentionPolicy, bool) {
13192	return nil, false
13193}
13194
13195// AsBasicRetentionPolicy is the BasicRetentionPolicy implementation for LongTermRetentionPolicy.
13196func (ltrp LongTermRetentionPolicy) AsBasicRetentionPolicy() (BasicRetentionPolicy, bool) {
13197	return &ltrp, true
13198}
13199
13200// LongTermSchedulePolicy long term policy schedule.
13201type LongTermSchedulePolicy struct {
13202	// SchedulePolicyType - Possible values include: 'SchedulePolicyTypeSchedulePolicy', 'SchedulePolicyTypeLogSchedulePolicy', 'SchedulePolicyTypeLongTermSchedulePolicy', 'SchedulePolicyTypeSimpleSchedulePolicy'
13203	SchedulePolicyType SchedulePolicyType `json:"schedulePolicyType,omitempty"`
13204}
13205
13206// MarshalJSON is the custom marshaler for LongTermSchedulePolicy.
13207func (ltsp LongTermSchedulePolicy) MarshalJSON() ([]byte, error) {
13208	ltsp.SchedulePolicyType = SchedulePolicyTypeLongTermSchedulePolicy
13209	objectMap := make(map[string]interface{})
13210	if ltsp.SchedulePolicyType != "" {
13211		objectMap["schedulePolicyType"] = ltsp.SchedulePolicyType
13212	}
13213	return json.Marshal(objectMap)
13214}
13215
13216// AsLogSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
13217func (ltsp LongTermSchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
13218	return nil, false
13219}
13220
13221// AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
13222func (ltsp LongTermSchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
13223	return &ltsp, true
13224}
13225
13226// AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
13227func (ltsp LongTermSchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
13228	return nil, false
13229}
13230
13231// AsSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
13232func (ltsp LongTermSchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
13233	return nil, false
13234}
13235
13236// AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
13237func (ltsp LongTermSchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
13238	return &ltsp, true
13239}
13240
13241// MabContainer container with items backed up using MAB backup engine.
13242type MabContainer struct {
13243	// CanReRegister - Can the container be registered one more time.
13244	CanReRegister *bool `json:"canReRegister,omitempty"`
13245	// ContainerID - ContainerID represents the container.
13246	ContainerID *int64 `json:"containerId,omitempty"`
13247	// ProtectedItemCount - Number of items backed up in this container.
13248	ProtectedItemCount *int64 `json:"protectedItemCount,omitempty"`
13249	// AgentVersion - Agent version of this container.
13250	AgentVersion *string `json:"agentVersion,omitempty"`
13251	// ExtendedInfo - Additional information for this container
13252	ExtendedInfo *MabContainerExtendedInfo `json:"extendedInfo,omitempty"`
13253	// MabContainerHealthDetails - Health details on this mab container.
13254	MabContainerHealthDetails *[]MABContainerHealthDetails `json:"mabContainerHealthDetails,omitempty"`
13255	// ContainerHealthState - Health state of mab container.
13256	ContainerHealthState *string `json:"containerHealthState,omitempty"`
13257	// FriendlyName - Friendly name of the container.
13258	FriendlyName *string `json:"friendlyName,omitempty"`
13259	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
13260	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
13261	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
13262	RegistrationStatus *string `json:"registrationStatus,omitempty"`
13263	// HealthStatus - Status of health of the container.
13264	HealthStatus *string `json:"healthStatus,omitempty"`
13265	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
13266	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
13267}
13268
13269// MarshalJSON is the custom marshaler for MabContainer.
13270func (mc MabContainer) MarshalJSON() ([]byte, error) {
13271	mc.ContainerType = ContainerTypeWindows1
13272	objectMap := make(map[string]interface{})
13273	if mc.CanReRegister != nil {
13274		objectMap["canReRegister"] = mc.CanReRegister
13275	}
13276	if mc.ContainerID != nil {
13277		objectMap["containerId"] = mc.ContainerID
13278	}
13279	if mc.ProtectedItemCount != nil {
13280		objectMap["protectedItemCount"] = mc.ProtectedItemCount
13281	}
13282	if mc.AgentVersion != nil {
13283		objectMap["agentVersion"] = mc.AgentVersion
13284	}
13285	if mc.ExtendedInfo != nil {
13286		objectMap["extendedInfo"] = mc.ExtendedInfo
13287	}
13288	if mc.MabContainerHealthDetails != nil {
13289		objectMap["mabContainerHealthDetails"] = mc.MabContainerHealthDetails
13290	}
13291	if mc.ContainerHealthState != nil {
13292		objectMap["containerHealthState"] = mc.ContainerHealthState
13293	}
13294	if mc.FriendlyName != nil {
13295		objectMap["friendlyName"] = mc.FriendlyName
13296	}
13297	if mc.BackupManagementType != "" {
13298		objectMap["backupManagementType"] = mc.BackupManagementType
13299	}
13300	if mc.RegistrationStatus != nil {
13301		objectMap["registrationStatus"] = mc.RegistrationStatus
13302	}
13303	if mc.HealthStatus != nil {
13304		objectMap["healthStatus"] = mc.HealthStatus
13305	}
13306	if mc.ContainerType != "" {
13307		objectMap["containerType"] = mc.ContainerType
13308	}
13309	return json.Marshal(objectMap)
13310}
13311
13312// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for MabContainer.
13313func (mc MabContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
13314	return nil, false
13315}
13316
13317// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for MabContainer.
13318func (mc MabContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
13319	return nil, false
13320}
13321
13322// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for MabContainer.
13323func (mc MabContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
13324	return nil, false
13325}
13326
13327// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
13328func (mc MabContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
13329	return nil, false
13330}
13331
13332// AsAzureSQLContainer is the BasicProtectionContainer implementation for MabContainer.
13333func (mc MabContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
13334	return nil, false
13335}
13336
13337// AsAzureStorageContainer is the BasicProtectionContainer implementation for MabContainer.
13338func (mc MabContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
13339	return nil, false
13340}
13341
13342// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
13343func (mc MabContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
13344	return nil, false
13345}
13346
13347// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for MabContainer.
13348func (mc MabContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
13349	return nil, false
13350}
13351
13352// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for MabContainer.
13353func (mc MabContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
13354	return nil, false
13355}
13356
13357// AsDpmContainer is the BasicProtectionContainer implementation for MabContainer.
13358func (mc MabContainer) AsDpmContainer() (*DpmContainer, bool) {
13359	return nil, false
13360}
13361
13362// AsBasicDpmContainer is the BasicProtectionContainer implementation for MabContainer.
13363func (mc MabContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
13364	return nil, false
13365}
13366
13367// AsGenericContainer is the BasicProtectionContainer implementation for MabContainer.
13368func (mc MabContainer) AsGenericContainer() (*GenericContainer, bool) {
13369	return nil, false
13370}
13371
13372// AsIaaSVMContainer is the BasicProtectionContainer implementation for MabContainer.
13373func (mc MabContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
13374	return nil, false
13375}
13376
13377// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for MabContainer.
13378func (mc MabContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
13379	return nil, false
13380}
13381
13382// AsMabContainer is the BasicProtectionContainer implementation for MabContainer.
13383func (mc MabContainer) AsMabContainer() (*MabContainer, bool) {
13384	return &mc, true
13385}
13386
13387// AsProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
13388func (mc MabContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
13389	return nil, false
13390}
13391
13392// AsBasicProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
13393func (mc MabContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
13394	return &mc, true
13395}
13396
13397// MabContainerExtendedInfo additional information of the container.
13398type MabContainerExtendedInfo struct {
13399	// LastRefreshedAt - Time stamp when this container was refreshed.
13400	LastRefreshedAt *date.Time `json:"lastRefreshedAt,omitempty"`
13401	// BackupItemType - Type of backup items associated with this container. Possible values include: 'ItemTypeInvalid', 'ItemTypeVM', 'ItemTypeFileFolder', 'ItemTypeAzureSQLDb', 'ItemTypeSQLDB', 'ItemTypeExchange', 'ItemTypeSharepoint', 'ItemTypeVMwareVM', 'ItemTypeSystemState', 'ItemTypeClient', 'ItemTypeGenericDataSource', 'ItemTypeSQLDataBase', 'ItemTypeAzureFileShare', 'ItemTypeSAPHanaDatabase', 'ItemTypeSAPAseDatabase'
13402	BackupItemType ItemType `json:"backupItemType,omitempty"`
13403	// BackupItems - List of backup items associated with this container.
13404	BackupItems *[]string `json:"backupItems,omitempty"`
13405	// PolicyName - Backup policy associated with this container.
13406	PolicyName *string `json:"policyName,omitempty"`
13407	// LastBackupStatus - Latest backup status of this container.
13408	LastBackupStatus *string `json:"lastBackupStatus,omitempty"`
13409}
13410
13411// MABContainerHealthDetails MAB workload-specific Health Details.
13412type MABContainerHealthDetails struct {
13413	// Code - Health Code
13414	Code *int32 `json:"code,omitempty"`
13415	// Title - Health Title
13416	Title *string `json:"title,omitempty"`
13417	// Message - Health Message
13418	Message *string `json:"message,omitempty"`
13419	// Recommendations - Health Recommended Actions
13420	Recommendations *[]string `json:"recommendations,omitempty"`
13421}
13422
13423// MabErrorInfo MAB workload-specific error information.
13424type MabErrorInfo struct {
13425	// ErrorString - READ-ONLY; Localized error string.
13426	ErrorString *string `json:"errorString,omitempty"`
13427	// Recommendations - READ-ONLY; List of localized recommendations.
13428	Recommendations *[]string `json:"recommendations,omitempty"`
13429}
13430
13431// MarshalJSON is the custom marshaler for MabErrorInfo.
13432func (mei MabErrorInfo) MarshalJSON() ([]byte, error) {
13433	objectMap := make(map[string]interface{})
13434	return json.Marshal(objectMap)
13435}
13436
13437// MabFileFolderProtectedItem MAB workload-specific backup item.
13438type MabFileFolderProtectedItem struct {
13439	// FriendlyName - Friendly name of this backup item.
13440	FriendlyName *string `json:"friendlyName,omitempty"`
13441	// ComputerName - Name of the computer associated with this backup item.
13442	ComputerName *string `json:"computerName,omitempty"`
13443	// LastBackupStatus - Status of last backup operation.
13444	LastBackupStatus *string `json:"lastBackupStatus,omitempty"`
13445	// LastBackupTime - Timestamp of the last backup operation on this backup item.
13446	LastBackupTime *date.Time `json:"lastBackupTime,omitempty"`
13447	// ProtectionState - Protected, ProtectionStopped, IRPending or ProtectionError
13448	ProtectionState *string `json:"protectionState,omitempty"`
13449	// DeferredDeleteSyncTimeInUTC - Sync time for deferred deletion in UTC
13450	DeferredDeleteSyncTimeInUTC *int64 `json:"deferredDeleteSyncTimeInUTC,omitempty"`
13451	// ExtendedInfo - Additional information with this backup item.
13452	ExtendedInfo *MabFileFolderProtectedItemExtendedInfo `json:"extendedInfo,omitempty"`
13453	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
13454	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
13455	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
13456	WorkloadType DataSourceType `json:"workloadType,omitempty"`
13457	// ContainerName - Unique name of container
13458	ContainerName *string `json:"containerName,omitempty"`
13459	// SourceResourceID - ARM ID of the resource to be backed up.
13460	SourceResourceID *string `json:"sourceResourceId,omitempty"`
13461	// PolicyID - ID of the backup policy with which this item is backed up.
13462	PolicyID *string `json:"policyId,omitempty"`
13463	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
13464	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
13465	// BackupSetName - Name of the backup set the backup item belongs to
13466	BackupSetName *string `json:"backupSetName,omitempty"`
13467	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
13468	CreateMode CreateMode `json:"createMode,omitempty"`
13469	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
13470	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
13471	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
13472	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
13473	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
13474	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
13475	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
13476	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
13477	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
13478	IsRehydrate *bool `json:"isRehydrate,omitempty"`
13479	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
13480	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
13481}
13482
13483// MarshalJSON is the custom marshaler for MabFileFolderProtectedItem.
13484func (mffpi MabFileFolderProtectedItem) MarshalJSON() ([]byte, error) {
13485	mffpi.ProtectedItemType = ProtectedItemTypeMabFileFolderProtectedItem
13486	objectMap := make(map[string]interface{})
13487	if mffpi.FriendlyName != nil {
13488		objectMap["friendlyName"] = mffpi.FriendlyName
13489	}
13490	if mffpi.ComputerName != nil {
13491		objectMap["computerName"] = mffpi.ComputerName
13492	}
13493	if mffpi.LastBackupStatus != nil {
13494		objectMap["lastBackupStatus"] = mffpi.LastBackupStatus
13495	}
13496	if mffpi.LastBackupTime != nil {
13497		objectMap["lastBackupTime"] = mffpi.LastBackupTime
13498	}
13499	if mffpi.ProtectionState != nil {
13500		objectMap["protectionState"] = mffpi.ProtectionState
13501	}
13502	if mffpi.DeferredDeleteSyncTimeInUTC != nil {
13503		objectMap["deferredDeleteSyncTimeInUTC"] = mffpi.DeferredDeleteSyncTimeInUTC
13504	}
13505	if mffpi.ExtendedInfo != nil {
13506		objectMap["extendedInfo"] = mffpi.ExtendedInfo
13507	}
13508	if mffpi.BackupManagementType != "" {
13509		objectMap["backupManagementType"] = mffpi.BackupManagementType
13510	}
13511	if mffpi.WorkloadType != "" {
13512		objectMap["workloadType"] = mffpi.WorkloadType
13513	}
13514	if mffpi.ContainerName != nil {
13515		objectMap["containerName"] = mffpi.ContainerName
13516	}
13517	if mffpi.SourceResourceID != nil {
13518		objectMap["sourceResourceId"] = mffpi.SourceResourceID
13519	}
13520	if mffpi.PolicyID != nil {
13521		objectMap["policyId"] = mffpi.PolicyID
13522	}
13523	if mffpi.LastRecoveryPoint != nil {
13524		objectMap["lastRecoveryPoint"] = mffpi.LastRecoveryPoint
13525	}
13526	if mffpi.BackupSetName != nil {
13527		objectMap["backupSetName"] = mffpi.BackupSetName
13528	}
13529	if mffpi.CreateMode != "" {
13530		objectMap["createMode"] = mffpi.CreateMode
13531	}
13532	if mffpi.DeferredDeleteTimeInUTC != nil {
13533		objectMap["deferredDeleteTimeInUTC"] = mffpi.DeferredDeleteTimeInUTC
13534	}
13535	if mffpi.IsScheduledForDeferredDelete != nil {
13536		objectMap["isScheduledForDeferredDelete"] = mffpi.IsScheduledForDeferredDelete
13537	}
13538	if mffpi.DeferredDeleteTimeRemaining != nil {
13539		objectMap["deferredDeleteTimeRemaining"] = mffpi.DeferredDeleteTimeRemaining
13540	}
13541	if mffpi.IsDeferredDeleteScheduleUpcoming != nil {
13542		objectMap["isDeferredDeleteScheduleUpcoming"] = mffpi.IsDeferredDeleteScheduleUpcoming
13543	}
13544	if mffpi.IsRehydrate != nil {
13545		objectMap["isRehydrate"] = mffpi.IsRehydrate
13546	}
13547	if mffpi.ProtectedItemType != "" {
13548		objectMap["protectedItemType"] = mffpi.ProtectedItemType
13549	}
13550	return json.Marshal(objectMap)
13551}
13552
13553// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13554func (mffpi MabFileFolderProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
13555	return nil, false
13556}
13557
13558// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13559func (mffpi MabFileFolderProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
13560	return nil, false
13561}
13562
13563// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13564func (mffpi MabFileFolderProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
13565	return nil, false
13566}
13567
13568// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13569func (mffpi MabFileFolderProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
13570	return nil, false
13571}
13572
13573// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13574func (mffpi MabFileFolderProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
13575	return nil, false
13576}
13577
13578// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13579func (mffpi MabFileFolderProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
13580	return nil, false
13581}
13582
13583// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13584func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
13585	return nil, false
13586}
13587
13588// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13589func (mffpi MabFileFolderProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
13590	return nil, false
13591}
13592
13593// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13594func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
13595	return nil, false
13596}
13597
13598// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13599func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
13600	return nil, false
13601}
13602
13603// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13604func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
13605	return nil, false
13606}
13607
13608// AsDPMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13609func (mffpi MabFileFolderProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
13610	return nil, false
13611}
13612
13613// AsGenericProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13614func (mffpi MabFileFolderProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
13615	return nil, false
13616}
13617
13618// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13619func (mffpi MabFileFolderProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
13620	return &mffpi, true
13621}
13622
13623// AsProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13624func (mffpi MabFileFolderProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
13625	return nil, false
13626}
13627
13628// AsBasicProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
13629func (mffpi MabFileFolderProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
13630	return &mffpi, true
13631}
13632
13633// MabFileFolderProtectedItemExtendedInfo additional information on the backed up item.
13634type MabFileFolderProtectedItemExtendedInfo struct {
13635	// LastRefreshedAt - Last time when the agent data synced to service.
13636	LastRefreshedAt *date.Time `json:"lastRefreshedAt,omitempty"`
13637	// OldestRecoveryPoint - The oldest backup copy available.
13638	OldestRecoveryPoint *date.Time `json:"oldestRecoveryPoint,omitempty"`
13639	// RecoveryPointCount - Number of backup copies associated with the backup item.
13640	RecoveryPointCount *int32 `json:"recoveryPointCount,omitempty"`
13641}
13642
13643// MabJob MAB workload-specific job.
13644type MabJob struct {
13645	// Duration - Time taken by job to run.
13646	Duration *string `json:"duration,omitempty"`
13647	// ActionsInfo - The state/actions applicable on jobs like cancel/retry.
13648	ActionsInfo *[]JobSupportedAction `json:"actionsInfo,omitempty"`
13649	// MabServerName - Name of server protecting the DS.
13650	MabServerName *string `json:"mabServerName,omitempty"`
13651	// MabServerType - Server type of MAB container. Possible values include: 'MabServerTypeInvalid', 'MabServerTypeUnknown', 'MabServerTypeIaasVMContainer', 'MabServerTypeIaasVMServiceContainer', 'MabServerTypeDPMContainer', 'MabServerTypeAzureBackupServerContainer', 'MabServerTypeMABContainer', 'MabServerTypeCluster', 'MabServerTypeAzureSQLContainer', 'MabServerTypeWindows', 'MabServerTypeVCenter', 'MabServerTypeVMAppContainer', 'MabServerTypeSQLAGWorkLoadContainer', 'MabServerTypeStorageContainer', 'MabServerTypeGenericContainer'
13652	MabServerType MabServerType `json:"mabServerType,omitempty"`
13653	// WorkloadType - Workload type of backup item. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
13654	WorkloadType WorkloadType `json:"workloadType,omitempty"`
13655	// ErrorDetails - The errors.
13656	ErrorDetails *[]MabErrorInfo `json:"errorDetails,omitempty"`
13657	// ExtendedInfo - Additional information on the job.
13658	ExtendedInfo *MabJobExtendedInfo `json:"extendedInfo,omitempty"`
13659	// EntityFriendlyName - Friendly name of the entity on which the current job is executing.
13660	EntityFriendlyName *string `json:"entityFriendlyName,omitempty"`
13661	// BackupManagementType - Backup management type to execute the current job. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
13662	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
13663	// Operation - The operation name.
13664	Operation *string `json:"operation,omitempty"`
13665	// Status - Job status.
13666	Status *string `json:"status,omitempty"`
13667	// StartTime - The start time.
13668	StartTime *date.Time `json:"startTime,omitempty"`
13669	// EndTime - The end time.
13670	EndTime *date.Time `json:"endTime,omitempty"`
13671	// ActivityID - ActivityId of job.
13672	ActivityID *string `json:"activityId,omitempty"`
13673	// JobType - Possible values include: 'JobTypeJob', 'JobTypeAzureIaaSVMJob', 'JobTypeAzureStorageJob', 'JobTypeAzureWorkloadJob', 'JobTypeDpmJob', 'JobTypeMabJob'
13674	JobType JobType `json:"jobType,omitempty"`
13675}
13676
13677// MarshalJSON is the custom marshaler for MabJob.
13678func (mj MabJob) MarshalJSON() ([]byte, error) {
13679	mj.JobType = JobTypeMabJob
13680	objectMap := make(map[string]interface{})
13681	if mj.Duration != nil {
13682		objectMap["duration"] = mj.Duration
13683	}
13684	if mj.ActionsInfo != nil {
13685		objectMap["actionsInfo"] = mj.ActionsInfo
13686	}
13687	if mj.MabServerName != nil {
13688		objectMap["mabServerName"] = mj.MabServerName
13689	}
13690	if mj.MabServerType != "" {
13691		objectMap["mabServerType"] = mj.MabServerType
13692	}
13693	if mj.WorkloadType != "" {
13694		objectMap["workloadType"] = mj.WorkloadType
13695	}
13696	if mj.ErrorDetails != nil {
13697		objectMap["errorDetails"] = mj.ErrorDetails
13698	}
13699	if mj.ExtendedInfo != nil {
13700		objectMap["extendedInfo"] = mj.ExtendedInfo
13701	}
13702	if mj.EntityFriendlyName != nil {
13703		objectMap["entityFriendlyName"] = mj.EntityFriendlyName
13704	}
13705	if mj.BackupManagementType != "" {
13706		objectMap["backupManagementType"] = mj.BackupManagementType
13707	}
13708	if mj.Operation != nil {
13709		objectMap["operation"] = mj.Operation
13710	}
13711	if mj.Status != nil {
13712		objectMap["status"] = mj.Status
13713	}
13714	if mj.StartTime != nil {
13715		objectMap["startTime"] = mj.StartTime
13716	}
13717	if mj.EndTime != nil {
13718		objectMap["endTime"] = mj.EndTime
13719	}
13720	if mj.ActivityID != nil {
13721		objectMap["activityId"] = mj.ActivityID
13722	}
13723	if mj.JobType != "" {
13724		objectMap["jobType"] = mj.JobType
13725	}
13726	return json.Marshal(objectMap)
13727}
13728
13729// AsAzureIaaSVMJob is the BasicJob implementation for MabJob.
13730func (mj MabJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
13731	return nil, false
13732}
13733
13734// AsAzureStorageJob is the BasicJob implementation for MabJob.
13735func (mj MabJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
13736	return nil, false
13737}
13738
13739// AsAzureWorkloadJob is the BasicJob implementation for MabJob.
13740func (mj MabJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
13741	return nil, false
13742}
13743
13744// AsDpmJob is the BasicJob implementation for MabJob.
13745func (mj MabJob) AsDpmJob() (*DpmJob, bool) {
13746	return nil, false
13747}
13748
13749// AsMabJob is the BasicJob implementation for MabJob.
13750func (mj MabJob) AsMabJob() (*MabJob, bool) {
13751	return &mj, true
13752}
13753
13754// AsJob is the BasicJob implementation for MabJob.
13755func (mj MabJob) AsJob() (*Job, bool) {
13756	return nil, false
13757}
13758
13759// AsBasicJob is the BasicJob implementation for MabJob.
13760func (mj MabJob) AsBasicJob() (BasicJob, bool) {
13761	return &mj, true
13762}
13763
13764// MabJobExtendedInfo additional information for the MAB workload-specific job.
13765type MabJobExtendedInfo struct {
13766	// TasksList - List of tasks for this job.
13767	TasksList *[]MabJobTaskDetails `json:"tasksList,omitempty"`
13768	// PropertyBag - The job properties.
13769	PropertyBag map[string]*string `json:"propertyBag"`
13770	// DynamicErrorMessage - Non localized error message specific to this job.
13771	DynamicErrorMessage *string `json:"dynamicErrorMessage,omitempty"`
13772}
13773
13774// MarshalJSON is the custom marshaler for MabJobExtendedInfo.
13775func (mjei MabJobExtendedInfo) MarshalJSON() ([]byte, error) {
13776	objectMap := make(map[string]interface{})
13777	if mjei.TasksList != nil {
13778		objectMap["tasksList"] = mjei.TasksList
13779	}
13780	if mjei.PropertyBag != nil {
13781		objectMap["propertyBag"] = mjei.PropertyBag
13782	}
13783	if mjei.DynamicErrorMessage != nil {
13784		objectMap["dynamicErrorMessage"] = mjei.DynamicErrorMessage
13785	}
13786	return json.Marshal(objectMap)
13787}
13788
13789// MabJobTaskDetails MAB workload-specific job task details.
13790type MabJobTaskDetails struct {
13791	// TaskID - The task display name.
13792	TaskID *string `json:"taskId,omitempty"`
13793	// StartTime - The start time.
13794	StartTime *date.Time `json:"startTime,omitempty"`
13795	// EndTime - The end time.
13796	EndTime *date.Time `json:"endTime,omitempty"`
13797	// Duration - Time elapsed for task.
13798	Duration *string `json:"duration,omitempty"`
13799	// Status - The status.
13800	Status *string `json:"status,omitempty"`
13801}
13802
13803// MabProtectionPolicy mab container-specific backup policy.
13804type MabProtectionPolicy struct {
13805	// SchedulePolicy - Backup schedule of backup policy.
13806	SchedulePolicy BasicSchedulePolicy `json:"schedulePolicy,omitempty"`
13807	// RetentionPolicy - Retention policy details.
13808	RetentionPolicy BasicRetentionPolicy `json:"retentionPolicy,omitempty"`
13809	// ProtectedItemsCount - Number of items associated with this policy.
13810	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
13811	// BackupManagementType - Possible values include: 'BackupManagementTypeProtectionPolicy', 'BackupManagementTypeAzureWorkload', 'BackupManagementTypeAzureStorage', 'BackupManagementTypeAzureIaasVM', 'BackupManagementTypeAzureSQL', 'BackupManagementTypeGenericProtectionPolicy', 'BackupManagementTypeMAB'
13812	BackupManagementType ManagementTypeBasicProtectionPolicy `json:"backupManagementType,omitempty"`
13813}
13814
13815// MarshalJSON is the custom marshaler for MabProtectionPolicy.
13816func (mpp MabProtectionPolicy) MarshalJSON() ([]byte, error) {
13817	mpp.BackupManagementType = BackupManagementTypeMAB
13818	objectMap := make(map[string]interface{})
13819	objectMap["schedulePolicy"] = mpp.SchedulePolicy
13820	objectMap["retentionPolicy"] = mpp.RetentionPolicy
13821	if mpp.ProtectedItemsCount != nil {
13822		objectMap["protectedItemsCount"] = mpp.ProtectedItemsCount
13823	}
13824	if mpp.BackupManagementType != "" {
13825		objectMap["backupManagementType"] = mpp.BackupManagementType
13826	}
13827	return json.Marshal(objectMap)
13828}
13829
13830// AsAzureVMWorkloadProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13831func (mpp MabProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
13832	return nil, false
13833}
13834
13835// AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13836func (mpp MabProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
13837	return nil, false
13838}
13839
13840// AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13841func (mpp MabProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
13842	return nil, false
13843}
13844
13845// AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13846func (mpp MabProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
13847	return nil, false
13848}
13849
13850// AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13851func (mpp MabProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
13852	return nil, false
13853}
13854
13855// AsMabProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13856func (mpp MabProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
13857	return &mpp, true
13858}
13859
13860// AsProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13861func (mpp MabProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
13862	return nil, false
13863}
13864
13865// AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
13866func (mpp MabProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
13867	return &mpp, true
13868}
13869
13870// UnmarshalJSON is the custom unmarshaler for MabProtectionPolicy struct.
13871func (mpp *MabProtectionPolicy) UnmarshalJSON(body []byte) error {
13872	var m map[string]*json.RawMessage
13873	err := json.Unmarshal(body, &m)
13874	if err != nil {
13875		return err
13876	}
13877	for k, v := range m {
13878		switch k {
13879		case "schedulePolicy":
13880			if v != nil {
13881				schedulePolicy, err := unmarshalBasicSchedulePolicy(*v)
13882				if err != nil {
13883					return err
13884				}
13885				mpp.SchedulePolicy = schedulePolicy
13886			}
13887		case "retentionPolicy":
13888			if v != nil {
13889				retentionPolicy, err := unmarshalBasicRetentionPolicy(*v)
13890				if err != nil {
13891					return err
13892				}
13893				mpp.RetentionPolicy = retentionPolicy
13894			}
13895		case "protectedItemsCount":
13896			if v != nil {
13897				var protectedItemsCount int32
13898				err = json.Unmarshal(*v, &protectedItemsCount)
13899				if err != nil {
13900					return err
13901				}
13902				mpp.ProtectedItemsCount = &protectedItemsCount
13903			}
13904		case "backupManagementType":
13905			if v != nil {
13906				var backupManagementType ManagementTypeBasicProtectionPolicy
13907				err = json.Unmarshal(*v, &backupManagementType)
13908				if err != nil {
13909					return err
13910				}
13911				mpp.BackupManagementType = backupManagementType
13912			}
13913		}
13914	}
13915
13916	return nil
13917}
13918
13919// ManagementUsage backup management usages of a vault.
13920type ManagementUsage struct {
13921	// Unit - Unit of the usage. Possible values include: 'Count', 'Bytes', 'Seconds', 'Percent', 'CountPerSecond', 'BytesPerSecond'
13922	Unit UsagesUnit `json:"unit,omitempty"`
13923	// QuotaPeriod - Quota period of usage.
13924	QuotaPeriod *string `json:"quotaPeriod,omitempty"`
13925	// NextResetTime - Next reset time of usage.
13926	NextResetTime *date.Time `json:"nextResetTime,omitempty"`
13927	// CurrentValue - Current value of usage.
13928	CurrentValue *int64 `json:"currentValue,omitempty"`
13929	// Limit - Limit of usage.
13930	Limit *int64 `json:"limit,omitempty"`
13931	// Name - Name of usage.
13932	Name *NameInfo `json:"name,omitempty"`
13933}
13934
13935// ManagementUsageList backup management usage for vault.
13936type ManagementUsageList struct {
13937	autorest.Response `json:"-"`
13938	// Value - The list of backup management usages for the given vault.
13939	Value *[]ManagementUsage `json:"value,omitempty"`
13940}
13941
13942// MonthlyRetentionSchedule monthly retention schedule.
13943type MonthlyRetentionSchedule struct {
13944	// RetentionScheduleFormatType - Retention schedule format type for monthly retention policy. Possible values include: 'RetentionScheduleFormatInvalid', 'RetentionScheduleFormatDaily', 'RetentionScheduleFormatWeekly'
13945	RetentionScheduleFormatType RetentionScheduleFormat `json:"retentionScheduleFormatType,omitempty"`
13946	// RetentionScheduleDaily - Daily retention format for monthly retention policy.
13947	RetentionScheduleDaily *DailyRetentionFormat `json:"retentionScheduleDaily,omitempty"`
13948	// RetentionScheduleWeekly - Weekly retention format for monthly retention policy.
13949	RetentionScheduleWeekly *WeeklyRetentionFormat `json:"retentionScheduleWeekly,omitempty"`
13950	// RetentionTimes - Retention times of retention policy.
13951	RetentionTimes *[]date.Time `json:"retentionTimes,omitempty"`
13952	// RetentionDuration - Retention duration of retention Policy.
13953	RetentionDuration *RetentionDuration `json:"retentionDuration,omitempty"`
13954}
13955
13956// NameInfo the name of usage.
13957type NameInfo struct {
13958	// Value - Value of usage.
13959	Value *string `json:"value,omitempty"`
13960	// LocalizedValue - Localized value of usage.
13961	LocalizedValue *string `json:"localizedValue,omitempty"`
13962}
13963
13964// OperationResultInfo operation result info.
13965type OperationResultInfo struct {
13966	// JobList - List of jobs created by this operation.
13967	JobList *[]string `json:"jobList,omitempty"`
13968	// ObjectType - Possible values include: 'ObjectTypeOperationResultInfoBase', 'ObjectTypeExportJobsOperationResultInfo', 'ObjectTypeOperationResultInfo'
13969	ObjectType ObjectTypeBasicOperationResultInfoBase `json:"objectType,omitempty"`
13970}
13971
13972// MarshalJSON is the custom marshaler for OperationResultInfo.
13973func (ori OperationResultInfo) MarshalJSON() ([]byte, error) {
13974	ori.ObjectType = ObjectTypeOperationResultInfo
13975	objectMap := make(map[string]interface{})
13976	if ori.JobList != nil {
13977		objectMap["jobList"] = ori.JobList
13978	}
13979	if ori.ObjectType != "" {
13980		objectMap["objectType"] = ori.ObjectType
13981	}
13982	return json.Marshal(objectMap)
13983}
13984
13985// AsExportJobsOperationResultInfo is the BasicOperationResultInfoBase implementation for OperationResultInfo.
13986func (ori OperationResultInfo) AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool) {
13987	return nil, false
13988}
13989
13990// AsOperationResultInfo is the BasicOperationResultInfoBase implementation for OperationResultInfo.
13991func (ori OperationResultInfo) AsOperationResultInfo() (*OperationResultInfo, bool) {
13992	return &ori, true
13993}
13994
13995// AsOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfo.
13996func (ori OperationResultInfo) AsOperationResultInfoBase() (*OperationResultInfoBase, bool) {
13997	return nil, false
13998}
13999
14000// AsBasicOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfo.
14001func (ori OperationResultInfo) AsBasicOperationResultInfoBase() (BasicOperationResultInfoBase, bool) {
14002	return &ori, true
14003}
14004
14005// BasicOperationResultInfoBase base class for operation result info.
14006type BasicOperationResultInfoBase interface {
14007	AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool)
14008	AsOperationResultInfo() (*OperationResultInfo, bool)
14009	AsOperationResultInfoBase() (*OperationResultInfoBase, bool)
14010}
14011
14012// OperationResultInfoBase base class for operation result info.
14013type OperationResultInfoBase struct {
14014	// ObjectType - Possible values include: 'ObjectTypeOperationResultInfoBase', 'ObjectTypeExportJobsOperationResultInfo', 'ObjectTypeOperationResultInfo'
14015	ObjectType ObjectTypeBasicOperationResultInfoBase `json:"objectType,omitempty"`
14016}
14017
14018func unmarshalBasicOperationResultInfoBase(body []byte) (BasicOperationResultInfoBase, error) {
14019	var m map[string]interface{}
14020	err := json.Unmarshal(body, &m)
14021	if err != nil {
14022		return nil, err
14023	}
14024
14025	switch m["objectType"] {
14026	case string(ObjectTypeExportJobsOperationResultInfo):
14027		var ejori ExportJobsOperationResultInfo
14028		err := json.Unmarshal(body, &ejori)
14029		return ejori, err
14030	case string(ObjectTypeOperationResultInfo):
14031		var ori OperationResultInfo
14032		err := json.Unmarshal(body, &ori)
14033		return ori, err
14034	default:
14035		var orib OperationResultInfoBase
14036		err := json.Unmarshal(body, &orib)
14037		return orib, err
14038	}
14039}
14040func unmarshalBasicOperationResultInfoBaseArray(body []byte) ([]BasicOperationResultInfoBase, error) {
14041	var rawMessages []*json.RawMessage
14042	err := json.Unmarshal(body, &rawMessages)
14043	if err != nil {
14044		return nil, err
14045	}
14046
14047	oribArray := make([]BasicOperationResultInfoBase, len(rawMessages))
14048
14049	for index, rawMessage := range rawMessages {
14050		orib, err := unmarshalBasicOperationResultInfoBase(*rawMessage)
14051		if err != nil {
14052			return nil, err
14053		}
14054		oribArray[index] = orib
14055	}
14056	return oribArray, nil
14057}
14058
14059// MarshalJSON is the custom marshaler for OperationResultInfoBase.
14060func (orib OperationResultInfoBase) MarshalJSON() ([]byte, error) {
14061	orib.ObjectType = ObjectTypeOperationResultInfoBase
14062	objectMap := make(map[string]interface{})
14063	if orib.ObjectType != "" {
14064		objectMap["objectType"] = orib.ObjectType
14065	}
14066	return json.Marshal(objectMap)
14067}
14068
14069// AsExportJobsOperationResultInfo is the BasicOperationResultInfoBase implementation for OperationResultInfoBase.
14070func (orib OperationResultInfoBase) AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool) {
14071	return nil, false
14072}
14073
14074// AsOperationResultInfo is the BasicOperationResultInfoBase implementation for OperationResultInfoBase.
14075func (orib OperationResultInfoBase) AsOperationResultInfo() (*OperationResultInfo, bool) {
14076	return nil, false
14077}
14078
14079// AsOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfoBase.
14080func (orib OperationResultInfoBase) AsOperationResultInfoBase() (*OperationResultInfoBase, bool) {
14081	return &orib, true
14082}
14083
14084// AsBasicOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfoBase.
14085func (orib OperationResultInfoBase) AsBasicOperationResultInfoBase() (BasicOperationResultInfoBase, bool) {
14086	return &orib, true
14087}
14088
14089// OperationResultInfoBaseResource base class for operation result info.
14090type OperationResultInfoBaseResource struct {
14091	autorest.Response `json:"-"`
14092	// Operation - OperationResultInfoBaseResource operation
14093	Operation BasicOperationResultInfoBase `json:"operation,omitempty"`
14094	// StatusCode - HTTP Status Code of the operation. Possible values include: 'Continue', 'SwitchingProtocols', 'OK', 'Created', 'Accepted', 'NonAuthoritativeInformation', 'NoContent', 'ResetContent', 'PartialContent', 'MultipleChoices', 'Ambiguous', 'MovedPermanently', 'Moved', 'Found', 'Redirect', 'SeeOther', 'RedirectMethod', 'NotModified', 'UseProxy', 'Unused', 'TemporaryRedirect', 'RedirectKeepVerb', 'BadRequest', 'Unauthorized', 'PaymentRequired', 'Forbidden', 'NotFound', 'MethodNotAllowed', 'NotAcceptable', 'ProxyAuthenticationRequired', 'RequestTimeout', 'Conflict', 'Gone', 'LengthRequired', 'PreconditionFailed', 'RequestEntityTooLarge', 'RequestURITooLong', 'UnsupportedMediaType', 'RequestedRangeNotSatisfiable', 'ExpectationFailed', 'UpgradeRequired', 'InternalServerError', 'NotImplemented', 'BadGateway', 'ServiceUnavailable', 'GatewayTimeout', 'HTTPVersionNotSupported'
14095	StatusCode HTTPStatusCode `json:"statusCode,omitempty"`
14096	// Headers - HTTP headers associated with this operation.
14097	Headers map[string][]string `json:"headers"`
14098}
14099
14100// MarshalJSON is the custom marshaler for OperationResultInfoBaseResource.
14101func (oribr OperationResultInfoBaseResource) MarshalJSON() ([]byte, error) {
14102	objectMap := make(map[string]interface{})
14103	objectMap["operation"] = oribr.Operation
14104	if oribr.StatusCode != "" {
14105		objectMap["statusCode"] = oribr.StatusCode
14106	}
14107	if oribr.Headers != nil {
14108		objectMap["headers"] = oribr.Headers
14109	}
14110	return json.Marshal(objectMap)
14111}
14112
14113// UnmarshalJSON is the custom unmarshaler for OperationResultInfoBaseResource struct.
14114func (oribr *OperationResultInfoBaseResource) UnmarshalJSON(body []byte) error {
14115	var m map[string]*json.RawMessage
14116	err := json.Unmarshal(body, &m)
14117	if err != nil {
14118		return err
14119	}
14120	for k, v := range m {
14121		switch k {
14122		case "operation":
14123			if v != nil {
14124				operation, err := unmarshalBasicOperationResultInfoBase(*v)
14125				if err != nil {
14126					return err
14127				}
14128				oribr.Operation = operation
14129			}
14130		case "statusCode":
14131			if v != nil {
14132				var statusCode HTTPStatusCode
14133				err = json.Unmarshal(*v, &statusCode)
14134				if err != nil {
14135					return err
14136				}
14137				oribr.StatusCode = statusCode
14138			}
14139		case "headers":
14140			if v != nil {
14141				var headers map[string][]string
14142				err = json.Unmarshal(*v, &headers)
14143				if err != nil {
14144					return err
14145				}
14146				oribr.Headers = headers
14147			}
14148		}
14149	}
14150
14151	return nil
14152}
14153
14154// OperationStatus operation status.
14155type OperationStatus struct {
14156	autorest.Response `json:"-"`
14157	// ID - ID of the operation.
14158	ID *string `json:"id,omitempty"`
14159	// Name - Name of the operation.
14160	Name *string `json:"name,omitempty"`
14161	// Status - Operation status. Possible values include: 'OperationStatusValuesInvalid', 'OperationStatusValuesInProgress', 'OperationStatusValuesSucceeded', 'OperationStatusValuesFailed', 'OperationStatusValuesCanceled'
14162	Status OperationStatusValues `json:"status,omitempty"`
14163	// StartTime - Operation start time. Format: ISO-8601.
14164	StartTime *date.Time `json:"startTime,omitempty"`
14165	// EndTime - Operation end time. Format: ISO-8601.
14166	EndTime *date.Time `json:"endTime,omitempty"`
14167	// Error - Error information related to this operation.
14168	Error *OperationStatusError `json:"error,omitempty"`
14169	// Properties - Additional information associated with this operation.
14170	Properties BasicOperationStatusExtendedInfo `json:"properties,omitempty"`
14171}
14172
14173// UnmarshalJSON is the custom unmarshaler for OperationStatus struct.
14174func (osVar *OperationStatus) UnmarshalJSON(body []byte) error {
14175	var m map[string]*json.RawMessage
14176	err := json.Unmarshal(body, &m)
14177	if err != nil {
14178		return err
14179	}
14180	for k, v := range m {
14181		switch k {
14182		case "id":
14183			if v != nil {
14184				var ID string
14185				err = json.Unmarshal(*v, &ID)
14186				if err != nil {
14187					return err
14188				}
14189				osVar.ID = &ID
14190			}
14191		case "name":
14192			if v != nil {
14193				var name string
14194				err = json.Unmarshal(*v, &name)
14195				if err != nil {
14196					return err
14197				}
14198				osVar.Name = &name
14199			}
14200		case "status":
14201			if v != nil {
14202				var status OperationStatusValues
14203				err = json.Unmarshal(*v, &status)
14204				if err != nil {
14205					return err
14206				}
14207				osVar.Status = status
14208			}
14209		case "startTime":
14210			if v != nil {
14211				var startTime date.Time
14212				err = json.Unmarshal(*v, &startTime)
14213				if err != nil {
14214					return err
14215				}
14216				osVar.StartTime = &startTime
14217			}
14218		case "endTime":
14219			if v != nil {
14220				var endTime date.Time
14221				err = json.Unmarshal(*v, &endTime)
14222				if err != nil {
14223					return err
14224				}
14225				osVar.EndTime = &endTime
14226			}
14227		case "error":
14228			if v != nil {
14229				var errorVar OperationStatusError
14230				err = json.Unmarshal(*v, &errorVar)
14231				if err != nil {
14232					return err
14233				}
14234				osVar.Error = &errorVar
14235			}
14236		case "properties":
14237			if v != nil {
14238				properties, err := unmarshalBasicOperationStatusExtendedInfo(*v)
14239				if err != nil {
14240					return err
14241				}
14242				osVar.Properties = properties
14243			}
14244		}
14245	}
14246
14247	return nil
14248}
14249
14250// OperationStatusError error information associated with operation status call.
14251type OperationStatusError struct {
14252	// Code - Error code of the operation failure.
14253	Code *string `json:"code,omitempty"`
14254	// Message - Error message displayed if the operation failure.
14255	Message *string `json:"message,omitempty"`
14256}
14257
14258// BasicOperationStatusExtendedInfo base class for additional information of operation status.
14259type BasicOperationStatusExtendedInfo interface {
14260	AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool)
14261	AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool)
14262	AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool)
14263	AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool)
14264}
14265
14266// OperationStatusExtendedInfo base class for additional information of operation status.
14267type OperationStatusExtendedInfo struct {
14268	// ObjectType - Possible values include: 'ObjectTypeOperationStatusExtendedInfo', 'ObjectTypeOperationStatusJobExtendedInfo', 'ObjectTypeOperationStatusJobsExtendedInfo', 'ObjectTypeOperationStatusProvisionILRExtendedInfo'
14269	ObjectType ObjectType `json:"objectType,omitempty"`
14270}
14271
14272func unmarshalBasicOperationStatusExtendedInfo(body []byte) (BasicOperationStatusExtendedInfo, error) {
14273	var m map[string]interface{}
14274	err := json.Unmarshal(body, &m)
14275	if err != nil {
14276		return nil, err
14277	}
14278
14279	switch m["objectType"] {
14280	case string(ObjectTypeOperationStatusJobExtendedInfo):
14281		var osjei OperationStatusJobExtendedInfo
14282		err := json.Unmarshal(body, &osjei)
14283		return osjei, err
14284	case string(ObjectTypeOperationStatusJobsExtendedInfo):
14285		var osjei OperationStatusJobsExtendedInfo
14286		err := json.Unmarshal(body, &osjei)
14287		return osjei, err
14288	case string(ObjectTypeOperationStatusProvisionILRExtendedInfo):
14289		var ospiei OperationStatusProvisionILRExtendedInfo
14290		err := json.Unmarshal(body, &ospiei)
14291		return ospiei, err
14292	default:
14293		var osei OperationStatusExtendedInfo
14294		err := json.Unmarshal(body, &osei)
14295		return osei, err
14296	}
14297}
14298func unmarshalBasicOperationStatusExtendedInfoArray(body []byte) ([]BasicOperationStatusExtendedInfo, error) {
14299	var rawMessages []*json.RawMessage
14300	err := json.Unmarshal(body, &rawMessages)
14301	if err != nil {
14302		return nil, err
14303	}
14304
14305	oseiArray := make([]BasicOperationStatusExtendedInfo, len(rawMessages))
14306
14307	for index, rawMessage := range rawMessages {
14308		osei, err := unmarshalBasicOperationStatusExtendedInfo(*rawMessage)
14309		if err != nil {
14310			return nil, err
14311		}
14312		oseiArray[index] = osei
14313	}
14314	return oseiArray, nil
14315}
14316
14317// MarshalJSON is the custom marshaler for OperationStatusExtendedInfo.
14318func (osei OperationStatusExtendedInfo) MarshalJSON() ([]byte, error) {
14319	osei.ObjectType = ObjectTypeOperationStatusExtendedInfo
14320	objectMap := make(map[string]interface{})
14321	if osei.ObjectType != "" {
14322		objectMap["objectType"] = osei.ObjectType
14323	}
14324	return json.Marshal(objectMap)
14325}
14326
14327// AsOperationStatusJobExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
14328func (osei OperationStatusExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
14329	return nil, false
14330}
14331
14332// AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
14333func (osei OperationStatusExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
14334	return nil, false
14335}
14336
14337// AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
14338func (osei OperationStatusExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
14339	return nil, false
14340}
14341
14342// AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
14343func (osei OperationStatusExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
14344	return &osei, true
14345}
14346
14347// AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
14348func (osei OperationStatusExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
14349	return &osei, true
14350}
14351
14352// OperationStatusJobExtendedInfo operation status job extended info.
14353type OperationStatusJobExtendedInfo struct {
14354	// JobID - ID of the job created for this protected item.
14355	JobID *string `json:"jobId,omitempty"`
14356	// ObjectType - Possible values include: 'ObjectTypeOperationStatusExtendedInfo', 'ObjectTypeOperationStatusJobExtendedInfo', 'ObjectTypeOperationStatusJobsExtendedInfo', 'ObjectTypeOperationStatusProvisionILRExtendedInfo'
14357	ObjectType ObjectType `json:"objectType,omitempty"`
14358}
14359
14360// MarshalJSON is the custom marshaler for OperationStatusJobExtendedInfo.
14361func (osjei OperationStatusJobExtendedInfo) MarshalJSON() ([]byte, error) {
14362	osjei.ObjectType = ObjectTypeOperationStatusJobExtendedInfo
14363	objectMap := make(map[string]interface{})
14364	if osjei.JobID != nil {
14365		objectMap["jobId"] = osjei.JobID
14366	}
14367	if osjei.ObjectType != "" {
14368		objectMap["objectType"] = osjei.ObjectType
14369	}
14370	return json.Marshal(objectMap)
14371}
14372
14373// AsOperationStatusJobExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
14374func (osjei OperationStatusJobExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
14375	return &osjei, true
14376}
14377
14378// AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
14379func (osjei OperationStatusJobExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
14380	return nil, false
14381}
14382
14383// AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
14384func (osjei OperationStatusJobExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
14385	return nil, false
14386}
14387
14388// AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
14389func (osjei OperationStatusJobExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
14390	return nil, false
14391}
14392
14393// AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
14394func (osjei OperationStatusJobExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
14395	return &osjei, true
14396}
14397
14398// OperationStatusJobsExtendedInfo operation status extended info for list of jobs.
14399type OperationStatusJobsExtendedInfo struct {
14400	// JobIds - IDs of the jobs created for the protected item.
14401	JobIds *[]string `json:"jobIds,omitempty"`
14402	// FailedJobsError - Stores all the failed jobs along with the corresponding error codes.
14403	FailedJobsError map[string]*string `json:"failedJobsError"`
14404	// ObjectType - Possible values include: 'ObjectTypeOperationStatusExtendedInfo', 'ObjectTypeOperationStatusJobExtendedInfo', 'ObjectTypeOperationStatusJobsExtendedInfo', 'ObjectTypeOperationStatusProvisionILRExtendedInfo'
14405	ObjectType ObjectType `json:"objectType,omitempty"`
14406}
14407
14408// MarshalJSON is the custom marshaler for OperationStatusJobsExtendedInfo.
14409func (osjei OperationStatusJobsExtendedInfo) MarshalJSON() ([]byte, error) {
14410	osjei.ObjectType = ObjectTypeOperationStatusJobsExtendedInfo
14411	objectMap := make(map[string]interface{})
14412	if osjei.JobIds != nil {
14413		objectMap["jobIds"] = osjei.JobIds
14414	}
14415	if osjei.FailedJobsError != nil {
14416		objectMap["failedJobsError"] = osjei.FailedJobsError
14417	}
14418	if osjei.ObjectType != "" {
14419		objectMap["objectType"] = osjei.ObjectType
14420	}
14421	return json.Marshal(objectMap)
14422}
14423
14424// AsOperationStatusJobExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
14425func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
14426	return nil, false
14427}
14428
14429// AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
14430func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
14431	return &osjei, true
14432}
14433
14434// AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
14435func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
14436	return nil, false
14437}
14438
14439// AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
14440func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
14441	return nil, false
14442}
14443
14444// AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
14445func (osjei OperationStatusJobsExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
14446	return &osjei, true
14447}
14448
14449// OperationStatusProvisionILRExtendedInfo operation status extended info for ILR provision action.
14450type OperationStatusProvisionILRExtendedInfo struct {
14451	// RecoveryTarget - Target details for file / folder restore.
14452	RecoveryTarget *InstantItemRecoveryTarget `json:"recoveryTarget,omitempty"`
14453	// ObjectType - Possible values include: 'ObjectTypeOperationStatusExtendedInfo', 'ObjectTypeOperationStatusJobExtendedInfo', 'ObjectTypeOperationStatusJobsExtendedInfo', 'ObjectTypeOperationStatusProvisionILRExtendedInfo'
14454	ObjectType ObjectType `json:"objectType,omitempty"`
14455}
14456
14457// MarshalJSON is the custom marshaler for OperationStatusProvisionILRExtendedInfo.
14458func (ospiei OperationStatusProvisionILRExtendedInfo) MarshalJSON() ([]byte, error) {
14459	ospiei.ObjectType = ObjectTypeOperationStatusProvisionILRExtendedInfo
14460	objectMap := make(map[string]interface{})
14461	if ospiei.RecoveryTarget != nil {
14462		objectMap["recoveryTarget"] = ospiei.RecoveryTarget
14463	}
14464	if ospiei.ObjectType != "" {
14465		objectMap["objectType"] = ospiei.ObjectType
14466	}
14467	return json.Marshal(objectMap)
14468}
14469
14470// AsOperationStatusJobExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
14471func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
14472	return nil, false
14473}
14474
14475// AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
14476func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
14477	return nil, false
14478}
14479
14480// AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
14481func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
14482	return &ospiei, true
14483}
14484
14485// AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
14486func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
14487	return nil, false
14488}
14489
14490// AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
14491func (ospiei OperationStatusProvisionILRExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
14492	return &ospiei, true
14493}
14494
14495// OperationWorkerResponse this is the base class for operation result responses.
14496type OperationWorkerResponse struct {
14497	// StatusCode - HTTP Status Code of the operation. Possible values include: 'Continue', 'SwitchingProtocols', 'OK', 'Created', 'Accepted', 'NonAuthoritativeInformation', 'NoContent', 'ResetContent', 'PartialContent', 'MultipleChoices', 'Ambiguous', 'MovedPermanently', 'Moved', 'Found', 'Redirect', 'SeeOther', 'RedirectMethod', 'NotModified', 'UseProxy', 'Unused', 'TemporaryRedirect', 'RedirectKeepVerb', 'BadRequest', 'Unauthorized', 'PaymentRequired', 'Forbidden', 'NotFound', 'MethodNotAllowed', 'NotAcceptable', 'ProxyAuthenticationRequired', 'RequestTimeout', 'Conflict', 'Gone', 'LengthRequired', 'PreconditionFailed', 'RequestEntityTooLarge', 'RequestURITooLong', 'UnsupportedMediaType', 'RequestedRangeNotSatisfiable', 'ExpectationFailed', 'UpgradeRequired', 'InternalServerError', 'NotImplemented', 'BadGateway', 'ServiceUnavailable', 'GatewayTimeout', 'HTTPVersionNotSupported'
14498	StatusCode HTTPStatusCode `json:"statusCode,omitempty"`
14499	// Headers - HTTP headers associated with this operation.
14500	Headers map[string][]string `json:"headers"`
14501}
14502
14503// MarshalJSON is the custom marshaler for OperationWorkerResponse.
14504func (owr OperationWorkerResponse) MarshalJSON() ([]byte, error) {
14505	objectMap := make(map[string]interface{})
14506	if owr.StatusCode != "" {
14507		objectMap["statusCode"] = owr.StatusCode
14508	}
14509	if owr.Headers != nil {
14510		objectMap["headers"] = owr.Headers
14511	}
14512	return json.Marshal(objectMap)
14513}
14514
14515// PointInTimeRange provides details for log ranges
14516type PointInTimeRange struct {
14517	// StartTime - Start time of the time range for log recovery.
14518	StartTime *date.Time `json:"startTime,omitempty"`
14519	// EndTime - End time of the time range for log recovery.
14520	EndTime *date.Time `json:"endTime,omitempty"`
14521}
14522
14523// PreBackupValidation pre-backup validation for Azure VM Workload provider.
14524type PreBackupValidation struct {
14525	// Status - Status of protectable item, i.e. InProgress,Succeeded,Failed. Possible values include: 'InquiryStatusInvalid', 'InquiryStatusSuccess', 'InquiryStatusFailed'
14526	Status InquiryStatus `json:"status,omitempty"`
14527	// Code - Error code of protectable item
14528	Code *string `json:"code,omitempty"`
14529	// Message - Message corresponding to the error code for the protectable item
14530	Message *string `json:"message,omitempty"`
14531}
14532
14533// PreValidateEnableBackupRequest contract to validate if backup can be enabled on the given resource in a
14534// given vault and given configuration.
14535// It will validate followings
14536// 1. Vault capacity
14537// 2. VM is already protected
14538// 3. Any VM related configuration passed in properties.
14539type PreValidateEnableBackupRequest struct {
14540	// ResourceType - ProtectedItem Type- VM, SqlDataBase, AzureFileShare etc. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
14541	ResourceType DataSourceType `json:"resourceType,omitempty"`
14542	// ResourceID - ARM Virtual Machine Id
14543	ResourceID *string `json:"resourceId,omitempty"`
14544	// VaultID - ARM id of the Recovery Services Vault
14545	VaultID *string `json:"vaultId,omitempty"`
14546	// Properties - Configuration of VM if any needs to be validated like OS type etc
14547	Properties *string `json:"properties,omitempty"`
14548}
14549
14550// PreValidateEnableBackupResponse response contract for enable backup validation request
14551type PreValidateEnableBackupResponse struct {
14552	autorest.Response `json:"-"`
14553	// Status - Validation Status. Possible values include: 'ValidationStatusInvalid', 'ValidationStatusSucceeded', 'ValidationStatusFailed'
14554	Status ValidationStatus `json:"status,omitempty"`
14555	// ErrorCode - Response error code
14556	ErrorCode *string `json:"errorCode,omitempty"`
14557	// ErrorMessage - Response error message
14558	ErrorMessage *string `json:"errorMessage,omitempty"`
14559	// Recommendation - Recommended action for user
14560	Recommendation *string `json:"recommendation,omitempty"`
14561	// ContainerName - Specifies the product specific container name. E.g. iaasvmcontainer;iaasvmcontainer;rgname;vmname. This is required
14562	// for portal
14563	ContainerName *string `json:"containerName,omitempty"`
14564	// ProtectedItemName - Specifies the product specific ds name. E.g. vm;iaasvmcontainer;rgname;vmname. This is required for portal
14565	ProtectedItemName *string `json:"protectedItemName,omitempty"`
14566}
14567
14568// PrivateEndpoint the Private Endpoint network resource that is linked to the Private Endpoint connection
14569type PrivateEndpoint struct {
14570	// ID - Gets or sets id
14571	ID *string `json:"id,omitempty"`
14572}
14573
14574// PrivateEndpointConnection private Endpoint Connection Response Properties
14575type PrivateEndpointConnection struct {
14576	// ProvisioningState - Gets or sets provisioning state of the private endpoint connection. Possible values include: 'ProvisioningStateSucceeded', 'ProvisioningStateDeleting', 'ProvisioningStateFailed', 'ProvisioningStatePending'
14577	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
14578	// PrivateEndpoint - Gets or sets private endpoint associated with the private endpoint connection
14579	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
14580	// PrivateLinkServiceConnectionState - Gets or sets private link service connection state
14581	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
14582}
14583
14584// PrivateEndpointConnectionDeleteFuture an abstraction for monitoring and retrieving the results of a
14585// long-running operation.
14586type PrivateEndpointConnectionDeleteFuture struct {
14587	azure.FutureAPI
14588	// Result returns the result of the asynchronous operation.
14589	// If the operation has not completed it will return an error.
14590	Result func(PrivateEndpointConnectionClient) (autorest.Response, error)
14591}
14592
14593// UnmarshalJSON is the custom unmarshaller for CreateFuture.
14594func (future *PrivateEndpointConnectionDeleteFuture) UnmarshalJSON(body []byte) error {
14595	var azFuture azure.Future
14596	if err := json.Unmarshal(body, &azFuture); err != nil {
14597		return err
14598	}
14599	future.FutureAPI = &azFuture
14600	future.Result = future.result
14601	return nil
14602}
14603
14604// result is the default implementation for PrivateEndpointConnectionDeleteFuture.Result.
14605func (future *PrivateEndpointConnectionDeleteFuture) result(client PrivateEndpointConnectionClient) (ar autorest.Response, err error) {
14606	var done bool
14607	done, err = future.DoneWithContext(context.Background(), client)
14608	if err != nil {
14609		err = autorest.NewErrorWithError(err, "backup.PrivateEndpointConnectionDeleteFuture", "Result", future.Response(), "Polling failure")
14610		return
14611	}
14612	if !done {
14613		ar.Response = future.Response()
14614		err = azure.NewAsyncOpIncompleteError("backup.PrivateEndpointConnectionDeleteFuture")
14615		return
14616	}
14617	ar.Response = future.Response()
14618	return
14619}
14620
14621// PrivateEndpointConnectionPutFuture an abstraction for monitoring and retrieving the results of a
14622// long-running operation.
14623type PrivateEndpointConnectionPutFuture struct {
14624	azure.FutureAPI
14625	// Result returns the result of the asynchronous operation.
14626	// If the operation has not completed it will return an error.
14627	Result func(PrivateEndpointConnectionClient) (PrivateEndpointConnectionResource, error)
14628}
14629
14630// UnmarshalJSON is the custom unmarshaller for CreateFuture.
14631func (future *PrivateEndpointConnectionPutFuture) UnmarshalJSON(body []byte) error {
14632	var azFuture azure.Future
14633	if err := json.Unmarshal(body, &azFuture); err != nil {
14634		return err
14635	}
14636	future.FutureAPI = &azFuture
14637	future.Result = future.result
14638	return nil
14639}
14640
14641// result is the default implementation for PrivateEndpointConnectionPutFuture.Result.
14642func (future *PrivateEndpointConnectionPutFuture) result(client PrivateEndpointConnectionClient) (pecr PrivateEndpointConnectionResource, err error) {
14643	var done bool
14644	done, err = future.DoneWithContext(context.Background(), client)
14645	if err != nil {
14646		err = autorest.NewErrorWithError(err, "backup.PrivateEndpointConnectionPutFuture", "Result", future.Response(), "Polling failure")
14647		return
14648	}
14649	if !done {
14650		pecr.Response.Response = future.Response()
14651		err = azure.NewAsyncOpIncompleteError("backup.PrivateEndpointConnectionPutFuture")
14652		return
14653	}
14654	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14655	if pecr.Response.Response, err = future.GetResult(sender); err == nil && pecr.Response.Response.StatusCode != http.StatusNoContent {
14656		pecr, err = client.PutResponder(pecr.Response.Response)
14657		if err != nil {
14658			err = autorest.NewErrorWithError(err, "backup.PrivateEndpointConnectionPutFuture", "Result", pecr.Response.Response, "Failure responding to request")
14659		}
14660	}
14661	return
14662}
14663
14664// PrivateEndpointConnectionResource private Endpoint Connection Response Properties
14665type PrivateEndpointConnectionResource struct {
14666	autorest.Response `json:"-"`
14667	// Properties - PrivateEndpointConnectionResource properties
14668	Properties *PrivateEndpointConnection `json:"properties,omitempty"`
14669	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
14670	ID *string `json:"id,omitempty"`
14671	// Name - READ-ONLY; Resource name associated with the resource.
14672	Name *string `json:"name,omitempty"`
14673	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
14674	Type *string `json:"type,omitempty"`
14675	// Location - Resource location.
14676	Location *string `json:"location,omitempty"`
14677	// Tags - Resource tags.
14678	Tags map[string]*string `json:"tags"`
14679	// ETag - Optional ETag.
14680	ETag *string `json:"eTag,omitempty"`
14681}
14682
14683// MarshalJSON is the custom marshaler for PrivateEndpointConnectionResource.
14684func (pecr PrivateEndpointConnectionResource) MarshalJSON() ([]byte, error) {
14685	objectMap := make(map[string]interface{})
14686	if pecr.Properties != nil {
14687		objectMap["properties"] = pecr.Properties
14688	}
14689	if pecr.Location != nil {
14690		objectMap["location"] = pecr.Location
14691	}
14692	if pecr.Tags != nil {
14693		objectMap["tags"] = pecr.Tags
14694	}
14695	if pecr.ETag != nil {
14696		objectMap["eTag"] = pecr.ETag
14697	}
14698	return json.Marshal(objectMap)
14699}
14700
14701// PrivateLinkServiceConnectionState private Link Service Connection State
14702type PrivateLinkServiceConnectionState struct {
14703	// Status - Gets or sets the status. Possible values include: 'Pending', 'Approved', 'Rejected', 'Disconnected'
14704	Status PrivateEndpointConnectionStatus `json:"status,omitempty"`
14705	// Description - Gets or sets description
14706	Description *string `json:"description,omitempty"`
14707	// ActionRequired - Gets or sets actions required
14708	ActionRequired *string `json:"actionRequired,omitempty"`
14709}
14710
14711// BasicProtectableContainer protectable Container Class.
14712type BasicProtectableContainer interface {
14713	AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool)
14714	AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool)
14715	AsProtectableContainer() (*ProtectableContainer, bool)
14716}
14717
14718// ProtectableContainer protectable Container Class.
14719type ProtectableContainer struct {
14720	// FriendlyName - Friendly name of the container.
14721	FriendlyName *string `json:"friendlyName,omitempty"`
14722	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
14723	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
14724	// HealthStatus - Status of health of the container.
14725	HealthStatus *string `json:"healthStatus,omitempty"`
14726	// ContainerID - Fabric Id of the container such as ARM Id.
14727	ContainerID *string `json:"containerId,omitempty"`
14728	// ProtectableContainerType - Possible values include: 'ProtectableContainerTypeProtectableContainer', 'ProtectableContainerTypeStorageContainer', 'ProtectableContainerTypeVMAppContainer'
14729	ProtectableContainerType ProtectableContainerType `json:"protectableContainerType,omitempty"`
14730}
14731
14732func unmarshalBasicProtectableContainer(body []byte) (BasicProtectableContainer, error) {
14733	var m map[string]interface{}
14734	err := json.Unmarshal(body, &m)
14735	if err != nil {
14736		return nil, err
14737	}
14738
14739	switch m["protectableContainerType"] {
14740	case string(ProtectableContainerTypeStorageContainer):
14741		var aspc AzureStorageProtectableContainer
14742		err := json.Unmarshal(body, &aspc)
14743		return aspc, err
14744	case string(ProtectableContainerTypeVMAppContainer):
14745		var avacpc AzureVMAppContainerProtectableContainer
14746		err := json.Unmarshal(body, &avacpc)
14747		return avacpc, err
14748	default:
14749		var pc ProtectableContainer
14750		err := json.Unmarshal(body, &pc)
14751		return pc, err
14752	}
14753}
14754func unmarshalBasicProtectableContainerArray(body []byte) ([]BasicProtectableContainer, error) {
14755	var rawMessages []*json.RawMessage
14756	err := json.Unmarshal(body, &rawMessages)
14757	if err != nil {
14758		return nil, err
14759	}
14760
14761	pcArray := make([]BasicProtectableContainer, len(rawMessages))
14762
14763	for index, rawMessage := range rawMessages {
14764		pc, err := unmarshalBasicProtectableContainer(*rawMessage)
14765		if err != nil {
14766			return nil, err
14767		}
14768		pcArray[index] = pc
14769	}
14770	return pcArray, nil
14771}
14772
14773// MarshalJSON is the custom marshaler for ProtectableContainer.
14774func (pc ProtectableContainer) MarshalJSON() ([]byte, error) {
14775	pc.ProtectableContainerType = ProtectableContainerTypeProtectableContainer
14776	objectMap := make(map[string]interface{})
14777	if pc.FriendlyName != nil {
14778		objectMap["friendlyName"] = pc.FriendlyName
14779	}
14780	if pc.BackupManagementType != "" {
14781		objectMap["backupManagementType"] = pc.BackupManagementType
14782	}
14783	if pc.HealthStatus != nil {
14784		objectMap["healthStatus"] = pc.HealthStatus
14785	}
14786	if pc.ContainerID != nil {
14787		objectMap["containerId"] = pc.ContainerID
14788	}
14789	if pc.ProtectableContainerType != "" {
14790		objectMap["protectableContainerType"] = pc.ProtectableContainerType
14791	}
14792	return json.Marshal(objectMap)
14793}
14794
14795// AsAzureStorageProtectableContainer is the BasicProtectableContainer implementation for ProtectableContainer.
14796func (pc ProtectableContainer) AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool) {
14797	return nil, false
14798}
14799
14800// AsAzureVMAppContainerProtectableContainer is the BasicProtectableContainer implementation for ProtectableContainer.
14801func (pc ProtectableContainer) AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool) {
14802	return nil, false
14803}
14804
14805// AsProtectableContainer is the BasicProtectableContainer implementation for ProtectableContainer.
14806func (pc ProtectableContainer) AsProtectableContainer() (*ProtectableContainer, bool) {
14807	return &pc, true
14808}
14809
14810// AsBasicProtectableContainer is the BasicProtectableContainer implementation for ProtectableContainer.
14811func (pc ProtectableContainer) AsBasicProtectableContainer() (BasicProtectableContainer, bool) {
14812	return &pc, true
14813}
14814
14815// ProtectableContainerResource protectable Container Class.
14816type ProtectableContainerResource struct {
14817	// Properties - ProtectableContainerResource properties
14818	Properties BasicProtectableContainer `json:"properties,omitempty"`
14819	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
14820	ID *string `json:"id,omitempty"`
14821	// Name - READ-ONLY; Resource name associated with the resource.
14822	Name *string `json:"name,omitempty"`
14823	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
14824	Type *string `json:"type,omitempty"`
14825	// Location - Resource location.
14826	Location *string `json:"location,omitempty"`
14827	// Tags - Resource tags.
14828	Tags map[string]*string `json:"tags"`
14829	// ETag - Optional ETag.
14830	ETag *string `json:"eTag,omitempty"`
14831}
14832
14833// MarshalJSON is the custom marshaler for ProtectableContainerResource.
14834func (pcr ProtectableContainerResource) MarshalJSON() ([]byte, error) {
14835	objectMap := make(map[string]interface{})
14836	objectMap["properties"] = pcr.Properties
14837	if pcr.Location != nil {
14838		objectMap["location"] = pcr.Location
14839	}
14840	if pcr.Tags != nil {
14841		objectMap["tags"] = pcr.Tags
14842	}
14843	if pcr.ETag != nil {
14844		objectMap["eTag"] = pcr.ETag
14845	}
14846	return json.Marshal(objectMap)
14847}
14848
14849// UnmarshalJSON is the custom unmarshaler for ProtectableContainerResource struct.
14850func (pcr *ProtectableContainerResource) UnmarshalJSON(body []byte) error {
14851	var m map[string]*json.RawMessage
14852	err := json.Unmarshal(body, &m)
14853	if err != nil {
14854		return err
14855	}
14856	for k, v := range m {
14857		switch k {
14858		case "properties":
14859			if v != nil {
14860				properties, err := unmarshalBasicProtectableContainer(*v)
14861				if err != nil {
14862					return err
14863				}
14864				pcr.Properties = properties
14865			}
14866		case "id":
14867			if v != nil {
14868				var ID string
14869				err = json.Unmarshal(*v, &ID)
14870				if err != nil {
14871					return err
14872				}
14873				pcr.ID = &ID
14874			}
14875		case "name":
14876			if v != nil {
14877				var name string
14878				err = json.Unmarshal(*v, &name)
14879				if err != nil {
14880					return err
14881				}
14882				pcr.Name = &name
14883			}
14884		case "type":
14885			if v != nil {
14886				var typeVar string
14887				err = json.Unmarshal(*v, &typeVar)
14888				if err != nil {
14889					return err
14890				}
14891				pcr.Type = &typeVar
14892			}
14893		case "location":
14894			if v != nil {
14895				var location string
14896				err = json.Unmarshal(*v, &location)
14897				if err != nil {
14898					return err
14899				}
14900				pcr.Location = &location
14901			}
14902		case "tags":
14903			if v != nil {
14904				var tags map[string]*string
14905				err = json.Unmarshal(*v, &tags)
14906				if err != nil {
14907					return err
14908				}
14909				pcr.Tags = tags
14910			}
14911		case "eTag":
14912			if v != nil {
14913				var eTag string
14914				err = json.Unmarshal(*v, &eTag)
14915				if err != nil {
14916					return err
14917				}
14918				pcr.ETag = &eTag
14919			}
14920		}
14921	}
14922
14923	return nil
14924}
14925
14926// ProtectableContainerResourceList list of ProtectableContainer resources
14927type ProtectableContainerResourceList struct {
14928	autorest.Response `json:"-"`
14929	// Value - List of resources.
14930	Value *[]ProtectableContainerResource `json:"value,omitempty"`
14931	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
14932	NextLink *string `json:"nextLink,omitempty"`
14933}
14934
14935// ProtectableContainerResourceListIterator provides access to a complete listing of
14936// ProtectableContainerResource values.
14937type ProtectableContainerResourceListIterator struct {
14938	i    int
14939	page ProtectableContainerResourceListPage
14940}
14941
14942// NextWithContext advances to the next value.  If there was an error making
14943// the request the iterator does not advance and the error is returned.
14944func (iter *ProtectableContainerResourceListIterator) NextWithContext(ctx context.Context) (err error) {
14945	if tracing.IsEnabled() {
14946		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectableContainerResourceListIterator.NextWithContext")
14947		defer func() {
14948			sc := -1
14949			if iter.Response().Response.Response != nil {
14950				sc = iter.Response().Response.Response.StatusCode
14951			}
14952			tracing.EndSpan(ctx, sc, err)
14953		}()
14954	}
14955	iter.i++
14956	if iter.i < len(iter.page.Values()) {
14957		return nil
14958	}
14959	err = iter.page.NextWithContext(ctx)
14960	if err != nil {
14961		iter.i--
14962		return err
14963	}
14964	iter.i = 0
14965	return nil
14966}
14967
14968// Next advances to the next value.  If there was an error making
14969// the request the iterator does not advance and the error is returned.
14970// Deprecated: Use NextWithContext() instead.
14971func (iter *ProtectableContainerResourceListIterator) Next() error {
14972	return iter.NextWithContext(context.Background())
14973}
14974
14975// NotDone returns true if the enumeration should be started or is not yet complete.
14976func (iter ProtectableContainerResourceListIterator) NotDone() bool {
14977	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14978}
14979
14980// Response returns the raw server response from the last page request.
14981func (iter ProtectableContainerResourceListIterator) Response() ProtectableContainerResourceList {
14982	return iter.page.Response()
14983}
14984
14985// Value returns the current value or a zero-initialized value if the
14986// iterator has advanced beyond the end of the collection.
14987func (iter ProtectableContainerResourceListIterator) Value() ProtectableContainerResource {
14988	if !iter.page.NotDone() {
14989		return ProtectableContainerResource{}
14990	}
14991	return iter.page.Values()[iter.i]
14992}
14993
14994// Creates a new instance of the ProtectableContainerResourceListIterator type.
14995func NewProtectableContainerResourceListIterator(page ProtectableContainerResourceListPage) ProtectableContainerResourceListIterator {
14996	return ProtectableContainerResourceListIterator{page: page}
14997}
14998
14999// IsEmpty returns true if the ListResult contains no values.
15000func (pcrl ProtectableContainerResourceList) IsEmpty() bool {
15001	return pcrl.Value == nil || len(*pcrl.Value) == 0
15002}
15003
15004// hasNextLink returns true if the NextLink is not empty.
15005func (pcrl ProtectableContainerResourceList) hasNextLink() bool {
15006	return pcrl.NextLink != nil && len(*pcrl.NextLink) != 0
15007}
15008
15009// protectableContainerResourceListPreparer prepares a request to retrieve the next set of results.
15010// It returns nil if no more results exist.
15011func (pcrl ProtectableContainerResourceList) protectableContainerResourceListPreparer(ctx context.Context) (*http.Request, error) {
15012	if !pcrl.hasNextLink() {
15013		return nil, nil
15014	}
15015	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15016		autorest.AsJSON(),
15017		autorest.AsGet(),
15018		autorest.WithBaseURL(to.String(pcrl.NextLink)))
15019}
15020
15021// ProtectableContainerResourceListPage contains a page of ProtectableContainerResource values.
15022type ProtectableContainerResourceListPage struct {
15023	fn   func(context.Context, ProtectableContainerResourceList) (ProtectableContainerResourceList, error)
15024	pcrl ProtectableContainerResourceList
15025}
15026
15027// NextWithContext advances to the next page of values.  If there was an error making
15028// the request the page does not advance and the error is returned.
15029func (page *ProtectableContainerResourceListPage) NextWithContext(ctx context.Context) (err error) {
15030	if tracing.IsEnabled() {
15031		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectableContainerResourceListPage.NextWithContext")
15032		defer func() {
15033			sc := -1
15034			if page.Response().Response.Response != nil {
15035				sc = page.Response().Response.Response.StatusCode
15036			}
15037			tracing.EndSpan(ctx, sc, err)
15038		}()
15039	}
15040	for {
15041		next, err := page.fn(ctx, page.pcrl)
15042		if err != nil {
15043			return err
15044		}
15045		page.pcrl = next
15046		if !next.hasNextLink() || !next.IsEmpty() {
15047			break
15048		}
15049	}
15050	return nil
15051}
15052
15053// Next advances to the next page of values.  If there was an error making
15054// the request the page does not advance and the error is returned.
15055// Deprecated: Use NextWithContext() instead.
15056func (page *ProtectableContainerResourceListPage) Next() error {
15057	return page.NextWithContext(context.Background())
15058}
15059
15060// NotDone returns true if the page enumeration should be started or is not yet complete.
15061func (page ProtectableContainerResourceListPage) NotDone() bool {
15062	return !page.pcrl.IsEmpty()
15063}
15064
15065// Response returns the raw server response from the last page request.
15066func (page ProtectableContainerResourceListPage) Response() ProtectableContainerResourceList {
15067	return page.pcrl
15068}
15069
15070// Values returns the slice of values for the current page or nil if there are no values.
15071func (page ProtectableContainerResourceListPage) Values() []ProtectableContainerResource {
15072	if page.pcrl.IsEmpty() {
15073		return nil
15074	}
15075	return *page.pcrl.Value
15076}
15077
15078// Creates a new instance of the ProtectableContainerResourceListPage type.
15079func NewProtectableContainerResourceListPage(cur ProtectableContainerResourceList, getNextPage func(context.Context, ProtectableContainerResourceList) (ProtectableContainerResourceList, error)) ProtectableContainerResourceListPage {
15080	return ProtectableContainerResourceListPage{
15081		fn:   getNextPage,
15082		pcrl: cur,
15083	}
15084}
15085
15086// BasicProtectedItem base class for backup items.
15087type BasicProtectedItem interface {
15088	AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool)
15089	AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool)
15090	AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool)
15091	AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool)
15092	AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool)
15093	AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool)
15094	AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool)
15095	AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool)
15096	AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool)
15097	AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool)
15098	AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool)
15099	AsDPMProtectedItem() (*DPMProtectedItem, bool)
15100	AsGenericProtectedItem() (*GenericProtectedItem, bool)
15101	AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool)
15102	AsProtectedItem() (*ProtectedItem, bool)
15103}
15104
15105// ProtectedItem base class for backup items.
15106type ProtectedItem struct {
15107	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
15108	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
15109	// WorkloadType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
15110	WorkloadType DataSourceType `json:"workloadType,omitempty"`
15111	// ContainerName - Unique name of container
15112	ContainerName *string `json:"containerName,omitempty"`
15113	// SourceResourceID - ARM ID of the resource to be backed up.
15114	SourceResourceID *string `json:"sourceResourceId,omitempty"`
15115	// PolicyID - ID of the backup policy with which this item is backed up.
15116	PolicyID *string `json:"policyId,omitempty"`
15117	// LastRecoveryPoint - Timestamp when the last (latest) backup copy was created for this backup item.
15118	LastRecoveryPoint *date.Time `json:"lastRecoveryPoint,omitempty"`
15119	// BackupSetName - Name of the backup set the backup item belongs to
15120	BackupSetName *string `json:"backupSetName,omitempty"`
15121	// CreateMode - Create mode to indicate recovery of existing soft deleted data source or creation of new data source. Possible values include: 'CreateModeInvalid', 'CreateModeDefault', 'CreateModeRecover'
15122	CreateMode CreateMode `json:"createMode,omitempty"`
15123	// DeferredDeleteTimeInUTC - Time for deferred deletion in UTC
15124	DeferredDeleteTimeInUTC *date.Time `json:"deferredDeleteTimeInUTC,omitempty"`
15125	// IsScheduledForDeferredDelete - Flag to identify whether the DS is scheduled for deferred delete
15126	IsScheduledForDeferredDelete *bool `json:"isScheduledForDeferredDelete,omitempty"`
15127	// DeferredDeleteTimeRemaining - Time remaining before the DS marked for deferred delete is permanently deleted
15128	DeferredDeleteTimeRemaining *string `json:"deferredDeleteTimeRemaining,omitempty"`
15129	// IsDeferredDeleteScheduleUpcoming - Flag to identify whether the deferred deleted DS is to be purged soon
15130	IsDeferredDeleteScheduleUpcoming *bool `json:"isDeferredDeleteScheduleUpcoming,omitempty"`
15131	// IsRehydrate - Flag to identify that deferred deleted DS is to be moved into Pause state
15132	IsRehydrate *bool `json:"isRehydrate,omitempty"`
15133	// ProtectedItemType - Possible values include: 'ProtectedItemTypeProtectedItem', 'ProtectedItemTypeAzureFileShareProtectedItem', 'ProtectedItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectedItemTypeMicrosoftComputevirtualMachines', 'ProtectedItemTypeAzureIaaSVMProtectedItem', 'ProtectedItemTypeMicrosoftSqlserversdatabases', 'ProtectedItemTypeAzureVMWorkloadProtectedItem', 'ProtectedItemTypeAzureVMWorkloadSAPAseDatabase', 'ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase', 'ProtectedItemTypeAzureVMWorkloadSQLDatabase', 'ProtectedItemTypeDPMProtectedItem', 'ProtectedItemTypeGenericProtectedItem', 'ProtectedItemTypeMabFileFolderProtectedItem'
15134	ProtectedItemType ProtectedItemType `json:"protectedItemType,omitempty"`
15135}
15136
15137func unmarshalBasicProtectedItem(body []byte) (BasicProtectedItem, error) {
15138	var m map[string]interface{}
15139	err := json.Unmarshal(body, &m)
15140	if err != nil {
15141		return nil, err
15142	}
15143
15144	switch m["protectedItemType"] {
15145	case string(ProtectedItemTypeAzureFileShareProtectedItem):
15146		var afpi AzureFileshareProtectedItem
15147		err := json.Unmarshal(body, &afpi)
15148		return afpi, err
15149	case string(ProtectedItemTypeMicrosoftClassicComputevirtualMachines):
15150		var aisccvpi AzureIaaSClassicComputeVMProtectedItem
15151		err := json.Unmarshal(body, &aisccvpi)
15152		return aisccvpi, err
15153	case string(ProtectedItemTypeMicrosoftComputevirtualMachines):
15154		var aiscvpi AzureIaaSComputeVMProtectedItem
15155		err := json.Unmarshal(body, &aiscvpi)
15156		return aiscvpi, err
15157	case string(ProtectedItemTypeAzureIaaSVMProtectedItem):
15158		var aispi AzureIaaSVMProtectedItem
15159		err := json.Unmarshal(body, &aispi)
15160		return aispi, err
15161	case string(ProtectedItemTypeMicrosoftSqlserversdatabases):
15162		var aspi AzureSQLProtectedItem
15163		err := json.Unmarshal(body, &aspi)
15164		return aspi, err
15165	case string(ProtectedItemTypeAzureVMWorkloadProtectedItem):
15166		var avwpi AzureVMWorkloadProtectedItem
15167		err := json.Unmarshal(body, &avwpi)
15168		return avwpi, err
15169	case string(ProtectedItemTypeAzureVMWorkloadSAPAseDatabase):
15170		var avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem
15171		err := json.Unmarshal(body, &avwsadpi)
15172		return avwsadpi, err
15173	case string(ProtectedItemTypeAzureVMWorkloadSAPHanaDatabase):
15174		var avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem
15175		err := json.Unmarshal(body, &avwshdpi)
15176		return avwshdpi, err
15177	case string(ProtectedItemTypeAzureVMWorkloadSQLDatabase):
15178		var avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem
15179		err := json.Unmarshal(body, &avwsdpi)
15180		return avwsdpi, err
15181	case string(ProtectedItemTypeDPMProtectedItem):
15182		var dpi DPMProtectedItem
15183		err := json.Unmarshal(body, &dpi)
15184		return dpi, err
15185	case string(ProtectedItemTypeGenericProtectedItem):
15186		var gpi GenericProtectedItem
15187		err := json.Unmarshal(body, &gpi)
15188		return gpi, err
15189	case string(ProtectedItemTypeMabFileFolderProtectedItem):
15190		var mffpi MabFileFolderProtectedItem
15191		err := json.Unmarshal(body, &mffpi)
15192		return mffpi, err
15193	default:
15194		var pi ProtectedItem
15195		err := json.Unmarshal(body, &pi)
15196		return pi, err
15197	}
15198}
15199func unmarshalBasicProtectedItemArray(body []byte) ([]BasicProtectedItem, error) {
15200	var rawMessages []*json.RawMessage
15201	err := json.Unmarshal(body, &rawMessages)
15202	if err != nil {
15203		return nil, err
15204	}
15205
15206	piArray := make([]BasicProtectedItem, len(rawMessages))
15207
15208	for index, rawMessage := range rawMessages {
15209		pi, err := unmarshalBasicProtectedItem(*rawMessage)
15210		if err != nil {
15211			return nil, err
15212		}
15213		piArray[index] = pi
15214	}
15215	return piArray, nil
15216}
15217
15218// MarshalJSON is the custom marshaler for ProtectedItem.
15219func (pi ProtectedItem) MarshalJSON() ([]byte, error) {
15220	pi.ProtectedItemType = ProtectedItemTypeProtectedItem
15221	objectMap := make(map[string]interface{})
15222	if pi.BackupManagementType != "" {
15223		objectMap["backupManagementType"] = pi.BackupManagementType
15224	}
15225	if pi.WorkloadType != "" {
15226		objectMap["workloadType"] = pi.WorkloadType
15227	}
15228	if pi.ContainerName != nil {
15229		objectMap["containerName"] = pi.ContainerName
15230	}
15231	if pi.SourceResourceID != nil {
15232		objectMap["sourceResourceId"] = pi.SourceResourceID
15233	}
15234	if pi.PolicyID != nil {
15235		objectMap["policyId"] = pi.PolicyID
15236	}
15237	if pi.LastRecoveryPoint != nil {
15238		objectMap["lastRecoveryPoint"] = pi.LastRecoveryPoint
15239	}
15240	if pi.BackupSetName != nil {
15241		objectMap["backupSetName"] = pi.BackupSetName
15242	}
15243	if pi.CreateMode != "" {
15244		objectMap["createMode"] = pi.CreateMode
15245	}
15246	if pi.DeferredDeleteTimeInUTC != nil {
15247		objectMap["deferredDeleteTimeInUTC"] = pi.DeferredDeleteTimeInUTC
15248	}
15249	if pi.IsScheduledForDeferredDelete != nil {
15250		objectMap["isScheduledForDeferredDelete"] = pi.IsScheduledForDeferredDelete
15251	}
15252	if pi.DeferredDeleteTimeRemaining != nil {
15253		objectMap["deferredDeleteTimeRemaining"] = pi.DeferredDeleteTimeRemaining
15254	}
15255	if pi.IsDeferredDeleteScheduleUpcoming != nil {
15256		objectMap["isDeferredDeleteScheduleUpcoming"] = pi.IsDeferredDeleteScheduleUpcoming
15257	}
15258	if pi.IsRehydrate != nil {
15259		objectMap["isRehydrate"] = pi.IsRehydrate
15260	}
15261	if pi.ProtectedItemType != "" {
15262		objectMap["protectedItemType"] = pi.ProtectedItemType
15263	}
15264	return json.Marshal(objectMap)
15265}
15266
15267// AsAzureFileshareProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15268func (pi ProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
15269	return nil, false
15270}
15271
15272// AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15273func (pi ProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
15274	return nil, false
15275}
15276
15277// AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15278func (pi ProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
15279	return nil, false
15280}
15281
15282// AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15283func (pi ProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
15284	return nil, false
15285}
15286
15287// AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15288func (pi ProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
15289	return nil, false
15290}
15291
15292// AsAzureSQLProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15293func (pi ProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
15294	return nil, false
15295}
15296
15297// AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15298func (pi ProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
15299	return nil, false
15300}
15301
15302// AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15303func (pi ProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
15304	return nil, false
15305}
15306
15307// AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15308func (pi ProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
15309	return nil, false
15310}
15311
15312// AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15313func (pi ProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
15314	return nil, false
15315}
15316
15317// AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15318func (pi ProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
15319	return nil, false
15320}
15321
15322// AsDPMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15323func (pi ProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
15324	return nil, false
15325}
15326
15327// AsGenericProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15328func (pi ProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
15329	return nil, false
15330}
15331
15332// AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15333func (pi ProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
15334	return nil, false
15335}
15336
15337// AsProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15338func (pi ProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
15339	return &pi, true
15340}
15341
15342// AsBasicProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
15343func (pi ProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
15344	return &pi, true
15345}
15346
15347// ProtectedItemQueryObject filters to list backup items.
15348type ProtectedItemQueryObject struct {
15349	// HealthState - Health State for the backed up item. Possible values include: 'HealthStatePassed', 'HealthStateActionRequired', 'HealthStateActionSuggested', 'HealthStateInvalid'
15350	HealthState HealthState `json:"healthState,omitempty"`
15351	// BackupManagementType - Backup management type for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
15352	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
15353	// ItemType - Type of workload this item represents. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
15354	ItemType DataSourceType `json:"itemType,omitempty"`
15355	// PolicyName - Backup policy name associated with the backup item.
15356	PolicyName *string `json:"policyName,omitempty"`
15357	// ContainerName - Name of the container.
15358	ContainerName *string `json:"containerName,omitempty"`
15359	// BackupEngineName - Backup Engine name
15360	BackupEngineName *string `json:"backupEngineName,omitempty"`
15361	// FriendlyName - Friendly name of protected item
15362	FriendlyName *string `json:"friendlyName,omitempty"`
15363	// FabricName - Name of the fabric.
15364	FabricName *string `json:"fabricName,omitempty"`
15365	// BackupSetName - Name of the backup set.
15366	BackupSetName *string `json:"backupSetName,omitempty"`
15367}
15368
15369// ProtectedItemResource base class for backup items.
15370type ProtectedItemResource struct {
15371	autorest.Response `json:"-"`
15372	// Properties - ProtectedItemResource properties
15373	Properties BasicProtectedItem `json:"properties,omitempty"`
15374	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
15375	ID *string `json:"id,omitempty"`
15376	// Name - READ-ONLY; Resource name associated with the resource.
15377	Name *string `json:"name,omitempty"`
15378	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
15379	Type *string `json:"type,omitempty"`
15380	// Location - Resource location.
15381	Location *string `json:"location,omitempty"`
15382	// Tags - Resource tags.
15383	Tags map[string]*string `json:"tags"`
15384	// ETag - Optional ETag.
15385	ETag *string `json:"eTag,omitempty"`
15386}
15387
15388// MarshalJSON is the custom marshaler for ProtectedItemResource.
15389func (pir ProtectedItemResource) MarshalJSON() ([]byte, error) {
15390	objectMap := make(map[string]interface{})
15391	objectMap["properties"] = pir.Properties
15392	if pir.Location != nil {
15393		objectMap["location"] = pir.Location
15394	}
15395	if pir.Tags != nil {
15396		objectMap["tags"] = pir.Tags
15397	}
15398	if pir.ETag != nil {
15399		objectMap["eTag"] = pir.ETag
15400	}
15401	return json.Marshal(objectMap)
15402}
15403
15404// UnmarshalJSON is the custom unmarshaler for ProtectedItemResource struct.
15405func (pir *ProtectedItemResource) UnmarshalJSON(body []byte) error {
15406	var m map[string]*json.RawMessage
15407	err := json.Unmarshal(body, &m)
15408	if err != nil {
15409		return err
15410	}
15411	for k, v := range m {
15412		switch k {
15413		case "properties":
15414			if v != nil {
15415				properties, err := unmarshalBasicProtectedItem(*v)
15416				if err != nil {
15417					return err
15418				}
15419				pir.Properties = properties
15420			}
15421		case "id":
15422			if v != nil {
15423				var ID string
15424				err = json.Unmarshal(*v, &ID)
15425				if err != nil {
15426					return err
15427				}
15428				pir.ID = &ID
15429			}
15430		case "name":
15431			if v != nil {
15432				var name string
15433				err = json.Unmarshal(*v, &name)
15434				if err != nil {
15435					return err
15436				}
15437				pir.Name = &name
15438			}
15439		case "type":
15440			if v != nil {
15441				var typeVar string
15442				err = json.Unmarshal(*v, &typeVar)
15443				if err != nil {
15444					return err
15445				}
15446				pir.Type = &typeVar
15447			}
15448		case "location":
15449			if v != nil {
15450				var location string
15451				err = json.Unmarshal(*v, &location)
15452				if err != nil {
15453					return err
15454				}
15455				pir.Location = &location
15456			}
15457		case "tags":
15458			if v != nil {
15459				var tags map[string]*string
15460				err = json.Unmarshal(*v, &tags)
15461				if err != nil {
15462					return err
15463				}
15464				pir.Tags = tags
15465			}
15466		case "eTag":
15467			if v != nil {
15468				var eTag string
15469				err = json.Unmarshal(*v, &eTag)
15470				if err != nil {
15471					return err
15472				}
15473				pir.ETag = &eTag
15474			}
15475		}
15476	}
15477
15478	return nil
15479}
15480
15481// ProtectedItemResourceList list of ProtectedItem resources
15482type ProtectedItemResourceList struct {
15483	autorest.Response `json:"-"`
15484	// Value - List of resources.
15485	Value *[]ProtectedItemResource `json:"value,omitempty"`
15486	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
15487	NextLink *string `json:"nextLink,omitempty"`
15488}
15489
15490// ProtectedItemResourceListIterator provides access to a complete listing of ProtectedItemResource values.
15491type ProtectedItemResourceListIterator struct {
15492	i    int
15493	page ProtectedItemResourceListPage
15494}
15495
15496// NextWithContext advances to the next value.  If there was an error making
15497// the request the iterator does not advance and the error is returned.
15498func (iter *ProtectedItemResourceListIterator) NextWithContext(ctx context.Context) (err error) {
15499	if tracing.IsEnabled() {
15500		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectedItemResourceListIterator.NextWithContext")
15501		defer func() {
15502			sc := -1
15503			if iter.Response().Response.Response != nil {
15504				sc = iter.Response().Response.Response.StatusCode
15505			}
15506			tracing.EndSpan(ctx, sc, err)
15507		}()
15508	}
15509	iter.i++
15510	if iter.i < len(iter.page.Values()) {
15511		return nil
15512	}
15513	err = iter.page.NextWithContext(ctx)
15514	if err != nil {
15515		iter.i--
15516		return err
15517	}
15518	iter.i = 0
15519	return nil
15520}
15521
15522// Next advances to the next value.  If there was an error making
15523// the request the iterator does not advance and the error is returned.
15524// Deprecated: Use NextWithContext() instead.
15525func (iter *ProtectedItemResourceListIterator) Next() error {
15526	return iter.NextWithContext(context.Background())
15527}
15528
15529// NotDone returns true if the enumeration should be started or is not yet complete.
15530func (iter ProtectedItemResourceListIterator) NotDone() bool {
15531	return iter.page.NotDone() && iter.i < len(iter.page.Values())
15532}
15533
15534// Response returns the raw server response from the last page request.
15535func (iter ProtectedItemResourceListIterator) Response() ProtectedItemResourceList {
15536	return iter.page.Response()
15537}
15538
15539// Value returns the current value or a zero-initialized value if the
15540// iterator has advanced beyond the end of the collection.
15541func (iter ProtectedItemResourceListIterator) Value() ProtectedItemResource {
15542	if !iter.page.NotDone() {
15543		return ProtectedItemResource{}
15544	}
15545	return iter.page.Values()[iter.i]
15546}
15547
15548// Creates a new instance of the ProtectedItemResourceListIterator type.
15549func NewProtectedItemResourceListIterator(page ProtectedItemResourceListPage) ProtectedItemResourceListIterator {
15550	return ProtectedItemResourceListIterator{page: page}
15551}
15552
15553// IsEmpty returns true if the ListResult contains no values.
15554func (pirl ProtectedItemResourceList) IsEmpty() bool {
15555	return pirl.Value == nil || len(*pirl.Value) == 0
15556}
15557
15558// hasNextLink returns true if the NextLink is not empty.
15559func (pirl ProtectedItemResourceList) hasNextLink() bool {
15560	return pirl.NextLink != nil && len(*pirl.NextLink) != 0
15561}
15562
15563// protectedItemResourceListPreparer prepares a request to retrieve the next set of results.
15564// It returns nil if no more results exist.
15565func (pirl ProtectedItemResourceList) protectedItemResourceListPreparer(ctx context.Context) (*http.Request, error) {
15566	if !pirl.hasNextLink() {
15567		return nil, nil
15568	}
15569	return autorest.Prepare((&http.Request{}).WithContext(ctx),
15570		autorest.AsJSON(),
15571		autorest.AsGet(),
15572		autorest.WithBaseURL(to.String(pirl.NextLink)))
15573}
15574
15575// ProtectedItemResourceListPage contains a page of ProtectedItemResource values.
15576type ProtectedItemResourceListPage struct {
15577	fn   func(context.Context, ProtectedItemResourceList) (ProtectedItemResourceList, error)
15578	pirl ProtectedItemResourceList
15579}
15580
15581// NextWithContext advances to the next page of values.  If there was an error making
15582// the request the page does not advance and the error is returned.
15583func (page *ProtectedItemResourceListPage) NextWithContext(ctx context.Context) (err error) {
15584	if tracing.IsEnabled() {
15585		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectedItemResourceListPage.NextWithContext")
15586		defer func() {
15587			sc := -1
15588			if page.Response().Response.Response != nil {
15589				sc = page.Response().Response.Response.StatusCode
15590			}
15591			tracing.EndSpan(ctx, sc, err)
15592		}()
15593	}
15594	for {
15595		next, err := page.fn(ctx, page.pirl)
15596		if err != nil {
15597			return err
15598		}
15599		page.pirl = next
15600		if !next.hasNextLink() || !next.IsEmpty() {
15601			break
15602		}
15603	}
15604	return nil
15605}
15606
15607// Next advances to the next page of values.  If there was an error making
15608// the request the page does not advance and the error is returned.
15609// Deprecated: Use NextWithContext() instead.
15610func (page *ProtectedItemResourceListPage) Next() error {
15611	return page.NextWithContext(context.Background())
15612}
15613
15614// NotDone returns true if the page enumeration should be started or is not yet complete.
15615func (page ProtectedItemResourceListPage) NotDone() bool {
15616	return !page.pirl.IsEmpty()
15617}
15618
15619// Response returns the raw server response from the last page request.
15620func (page ProtectedItemResourceListPage) Response() ProtectedItemResourceList {
15621	return page.pirl
15622}
15623
15624// Values returns the slice of values for the current page or nil if there are no values.
15625func (page ProtectedItemResourceListPage) Values() []ProtectedItemResource {
15626	if page.pirl.IsEmpty() {
15627		return nil
15628	}
15629	return *page.pirl.Value
15630}
15631
15632// Creates a new instance of the ProtectedItemResourceListPage type.
15633func NewProtectedItemResourceListPage(cur ProtectedItemResourceList, getNextPage func(context.Context, ProtectedItemResourceList) (ProtectedItemResourceList, error)) ProtectedItemResourceListPage {
15634	return ProtectedItemResourceListPage{
15635		fn:   getNextPage,
15636		pirl: cur,
15637	}
15638}
15639
15640// BasicProtectionContainer base class for container with backup items. Containers with specific workloads are derived
15641// from this class.
15642type BasicProtectionContainer interface {
15643	AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool)
15644	AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool)
15645	AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool)
15646	AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool)
15647	AsAzureSQLContainer() (*AzureSQLContainer, bool)
15648	AsAzureStorageContainer() (*AzureStorageContainer, bool)
15649	AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool)
15650	AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool)
15651	AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool)
15652	AsDpmContainer() (*DpmContainer, bool)
15653	AsBasicDpmContainer() (BasicDpmContainer, bool)
15654	AsGenericContainer() (*GenericContainer, bool)
15655	AsIaaSVMContainer() (*IaaSVMContainer, bool)
15656	AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool)
15657	AsMabContainer() (*MabContainer, bool)
15658	AsProtectionContainer() (*ProtectionContainer, bool)
15659}
15660
15661// ProtectionContainer base class for container with backup items. Containers with specific workloads are
15662// derived from this class.
15663type ProtectionContainer struct {
15664	// FriendlyName - Friendly name of the container.
15665	FriendlyName *string `json:"friendlyName,omitempty"`
15666	// BackupManagementType - Type of backup management for the container. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
15667	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
15668	// RegistrationStatus - Status of registration of the container with the Recovery Services Vault.
15669	RegistrationStatus *string `json:"registrationStatus,omitempty"`
15670	// HealthStatus - Status of health of the container.
15671	HealthStatus *string `json:"healthStatus,omitempty"`
15672	// ContainerType - Possible values include: 'ContainerTypeProtectionContainer', 'ContainerTypeAzureBackupServerContainer1', 'ContainerTypeMicrosoftClassicComputevirtualMachines', 'ContainerTypeMicrosoftComputevirtualMachines', 'ContainerTypeSQLAGWorkLoadContainer1', 'ContainerTypeAzureSQLContainer1', 'ContainerTypeStorageContainer1', 'ContainerTypeVMAppContainer1', 'ContainerTypeAzureWorkloadContainer', 'ContainerTypeDPMContainer1', 'ContainerTypeGenericContainer1', 'ContainerTypeIaaSVMContainer', 'ContainerTypeWindows1'
15673	ContainerType ContainerTypeBasicProtectionContainer `json:"containerType,omitempty"`
15674}
15675
15676func unmarshalBasicProtectionContainer(body []byte) (BasicProtectionContainer, error) {
15677	var m map[string]interface{}
15678	err := json.Unmarshal(body, &m)
15679	if err != nil {
15680		return nil, err
15681	}
15682
15683	switch m["containerType"] {
15684	case string(ContainerTypeAzureBackupServerContainer1):
15685		var absc AzureBackupServerContainer
15686		err := json.Unmarshal(body, &absc)
15687		return absc, err
15688	case string(ContainerTypeMicrosoftClassicComputevirtualMachines):
15689		var aisccvc AzureIaaSClassicComputeVMContainer
15690		err := json.Unmarshal(body, &aisccvc)
15691		return aisccvc, err
15692	case string(ContainerTypeMicrosoftComputevirtualMachines):
15693		var aiscvc AzureIaaSComputeVMContainer
15694		err := json.Unmarshal(body, &aiscvc)
15695		return aiscvc, err
15696	case string(ContainerTypeSQLAGWorkLoadContainer1):
15697		var aswcpc AzureSQLAGWorkloadContainerProtectionContainer
15698		err := json.Unmarshal(body, &aswcpc)
15699		return aswcpc, err
15700	case string(ContainerTypeAzureSQLContainer1):
15701		var asc AzureSQLContainer
15702		err := json.Unmarshal(body, &asc)
15703		return asc, err
15704	case string(ContainerTypeStorageContainer1):
15705		var asc AzureStorageContainer
15706		err := json.Unmarshal(body, &asc)
15707		return asc, err
15708	case string(ContainerTypeVMAppContainer1):
15709		var avacpc AzureVMAppContainerProtectionContainer
15710		err := json.Unmarshal(body, &avacpc)
15711		return avacpc, err
15712	case string(ContainerTypeAzureWorkloadContainer):
15713		var awc AzureWorkloadContainer
15714		err := json.Unmarshal(body, &awc)
15715		return awc, err
15716	case string(ContainerTypeDPMContainer1):
15717		var dc DpmContainer
15718		err := json.Unmarshal(body, &dc)
15719		return dc, err
15720	case string(ContainerTypeGenericContainer1):
15721		var gc GenericContainer
15722		err := json.Unmarshal(body, &gc)
15723		return gc, err
15724	case string(ContainerTypeIaaSVMContainer):
15725		var isc IaaSVMContainer
15726		err := json.Unmarshal(body, &isc)
15727		return isc, err
15728	case string(ContainerTypeWindows1):
15729		var mc MabContainer
15730		err := json.Unmarshal(body, &mc)
15731		return mc, err
15732	default:
15733		var pc ProtectionContainer
15734		err := json.Unmarshal(body, &pc)
15735		return pc, err
15736	}
15737}
15738func unmarshalBasicProtectionContainerArray(body []byte) ([]BasicProtectionContainer, error) {
15739	var rawMessages []*json.RawMessage
15740	err := json.Unmarshal(body, &rawMessages)
15741	if err != nil {
15742		return nil, err
15743	}
15744
15745	pcArray := make([]BasicProtectionContainer, len(rawMessages))
15746
15747	for index, rawMessage := range rawMessages {
15748		pc, err := unmarshalBasicProtectionContainer(*rawMessage)
15749		if err != nil {
15750			return nil, err
15751		}
15752		pcArray[index] = pc
15753	}
15754	return pcArray, nil
15755}
15756
15757// MarshalJSON is the custom marshaler for ProtectionContainer.
15758func (pc ProtectionContainer) MarshalJSON() ([]byte, error) {
15759	pc.ContainerType = ContainerTypeProtectionContainer
15760	objectMap := make(map[string]interface{})
15761	if pc.FriendlyName != nil {
15762		objectMap["friendlyName"] = pc.FriendlyName
15763	}
15764	if pc.BackupManagementType != "" {
15765		objectMap["backupManagementType"] = pc.BackupManagementType
15766	}
15767	if pc.RegistrationStatus != nil {
15768		objectMap["registrationStatus"] = pc.RegistrationStatus
15769	}
15770	if pc.HealthStatus != nil {
15771		objectMap["healthStatus"] = pc.HealthStatus
15772	}
15773	if pc.ContainerType != "" {
15774		objectMap["containerType"] = pc.ContainerType
15775	}
15776	return json.Marshal(objectMap)
15777}
15778
15779// AsAzureBackupServerContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15780func (pc ProtectionContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
15781	return nil, false
15782}
15783
15784// AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15785func (pc ProtectionContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
15786	return nil, false
15787}
15788
15789// AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15790func (pc ProtectionContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
15791	return nil, false
15792}
15793
15794// AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15795func (pc ProtectionContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
15796	return nil, false
15797}
15798
15799// AsAzureSQLContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15800func (pc ProtectionContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
15801	return nil, false
15802}
15803
15804// AsAzureStorageContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15805func (pc ProtectionContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
15806	return nil, false
15807}
15808
15809// AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15810func (pc ProtectionContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
15811	return nil, false
15812}
15813
15814// AsAzureWorkloadContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15815func (pc ProtectionContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
15816	return nil, false
15817}
15818
15819// AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15820func (pc ProtectionContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
15821	return nil, false
15822}
15823
15824// AsDpmContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15825func (pc ProtectionContainer) AsDpmContainer() (*DpmContainer, bool) {
15826	return nil, false
15827}
15828
15829// AsBasicDpmContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15830func (pc ProtectionContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
15831	return nil, false
15832}
15833
15834// AsGenericContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15835func (pc ProtectionContainer) AsGenericContainer() (*GenericContainer, bool) {
15836	return nil, false
15837}
15838
15839// AsIaaSVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15840func (pc ProtectionContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
15841	return nil, false
15842}
15843
15844// AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15845func (pc ProtectionContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
15846	return nil, false
15847}
15848
15849// AsMabContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15850func (pc ProtectionContainer) AsMabContainer() (*MabContainer, bool) {
15851	return nil, false
15852}
15853
15854// AsProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15855func (pc ProtectionContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
15856	return &pc, true
15857}
15858
15859// AsBasicProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
15860func (pc ProtectionContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
15861	return &pc, true
15862}
15863
15864// ProtectionContainerResource base class for container with backup items. Containers with specific
15865// workloads are derived from this class.
15866type ProtectionContainerResource struct {
15867	autorest.Response `json:"-"`
15868	// Properties - ProtectionContainerResource properties
15869	Properties BasicProtectionContainer `json:"properties,omitempty"`
15870	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
15871	ID *string `json:"id,omitempty"`
15872	// Name - READ-ONLY; Resource name associated with the resource.
15873	Name *string `json:"name,omitempty"`
15874	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
15875	Type *string `json:"type,omitempty"`
15876	// Location - Resource location.
15877	Location *string `json:"location,omitempty"`
15878	// Tags - Resource tags.
15879	Tags map[string]*string `json:"tags"`
15880	// ETag - Optional ETag.
15881	ETag *string `json:"eTag,omitempty"`
15882}
15883
15884// MarshalJSON is the custom marshaler for ProtectionContainerResource.
15885func (pcr ProtectionContainerResource) MarshalJSON() ([]byte, error) {
15886	objectMap := make(map[string]interface{})
15887	objectMap["properties"] = pcr.Properties
15888	if pcr.Location != nil {
15889		objectMap["location"] = pcr.Location
15890	}
15891	if pcr.Tags != nil {
15892		objectMap["tags"] = pcr.Tags
15893	}
15894	if pcr.ETag != nil {
15895		objectMap["eTag"] = pcr.ETag
15896	}
15897	return json.Marshal(objectMap)
15898}
15899
15900// UnmarshalJSON is the custom unmarshaler for ProtectionContainerResource struct.
15901func (pcr *ProtectionContainerResource) UnmarshalJSON(body []byte) error {
15902	var m map[string]*json.RawMessage
15903	err := json.Unmarshal(body, &m)
15904	if err != nil {
15905		return err
15906	}
15907	for k, v := range m {
15908		switch k {
15909		case "properties":
15910			if v != nil {
15911				properties, err := unmarshalBasicProtectionContainer(*v)
15912				if err != nil {
15913					return err
15914				}
15915				pcr.Properties = properties
15916			}
15917		case "id":
15918			if v != nil {
15919				var ID string
15920				err = json.Unmarshal(*v, &ID)
15921				if err != nil {
15922					return err
15923				}
15924				pcr.ID = &ID
15925			}
15926		case "name":
15927			if v != nil {
15928				var name string
15929				err = json.Unmarshal(*v, &name)
15930				if err != nil {
15931					return err
15932				}
15933				pcr.Name = &name
15934			}
15935		case "type":
15936			if v != nil {
15937				var typeVar string
15938				err = json.Unmarshal(*v, &typeVar)
15939				if err != nil {
15940					return err
15941				}
15942				pcr.Type = &typeVar
15943			}
15944		case "location":
15945			if v != nil {
15946				var location string
15947				err = json.Unmarshal(*v, &location)
15948				if err != nil {
15949					return err
15950				}
15951				pcr.Location = &location
15952			}
15953		case "tags":
15954			if v != nil {
15955				var tags map[string]*string
15956				err = json.Unmarshal(*v, &tags)
15957				if err != nil {
15958					return err
15959				}
15960				pcr.Tags = tags
15961			}
15962		case "eTag":
15963			if v != nil {
15964				var eTag string
15965				err = json.Unmarshal(*v, &eTag)
15966				if err != nil {
15967					return err
15968				}
15969				pcr.ETag = &eTag
15970			}
15971		}
15972	}
15973
15974	return nil
15975}
15976
15977// ProtectionContainerResourceList list of ProtectionContainer resources
15978type ProtectionContainerResourceList struct {
15979	autorest.Response `json:"-"`
15980	// Value - List of resources.
15981	Value *[]ProtectionContainerResource `json:"value,omitempty"`
15982	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
15983	NextLink *string `json:"nextLink,omitempty"`
15984}
15985
15986// ProtectionContainerResourceListIterator provides access to a complete listing of
15987// ProtectionContainerResource values.
15988type ProtectionContainerResourceListIterator struct {
15989	i    int
15990	page ProtectionContainerResourceListPage
15991}
15992
15993// NextWithContext advances to the next value.  If there was an error making
15994// the request the iterator does not advance and the error is returned.
15995func (iter *ProtectionContainerResourceListIterator) NextWithContext(ctx context.Context) (err error) {
15996	if tracing.IsEnabled() {
15997		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerResourceListIterator.NextWithContext")
15998		defer func() {
15999			sc := -1
16000			if iter.Response().Response.Response != nil {
16001				sc = iter.Response().Response.Response.StatusCode
16002			}
16003			tracing.EndSpan(ctx, sc, err)
16004		}()
16005	}
16006	iter.i++
16007	if iter.i < len(iter.page.Values()) {
16008		return nil
16009	}
16010	err = iter.page.NextWithContext(ctx)
16011	if err != nil {
16012		iter.i--
16013		return err
16014	}
16015	iter.i = 0
16016	return nil
16017}
16018
16019// Next advances to the next value.  If there was an error making
16020// the request the iterator does not advance and the error is returned.
16021// Deprecated: Use NextWithContext() instead.
16022func (iter *ProtectionContainerResourceListIterator) Next() error {
16023	return iter.NextWithContext(context.Background())
16024}
16025
16026// NotDone returns true if the enumeration should be started or is not yet complete.
16027func (iter ProtectionContainerResourceListIterator) NotDone() bool {
16028	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16029}
16030
16031// Response returns the raw server response from the last page request.
16032func (iter ProtectionContainerResourceListIterator) Response() ProtectionContainerResourceList {
16033	return iter.page.Response()
16034}
16035
16036// Value returns the current value or a zero-initialized value if the
16037// iterator has advanced beyond the end of the collection.
16038func (iter ProtectionContainerResourceListIterator) Value() ProtectionContainerResource {
16039	if !iter.page.NotDone() {
16040		return ProtectionContainerResource{}
16041	}
16042	return iter.page.Values()[iter.i]
16043}
16044
16045// Creates a new instance of the ProtectionContainerResourceListIterator type.
16046func NewProtectionContainerResourceListIterator(page ProtectionContainerResourceListPage) ProtectionContainerResourceListIterator {
16047	return ProtectionContainerResourceListIterator{page: page}
16048}
16049
16050// IsEmpty returns true if the ListResult contains no values.
16051func (pcrl ProtectionContainerResourceList) IsEmpty() bool {
16052	return pcrl.Value == nil || len(*pcrl.Value) == 0
16053}
16054
16055// hasNextLink returns true if the NextLink is not empty.
16056func (pcrl ProtectionContainerResourceList) hasNextLink() bool {
16057	return pcrl.NextLink != nil && len(*pcrl.NextLink) != 0
16058}
16059
16060// protectionContainerResourceListPreparer prepares a request to retrieve the next set of results.
16061// It returns nil if no more results exist.
16062func (pcrl ProtectionContainerResourceList) protectionContainerResourceListPreparer(ctx context.Context) (*http.Request, error) {
16063	if !pcrl.hasNextLink() {
16064		return nil, nil
16065	}
16066	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16067		autorest.AsJSON(),
16068		autorest.AsGet(),
16069		autorest.WithBaseURL(to.String(pcrl.NextLink)))
16070}
16071
16072// ProtectionContainerResourceListPage contains a page of ProtectionContainerResource values.
16073type ProtectionContainerResourceListPage struct {
16074	fn   func(context.Context, ProtectionContainerResourceList) (ProtectionContainerResourceList, error)
16075	pcrl ProtectionContainerResourceList
16076}
16077
16078// NextWithContext advances to the next page of values.  If there was an error making
16079// the request the page does not advance and the error is returned.
16080func (page *ProtectionContainerResourceListPage) NextWithContext(ctx context.Context) (err error) {
16081	if tracing.IsEnabled() {
16082		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionContainerResourceListPage.NextWithContext")
16083		defer func() {
16084			sc := -1
16085			if page.Response().Response.Response != nil {
16086				sc = page.Response().Response.Response.StatusCode
16087			}
16088			tracing.EndSpan(ctx, sc, err)
16089		}()
16090	}
16091	for {
16092		next, err := page.fn(ctx, page.pcrl)
16093		if err != nil {
16094			return err
16095		}
16096		page.pcrl = next
16097		if !next.hasNextLink() || !next.IsEmpty() {
16098			break
16099		}
16100	}
16101	return nil
16102}
16103
16104// Next advances to the next page of values.  If there was an error making
16105// the request the page does not advance and the error is returned.
16106// Deprecated: Use NextWithContext() instead.
16107func (page *ProtectionContainerResourceListPage) Next() error {
16108	return page.NextWithContext(context.Background())
16109}
16110
16111// NotDone returns true if the page enumeration should be started or is not yet complete.
16112func (page ProtectionContainerResourceListPage) NotDone() bool {
16113	return !page.pcrl.IsEmpty()
16114}
16115
16116// Response returns the raw server response from the last page request.
16117func (page ProtectionContainerResourceListPage) Response() ProtectionContainerResourceList {
16118	return page.pcrl
16119}
16120
16121// Values returns the slice of values for the current page or nil if there are no values.
16122func (page ProtectionContainerResourceListPage) Values() []ProtectionContainerResource {
16123	if page.pcrl.IsEmpty() {
16124		return nil
16125	}
16126	return *page.pcrl.Value
16127}
16128
16129// Creates a new instance of the ProtectionContainerResourceListPage type.
16130func NewProtectionContainerResourceListPage(cur ProtectionContainerResourceList, getNextPage func(context.Context, ProtectionContainerResourceList) (ProtectionContainerResourceList, error)) ProtectionContainerResourceListPage {
16131	return ProtectionContainerResourceListPage{
16132		fn:   getNextPage,
16133		pcrl: cur,
16134	}
16135}
16136
16137// BasicProtectionIntent base class for backup ProtectionIntent.
16138type BasicProtectionIntent interface {
16139	AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool)
16140	AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool)
16141	AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool)
16142	AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool)
16143	AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool)
16144	AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool)
16145	AsProtectionIntent() (*ProtectionIntent, bool)
16146}
16147
16148// ProtectionIntent base class for backup ProtectionIntent.
16149type ProtectionIntent struct {
16150	// BackupManagementType - Type of backup management for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
16151	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
16152	// SourceResourceID - ARM ID of the resource to be backed up.
16153	SourceResourceID *string `json:"sourceResourceId,omitempty"`
16154	// ItemID - ID of the item which is getting protected, In case of Azure Vm , it is ProtectedItemId
16155	ItemID *string `json:"itemId,omitempty"`
16156	// PolicyID - ID of the backup policy with which this item is backed up.
16157	PolicyID *string `json:"policyId,omitempty"`
16158	// ProtectionState - Backup state of this backup item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
16159	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
16160	// ProtectionIntentItemType - Possible values include: 'ProtectionIntentItemTypeProtectionIntent', 'ProtectionIntentItemTypeRecoveryServiceVaultItem', 'ProtectionIntentItemTypeAzureResourceItem', 'ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent', 'ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent'
16161	ProtectionIntentItemType ProtectionIntentItemType `json:"protectionIntentItemType,omitempty"`
16162}
16163
16164func unmarshalBasicProtectionIntent(body []byte) (BasicProtectionIntent, error) {
16165	var m map[string]interface{}
16166	err := json.Unmarshal(body, &m)
16167	if err != nil {
16168		return nil, err
16169	}
16170
16171	switch m["protectionIntentItemType"] {
16172	case string(ProtectionIntentItemTypeRecoveryServiceVaultItem):
16173		var arsvpi AzureRecoveryServiceVaultProtectionIntent
16174		err := json.Unmarshal(body, &arsvpi)
16175		return arsvpi, err
16176	case string(ProtectionIntentItemTypeAzureResourceItem):
16177		var arpi AzureResourceProtectionIntent
16178		err := json.Unmarshal(body, &arpi)
16179		return arpi, err
16180	case string(ProtectionIntentItemTypeAzureWorkloadAutoProtectionIntent):
16181		var awapi AzureWorkloadAutoProtectionIntent
16182		err := json.Unmarshal(body, &awapi)
16183		return awapi, err
16184	case string(ProtectionIntentItemTypeAzureWorkloadSQLAutoProtectionIntent):
16185		var awsapi AzureWorkloadSQLAutoProtectionIntent
16186		err := json.Unmarshal(body, &awsapi)
16187		return awsapi, err
16188	default:
16189		var pi ProtectionIntent
16190		err := json.Unmarshal(body, &pi)
16191		return pi, err
16192	}
16193}
16194func unmarshalBasicProtectionIntentArray(body []byte) ([]BasicProtectionIntent, error) {
16195	var rawMessages []*json.RawMessage
16196	err := json.Unmarshal(body, &rawMessages)
16197	if err != nil {
16198		return nil, err
16199	}
16200
16201	piArray := make([]BasicProtectionIntent, len(rawMessages))
16202
16203	for index, rawMessage := range rawMessages {
16204		pi, err := unmarshalBasicProtectionIntent(*rawMessage)
16205		if err != nil {
16206			return nil, err
16207		}
16208		piArray[index] = pi
16209	}
16210	return piArray, nil
16211}
16212
16213// MarshalJSON is the custom marshaler for ProtectionIntent.
16214func (pi ProtectionIntent) MarshalJSON() ([]byte, error) {
16215	pi.ProtectionIntentItemType = ProtectionIntentItemTypeProtectionIntent
16216	objectMap := make(map[string]interface{})
16217	if pi.BackupManagementType != "" {
16218		objectMap["backupManagementType"] = pi.BackupManagementType
16219	}
16220	if pi.SourceResourceID != nil {
16221		objectMap["sourceResourceId"] = pi.SourceResourceID
16222	}
16223	if pi.ItemID != nil {
16224		objectMap["itemId"] = pi.ItemID
16225	}
16226	if pi.PolicyID != nil {
16227		objectMap["policyId"] = pi.PolicyID
16228	}
16229	if pi.ProtectionState != "" {
16230		objectMap["protectionState"] = pi.ProtectionState
16231	}
16232	if pi.ProtectionIntentItemType != "" {
16233		objectMap["protectionIntentItemType"] = pi.ProtectionIntentItemType
16234	}
16235	return json.Marshal(objectMap)
16236}
16237
16238// AsAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16239func (pi ProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
16240	return nil, false
16241}
16242
16243// AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16244func (pi ProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
16245	return nil, false
16246}
16247
16248// AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16249func (pi ProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
16250	return nil, false
16251}
16252
16253// AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16254func (pi ProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
16255	return nil, false
16256}
16257
16258// AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16259func (pi ProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
16260	return nil, false
16261}
16262
16263// AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16264func (pi ProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
16265	return nil, false
16266}
16267
16268// AsProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16269func (pi ProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
16270	return &pi, true
16271}
16272
16273// AsBasicProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
16274func (pi ProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
16275	return &pi, true
16276}
16277
16278// ProtectionIntentQueryObject filters to list protection intent.
16279type ProtectionIntentQueryObject struct {
16280	// BackupManagementType - Backup management type for the backed up item. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
16281	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
16282	// ItemType - Type of workload this item represents. Possible values include: 'IntentItemTypeInvalid', 'IntentItemTypeSQLInstance', 'IntentItemTypeSQLAvailabilityGroupContainer'
16283	ItemType IntentItemType `json:"itemType,omitempty"`
16284	// ParentName - Parent name of the intent
16285	ParentName *string `json:"parentName,omitempty"`
16286	// ItemName - Item name of the intent
16287	ItemName *string `json:"itemName,omitempty"`
16288}
16289
16290// ProtectionIntentResource base class for backup ProtectionIntent.
16291type ProtectionIntentResource struct {
16292	autorest.Response `json:"-"`
16293	// Properties - ProtectionIntentResource properties
16294	Properties BasicProtectionIntent `json:"properties,omitempty"`
16295	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
16296	ID *string `json:"id,omitempty"`
16297	// Name - READ-ONLY; Resource name associated with the resource.
16298	Name *string `json:"name,omitempty"`
16299	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
16300	Type *string `json:"type,omitempty"`
16301	// Location - Resource location.
16302	Location *string `json:"location,omitempty"`
16303	// Tags - Resource tags.
16304	Tags map[string]*string `json:"tags"`
16305	// ETag - Optional ETag.
16306	ETag *string `json:"eTag,omitempty"`
16307}
16308
16309// MarshalJSON is the custom marshaler for ProtectionIntentResource.
16310func (pir ProtectionIntentResource) MarshalJSON() ([]byte, error) {
16311	objectMap := make(map[string]interface{})
16312	objectMap["properties"] = pir.Properties
16313	if pir.Location != nil {
16314		objectMap["location"] = pir.Location
16315	}
16316	if pir.Tags != nil {
16317		objectMap["tags"] = pir.Tags
16318	}
16319	if pir.ETag != nil {
16320		objectMap["eTag"] = pir.ETag
16321	}
16322	return json.Marshal(objectMap)
16323}
16324
16325// UnmarshalJSON is the custom unmarshaler for ProtectionIntentResource struct.
16326func (pir *ProtectionIntentResource) UnmarshalJSON(body []byte) error {
16327	var m map[string]*json.RawMessage
16328	err := json.Unmarshal(body, &m)
16329	if err != nil {
16330		return err
16331	}
16332	for k, v := range m {
16333		switch k {
16334		case "properties":
16335			if v != nil {
16336				properties, err := unmarshalBasicProtectionIntent(*v)
16337				if err != nil {
16338					return err
16339				}
16340				pir.Properties = properties
16341			}
16342		case "id":
16343			if v != nil {
16344				var ID string
16345				err = json.Unmarshal(*v, &ID)
16346				if err != nil {
16347					return err
16348				}
16349				pir.ID = &ID
16350			}
16351		case "name":
16352			if v != nil {
16353				var name string
16354				err = json.Unmarshal(*v, &name)
16355				if err != nil {
16356					return err
16357				}
16358				pir.Name = &name
16359			}
16360		case "type":
16361			if v != nil {
16362				var typeVar string
16363				err = json.Unmarshal(*v, &typeVar)
16364				if err != nil {
16365					return err
16366				}
16367				pir.Type = &typeVar
16368			}
16369		case "location":
16370			if v != nil {
16371				var location string
16372				err = json.Unmarshal(*v, &location)
16373				if err != nil {
16374					return err
16375				}
16376				pir.Location = &location
16377			}
16378		case "tags":
16379			if v != nil {
16380				var tags map[string]*string
16381				err = json.Unmarshal(*v, &tags)
16382				if err != nil {
16383					return err
16384				}
16385				pir.Tags = tags
16386			}
16387		case "eTag":
16388			if v != nil {
16389				var eTag string
16390				err = json.Unmarshal(*v, &eTag)
16391				if err != nil {
16392					return err
16393				}
16394				pir.ETag = &eTag
16395			}
16396		}
16397	}
16398
16399	return nil
16400}
16401
16402// ProtectionIntentResourceList list of ProtectionIntent resources
16403type ProtectionIntentResourceList struct {
16404	autorest.Response `json:"-"`
16405	// Value - List of resources.
16406	Value *[]ProtectionIntentResource `json:"value,omitempty"`
16407	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
16408	NextLink *string `json:"nextLink,omitempty"`
16409}
16410
16411// ProtectionIntentResourceListIterator provides access to a complete listing of ProtectionIntentResource
16412// values.
16413type ProtectionIntentResourceListIterator struct {
16414	i    int
16415	page ProtectionIntentResourceListPage
16416}
16417
16418// NextWithContext advances to the next value.  If there was an error making
16419// the request the iterator does not advance and the error is returned.
16420func (iter *ProtectionIntentResourceListIterator) NextWithContext(ctx context.Context) (err error) {
16421	if tracing.IsEnabled() {
16422		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionIntentResourceListIterator.NextWithContext")
16423		defer func() {
16424			sc := -1
16425			if iter.Response().Response.Response != nil {
16426				sc = iter.Response().Response.Response.StatusCode
16427			}
16428			tracing.EndSpan(ctx, sc, err)
16429		}()
16430	}
16431	iter.i++
16432	if iter.i < len(iter.page.Values()) {
16433		return nil
16434	}
16435	err = iter.page.NextWithContext(ctx)
16436	if err != nil {
16437		iter.i--
16438		return err
16439	}
16440	iter.i = 0
16441	return nil
16442}
16443
16444// Next advances to the next value.  If there was an error making
16445// the request the iterator does not advance and the error is returned.
16446// Deprecated: Use NextWithContext() instead.
16447func (iter *ProtectionIntentResourceListIterator) Next() error {
16448	return iter.NextWithContext(context.Background())
16449}
16450
16451// NotDone returns true if the enumeration should be started or is not yet complete.
16452func (iter ProtectionIntentResourceListIterator) NotDone() bool {
16453	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16454}
16455
16456// Response returns the raw server response from the last page request.
16457func (iter ProtectionIntentResourceListIterator) Response() ProtectionIntentResourceList {
16458	return iter.page.Response()
16459}
16460
16461// Value returns the current value or a zero-initialized value if the
16462// iterator has advanced beyond the end of the collection.
16463func (iter ProtectionIntentResourceListIterator) Value() ProtectionIntentResource {
16464	if !iter.page.NotDone() {
16465		return ProtectionIntentResource{}
16466	}
16467	return iter.page.Values()[iter.i]
16468}
16469
16470// Creates a new instance of the ProtectionIntentResourceListIterator type.
16471func NewProtectionIntentResourceListIterator(page ProtectionIntentResourceListPage) ProtectionIntentResourceListIterator {
16472	return ProtectionIntentResourceListIterator{page: page}
16473}
16474
16475// IsEmpty returns true if the ListResult contains no values.
16476func (pirl ProtectionIntentResourceList) IsEmpty() bool {
16477	return pirl.Value == nil || len(*pirl.Value) == 0
16478}
16479
16480// hasNextLink returns true if the NextLink is not empty.
16481func (pirl ProtectionIntentResourceList) hasNextLink() bool {
16482	return pirl.NextLink != nil && len(*pirl.NextLink) != 0
16483}
16484
16485// protectionIntentResourceListPreparer prepares a request to retrieve the next set of results.
16486// It returns nil if no more results exist.
16487func (pirl ProtectionIntentResourceList) protectionIntentResourceListPreparer(ctx context.Context) (*http.Request, error) {
16488	if !pirl.hasNextLink() {
16489		return nil, nil
16490	}
16491	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16492		autorest.AsJSON(),
16493		autorest.AsGet(),
16494		autorest.WithBaseURL(to.String(pirl.NextLink)))
16495}
16496
16497// ProtectionIntentResourceListPage contains a page of ProtectionIntentResource values.
16498type ProtectionIntentResourceListPage struct {
16499	fn   func(context.Context, ProtectionIntentResourceList) (ProtectionIntentResourceList, error)
16500	pirl ProtectionIntentResourceList
16501}
16502
16503// NextWithContext advances to the next page of values.  If there was an error making
16504// the request the page does not advance and the error is returned.
16505func (page *ProtectionIntentResourceListPage) NextWithContext(ctx context.Context) (err error) {
16506	if tracing.IsEnabled() {
16507		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionIntentResourceListPage.NextWithContext")
16508		defer func() {
16509			sc := -1
16510			if page.Response().Response.Response != nil {
16511				sc = page.Response().Response.Response.StatusCode
16512			}
16513			tracing.EndSpan(ctx, sc, err)
16514		}()
16515	}
16516	for {
16517		next, err := page.fn(ctx, page.pirl)
16518		if err != nil {
16519			return err
16520		}
16521		page.pirl = next
16522		if !next.hasNextLink() || !next.IsEmpty() {
16523			break
16524		}
16525	}
16526	return nil
16527}
16528
16529// Next advances to the next page of values.  If there was an error making
16530// the request the page does not advance and the error is returned.
16531// Deprecated: Use NextWithContext() instead.
16532func (page *ProtectionIntentResourceListPage) Next() error {
16533	return page.NextWithContext(context.Background())
16534}
16535
16536// NotDone returns true if the page enumeration should be started or is not yet complete.
16537func (page ProtectionIntentResourceListPage) NotDone() bool {
16538	return !page.pirl.IsEmpty()
16539}
16540
16541// Response returns the raw server response from the last page request.
16542func (page ProtectionIntentResourceListPage) Response() ProtectionIntentResourceList {
16543	return page.pirl
16544}
16545
16546// Values returns the slice of values for the current page or nil if there are no values.
16547func (page ProtectionIntentResourceListPage) Values() []ProtectionIntentResource {
16548	if page.pirl.IsEmpty() {
16549		return nil
16550	}
16551	return *page.pirl.Value
16552}
16553
16554// Creates a new instance of the ProtectionIntentResourceListPage type.
16555func NewProtectionIntentResourceListPage(cur ProtectionIntentResourceList, getNextPage func(context.Context, ProtectionIntentResourceList) (ProtectionIntentResourceList, error)) ProtectionIntentResourceListPage {
16556	return ProtectionIntentResourceListPage{
16557		fn:   getNextPage,
16558		pirl: cur,
16559	}
16560}
16561
16562// BasicProtectionPolicy base class for backup policy. Workload-specific backup policies are derived from this class.
16563type BasicProtectionPolicy interface {
16564	AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool)
16565	AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool)
16566	AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool)
16567	AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool)
16568	AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool)
16569	AsMabProtectionPolicy() (*MabProtectionPolicy, bool)
16570	AsProtectionPolicy() (*ProtectionPolicy, bool)
16571}
16572
16573// ProtectionPolicy base class for backup policy. Workload-specific backup policies are derived from this
16574// class.
16575type ProtectionPolicy struct {
16576	// ProtectedItemsCount - Number of items associated with this policy.
16577	ProtectedItemsCount *int32 `json:"protectedItemsCount,omitempty"`
16578	// BackupManagementType - Possible values include: 'BackupManagementTypeProtectionPolicy', 'BackupManagementTypeAzureWorkload', 'BackupManagementTypeAzureStorage', 'BackupManagementTypeAzureIaasVM', 'BackupManagementTypeAzureSQL', 'BackupManagementTypeGenericProtectionPolicy', 'BackupManagementTypeMAB'
16579	BackupManagementType ManagementTypeBasicProtectionPolicy `json:"backupManagementType,omitempty"`
16580}
16581
16582func unmarshalBasicProtectionPolicy(body []byte) (BasicProtectionPolicy, error) {
16583	var m map[string]interface{}
16584	err := json.Unmarshal(body, &m)
16585	if err != nil {
16586		return nil, err
16587	}
16588
16589	switch m["backupManagementType"] {
16590	case string(BackupManagementTypeAzureWorkload):
16591		var avwpp AzureVMWorkloadProtectionPolicy
16592		err := json.Unmarshal(body, &avwpp)
16593		return avwpp, err
16594	case string(BackupManagementTypeAzureStorage):
16595		var afspp AzureFileShareProtectionPolicy
16596		err := json.Unmarshal(body, &afspp)
16597		return afspp, err
16598	case string(BackupManagementTypeAzureIaasVM):
16599		var aispp AzureIaaSVMProtectionPolicy
16600		err := json.Unmarshal(body, &aispp)
16601		return aispp, err
16602	case string(BackupManagementTypeAzureSQL):
16603		var aspp AzureSQLProtectionPolicy
16604		err := json.Unmarshal(body, &aspp)
16605		return aspp, err
16606	case string(BackupManagementTypeGenericProtectionPolicy):
16607		var gpp GenericProtectionPolicy
16608		err := json.Unmarshal(body, &gpp)
16609		return gpp, err
16610	case string(BackupManagementTypeMAB):
16611		var mpp MabProtectionPolicy
16612		err := json.Unmarshal(body, &mpp)
16613		return mpp, err
16614	default:
16615		var pp ProtectionPolicy
16616		err := json.Unmarshal(body, &pp)
16617		return pp, err
16618	}
16619}
16620func unmarshalBasicProtectionPolicyArray(body []byte) ([]BasicProtectionPolicy, error) {
16621	var rawMessages []*json.RawMessage
16622	err := json.Unmarshal(body, &rawMessages)
16623	if err != nil {
16624		return nil, err
16625	}
16626
16627	ppArray := make([]BasicProtectionPolicy, len(rawMessages))
16628
16629	for index, rawMessage := range rawMessages {
16630		pp, err := unmarshalBasicProtectionPolicy(*rawMessage)
16631		if err != nil {
16632			return nil, err
16633		}
16634		ppArray[index] = pp
16635	}
16636	return ppArray, nil
16637}
16638
16639// MarshalJSON is the custom marshaler for ProtectionPolicy.
16640func (pp ProtectionPolicy) MarshalJSON() ([]byte, error) {
16641	pp.BackupManagementType = BackupManagementTypeProtectionPolicy
16642	objectMap := make(map[string]interface{})
16643	if pp.ProtectedItemsCount != nil {
16644		objectMap["protectedItemsCount"] = pp.ProtectedItemsCount
16645	}
16646	if pp.BackupManagementType != "" {
16647		objectMap["backupManagementType"] = pp.BackupManagementType
16648	}
16649	return json.Marshal(objectMap)
16650}
16651
16652// AsAzureVMWorkloadProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16653func (pp ProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
16654	return nil, false
16655}
16656
16657// AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16658func (pp ProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
16659	return nil, false
16660}
16661
16662// AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16663func (pp ProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
16664	return nil, false
16665}
16666
16667// AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16668func (pp ProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
16669	return nil, false
16670}
16671
16672// AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16673func (pp ProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
16674	return nil, false
16675}
16676
16677// AsMabProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16678func (pp ProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
16679	return nil, false
16680}
16681
16682// AsProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16683func (pp ProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
16684	return &pp, true
16685}
16686
16687// AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
16688func (pp ProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
16689	return &pp, true
16690}
16691
16692// ProtectionPolicyQueryObject filters the list backup policies API.
16693type ProtectionPolicyQueryObject struct {
16694	// BackupManagementType - Backup management type for the backup policy. Possible values include: 'ManagementTypeInvalid', 'ManagementTypeAzureIaasVM', 'ManagementTypeMAB', 'ManagementTypeDPM', 'ManagementTypeAzureBackupServer', 'ManagementTypeAzureSQL', 'ManagementTypeAzureStorage', 'ManagementTypeAzureWorkload', 'ManagementTypeDefaultBackup'
16695	BackupManagementType ManagementType `json:"backupManagementType,omitempty"`
16696	// FabricName - Fabric name for filter
16697	FabricName *string `json:"fabricName,omitempty"`
16698	// WorkloadType - Workload type for the backup policy. Possible values include: 'WorkloadTypeInvalid', 'WorkloadTypeVM', 'WorkloadTypeFileFolder', 'WorkloadTypeAzureSQLDb', 'WorkloadTypeSQLDB', 'WorkloadTypeExchange', 'WorkloadTypeSharepoint', 'WorkloadTypeVMwareVM', 'WorkloadTypeSystemState', 'WorkloadTypeClient', 'WorkloadTypeGenericDataSource', 'WorkloadTypeSQLDataBase', 'WorkloadTypeAzureFileShare', 'WorkloadTypeSAPHanaDatabase', 'WorkloadTypeSAPAseDatabase'
16699	WorkloadType WorkloadType `json:"workloadType,omitempty"`
16700}
16701
16702// ProtectionPolicyResource base class for backup policy. Workload-specific backup policies are derived
16703// from this class.
16704type ProtectionPolicyResource struct {
16705	autorest.Response `json:"-"`
16706	// Properties - ProtectionPolicyResource properties
16707	Properties BasicProtectionPolicy `json:"properties,omitempty"`
16708	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
16709	ID *string `json:"id,omitempty"`
16710	// Name - READ-ONLY; Resource name associated with the resource.
16711	Name *string `json:"name,omitempty"`
16712	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
16713	Type *string `json:"type,omitempty"`
16714	// Location - Resource location.
16715	Location *string `json:"location,omitempty"`
16716	// Tags - Resource tags.
16717	Tags map[string]*string `json:"tags"`
16718	// ETag - Optional ETag.
16719	ETag *string `json:"eTag,omitempty"`
16720}
16721
16722// MarshalJSON is the custom marshaler for ProtectionPolicyResource.
16723func (ppr ProtectionPolicyResource) MarshalJSON() ([]byte, error) {
16724	objectMap := make(map[string]interface{})
16725	objectMap["properties"] = ppr.Properties
16726	if ppr.Location != nil {
16727		objectMap["location"] = ppr.Location
16728	}
16729	if ppr.Tags != nil {
16730		objectMap["tags"] = ppr.Tags
16731	}
16732	if ppr.ETag != nil {
16733		objectMap["eTag"] = ppr.ETag
16734	}
16735	return json.Marshal(objectMap)
16736}
16737
16738// UnmarshalJSON is the custom unmarshaler for ProtectionPolicyResource struct.
16739func (ppr *ProtectionPolicyResource) UnmarshalJSON(body []byte) error {
16740	var m map[string]*json.RawMessage
16741	err := json.Unmarshal(body, &m)
16742	if err != nil {
16743		return err
16744	}
16745	for k, v := range m {
16746		switch k {
16747		case "properties":
16748			if v != nil {
16749				properties, err := unmarshalBasicProtectionPolicy(*v)
16750				if err != nil {
16751					return err
16752				}
16753				ppr.Properties = properties
16754			}
16755		case "id":
16756			if v != nil {
16757				var ID string
16758				err = json.Unmarshal(*v, &ID)
16759				if err != nil {
16760					return err
16761				}
16762				ppr.ID = &ID
16763			}
16764		case "name":
16765			if v != nil {
16766				var name string
16767				err = json.Unmarshal(*v, &name)
16768				if err != nil {
16769					return err
16770				}
16771				ppr.Name = &name
16772			}
16773		case "type":
16774			if v != nil {
16775				var typeVar string
16776				err = json.Unmarshal(*v, &typeVar)
16777				if err != nil {
16778					return err
16779				}
16780				ppr.Type = &typeVar
16781			}
16782		case "location":
16783			if v != nil {
16784				var location string
16785				err = json.Unmarshal(*v, &location)
16786				if err != nil {
16787					return err
16788				}
16789				ppr.Location = &location
16790			}
16791		case "tags":
16792			if v != nil {
16793				var tags map[string]*string
16794				err = json.Unmarshal(*v, &tags)
16795				if err != nil {
16796					return err
16797				}
16798				ppr.Tags = tags
16799			}
16800		case "eTag":
16801			if v != nil {
16802				var eTag string
16803				err = json.Unmarshal(*v, &eTag)
16804				if err != nil {
16805					return err
16806				}
16807				ppr.ETag = &eTag
16808			}
16809		}
16810	}
16811
16812	return nil
16813}
16814
16815// ProtectionPolicyResourceList list of ProtectionPolicy resources
16816type ProtectionPolicyResourceList struct {
16817	autorest.Response `json:"-"`
16818	// Value - List of resources.
16819	Value *[]ProtectionPolicyResource `json:"value,omitempty"`
16820	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
16821	NextLink *string `json:"nextLink,omitempty"`
16822}
16823
16824// ProtectionPolicyResourceListIterator provides access to a complete listing of ProtectionPolicyResource
16825// values.
16826type ProtectionPolicyResourceListIterator struct {
16827	i    int
16828	page ProtectionPolicyResourceListPage
16829}
16830
16831// NextWithContext advances to the next value.  If there was an error making
16832// the request the iterator does not advance and the error is returned.
16833func (iter *ProtectionPolicyResourceListIterator) NextWithContext(ctx context.Context) (err error) {
16834	if tracing.IsEnabled() {
16835		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionPolicyResourceListIterator.NextWithContext")
16836		defer func() {
16837			sc := -1
16838			if iter.Response().Response.Response != nil {
16839				sc = iter.Response().Response.Response.StatusCode
16840			}
16841			tracing.EndSpan(ctx, sc, err)
16842		}()
16843	}
16844	iter.i++
16845	if iter.i < len(iter.page.Values()) {
16846		return nil
16847	}
16848	err = iter.page.NextWithContext(ctx)
16849	if err != nil {
16850		iter.i--
16851		return err
16852	}
16853	iter.i = 0
16854	return nil
16855}
16856
16857// Next advances to the next value.  If there was an error making
16858// the request the iterator does not advance and the error is returned.
16859// Deprecated: Use NextWithContext() instead.
16860func (iter *ProtectionPolicyResourceListIterator) Next() error {
16861	return iter.NextWithContext(context.Background())
16862}
16863
16864// NotDone returns true if the enumeration should be started or is not yet complete.
16865func (iter ProtectionPolicyResourceListIterator) NotDone() bool {
16866	return iter.page.NotDone() && iter.i < len(iter.page.Values())
16867}
16868
16869// Response returns the raw server response from the last page request.
16870func (iter ProtectionPolicyResourceListIterator) Response() ProtectionPolicyResourceList {
16871	return iter.page.Response()
16872}
16873
16874// Value returns the current value or a zero-initialized value if the
16875// iterator has advanced beyond the end of the collection.
16876func (iter ProtectionPolicyResourceListIterator) Value() ProtectionPolicyResource {
16877	if !iter.page.NotDone() {
16878		return ProtectionPolicyResource{}
16879	}
16880	return iter.page.Values()[iter.i]
16881}
16882
16883// Creates a new instance of the ProtectionPolicyResourceListIterator type.
16884func NewProtectionPolicyResourceListIterator(page ProtectionPolicyResourceListPage) ProtectionPolicyResourceListIterator {
16885	return ProtectionPolicyResourceListIterator{page: page}
16886}
16887
16888// IsEmpty returns true if the ListResult contains no values.
16889func (pprl ProtectionPolicyResourceList) IsEmpty() bool {
16890	return pprl.Value == nil || len(*pprl.Value) == 0
16891}
16892
16893// hasNextLink returns true if the NextLink is not empty.
16894func (pprl ProtectionPolicyResourceList) hasNextLink() bool {
16895	return pprl.NextLink != nil && len(*pprl.NextLink) != 0
16896}
16897
16898// protectionPolicyResourceListPreparer prepares a request to retrieve the next set of results.
16899// It returns nil if no more results exist.
16900func (pprl ProtectionPolicyResourceList) protectionPolicyResourceListPreparer(ctx context.Context) (*http.Request, error) {
16901	if !pprl.hasNextLink() {
16902		return nil, nil
16903	}
16904	return autorest.Prepare((&http.Request{}).WithContext(ctx),
16905		autorest.AsJSON(),
16906		autorest.AsGet(),
16907		autorest.WithBaseURL(to.String(pprl.NextLink)))
16908}
16909
16910// ProtectionPolicyResourceListPage contains a page of ProtectionPolicyResource values.
16911type ProtectionPolicyResourceListPage struct {
16912	fn   func(context.Context, ProtectionPolicyResourceList) (ProtectionPolicyResourceList, error)
16913	pprl ProtectionPolicyResourceList
16914}
16915
16916// NextWithContext advances to the next page of values.  If there was an error making
16917// the request the page does not advance and the error is returned.
16918func (page *ProtectionPolicyResourceListPage) NextWithContext(ctx context.Context) (err error) {
16919	if tracing.IsEnabled() {
16920		ctx = tracing.StartSpan(ctx, fqdn+"/ProtectionPolicyResourceListPage.NextWithContext")
16921		defer func() {
16922			sc := -1
16923			if page.Response().Response.Response != nil {
16924				sc = page.Response().Response.Response.StatusCode
16925			}
16926			tracing.EndSpan(ctx, sc, err)
16927		}()
16928	}
16929	for {
16930		next, err := page.fn(ctx, page.pprl)
16931		if err != nil {
16932			return err
16933		}
16934		page.pprl = next
16935		if !next.hasNextLink() || !next.IsEmpty() {
16936			break
16937		}
16938	}
16939	return nil
16940}
16941
16942// Next advances to the next page of values.  If there was an error making
16943// the request the page does not advance and the error is returned.
16944// Deprecated: Use NextWithContext() instead.
16945func (page *ProtectionPolicyResourceListPage) Next() error {
16946	return page.NextWithContext(context.Background())
16947}
16948
16949// NotDone returns true if the page enumeration should be started or is not yet complete.
16950func (page ProtectionPolicyResourceListPage) NotDone() bool {
16951	return !page.pprl.IsEmpty()
16952}
16953
16954// Response returns the raw server response from the last page request.
16955func (page ProtectionPolicyResourceListPage) Response() ProtectionPolicyResourceList {
16956	return page.pprl
16957}
16958
16959// Values returns the slice of values for the current page or nil if there are no values.
16960func (page ProtectionPolicyResourceListPage) Values() []ProtectionPolicyResource {
16961	if page.pprl.IsEmpty() {
16962		return nil
16963	}
16964	return *page.pprl.Value
16965}
16966
16967// Creates a new instance of the ProtectionPolicyResourceListPage type.
16968func NewProtectionPolicyResourceListPage(cur ProtectionPolicyResourceList, getNextPage func(context.Context, ProtectionPolicyResourceList) (ProtectionPolicyResourceList, error)) ProtectionPolicyResourceListPage {
16969	return ProtectionPolicyResourceListPage{
16970		fn:   getNextPage,
16971		pprl: cur,
16972	}
16973}
16974
16975// BasicRecoveryPoint base class for backup copies. Workload-specific backup copies are derived from this class.
16976type BasicRecoveryPoint interface {
16977	AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool)
16978	AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool)
16979	AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool)
16980	AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool)
16981	AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool)
16982	AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool)
16983	AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool)
16984	AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool)
16985	AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool)
16986	AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool)
16987	AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool)
16988	AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool)
16989	AsRecoveryPoint() (*RecoveryPoint, bool)
16990}
16991
16992// RecoveryPoint base class for backup copies. Workload-specific backup copies are derived from this class.
16993type RecoveryPoint struct {
16994	// ObjectType - Possible values include: 'ObjectTypeRecoveryPoint', 'ObjectTypeAzureFileShareRecoveryPoint', 'ObjectTypeAzureWorkloadPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSAPHanaRecoveryPoint', 'ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint', 'ObjectTypeAzureWorkloadSQLRecoveryPoint', 'ObjectTypeGenericRecoveryPoint', 'ObjectTypeIaasVMRecoveryPoint'
16995	ObjectType ObjectTypeBasicRecoveryPoint `json:"objectType,omitempty"`
16996}
16997
16998func unmarshalBasicRecoveryPoint(body []byte) (BasicRecoveryPoint, error) {
16999	var m map[string]interface{}
17000	err := json.Unmarshal(body, &m)
17001	if err != nil {
17002		return nil, err
17003	}
17004
17005	switch m["objectType"] {
17006	case string(ObjectTypeAzureFileShareRecoveryPoint):
17007		var afsrp AzureFileShareRecoveryPoint
17008		err := json.Unmarshal(body, &afsrp)
17009		return afsrp, err
17010	case string(ObjectTypeAzureWorkloadPointInTimeRecoveryPoint):
17011		var awpitrp AzureWorkloadPointInTimeRecoveryPoint
17012		err := json.Unmarshal(body, &awpitrp)
17013		return awpitrp, err
17014	case string(ObjectTypeAzureWorkloadRecoveryPoint):
17015		var awrp AzureWorkloadRecoveryPoint
17016		err := json.Unmarshal(body, &awrp)
17017		return awrp, err
17018	case string(ObjectTypeAzureWorkloadSAPHanaPointInTimeRecoveryPoint):
17019		var awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint
17020		err := json.Unmarshal(body, &awshpitrp)
17021		return awshpitrp, err
17022	case string(ObjectTypeAzureWorkloadSAPHanaRecoveryPoint):
17023		var awshrp AzureWorkloadSAPHanaRecoveryPoint
17024		err := json.Unmarshal(body, &awshrp)
17025		return awshrp, err
17026	case string(ObjectTypeAzureWorkloadSQLPointInTimeRecoveryPoint):
17027		var awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint
17028		err := json.Unmarshal(body, &awspitrp)
17029		return awspitrp, err
17030	case string(ObjectTypeAzureWorkloadSQLRecoveryPoint):
17031		var awsrp AzureWorkloadSQLRecoveryPoint
17032		err := json.Unmarshal(body, &awsrp)
17033		return awsrp, err
17034	case string(ObjectTypeGenericRecoveryPoint):
17035		var grp GenericRecoveryPoint
17036		err := json.Unmarshal(body, &grp)
17037		return grp, err
17038	case string(ObjectTypeIaasVMRecoveryPoint):
17039		var ivrp IaasVMRecoveryPoint
17040		err := json.Unmarshal(body, &ivrp)
17041		return ivrp, err
17042	default:
17043		var rp RecoveryPoint
17044		err := json.Unmarshal(body, &rp)
17045		return rp, err
17046	}
17047}
17048func unmarshalBasicRecoveryPointArray(body []byte) ([]BasicRecoveryPoint, error) {
17049	var rawMessages []*json.RawMessage
17050	err := json.Unmarshal(body, &rawMessages)
17051	if err != nil {
17052		return nil, err
17053	}
17054
17055	rpArray := make([]BasicRecoveryPoint, len(rawMessages))
17056
17057	for index, rawMessage := range rawMessages {
17058		rp, err := unmarshalBasicRecoveryPoint(*rawMessage)
17059		if err != nil {
17060			return nil, err
17061		}
17062		rpArray[index] = rp
17063	}
17064	return rpArray, nil
17065}
17066
17067// MarshalJSON is the custom marshaler for RecoveryPoint.
17068func (rp RecoveryPoint) MarshalJSON() ([]byte, error) {
17069	rp.ObjectType = ObjectTypeRecoveryPoint
17070	objectMap := make(map[string]interface{})
17071	if rp.ObjectType != "" {
17072		objectMap["objectType"] = rp.ObjectType
17073	}
17074	return json.Marshal(objectMap)
17075}
17076
17077// AsAzureFileShareRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17078func (rp RecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
17079	return nil, false
17080}
17081
17082// AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17083func (rp RecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
17084	return nil, false
17085}
17086
17087// AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17088func (rp RecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
17089	return nil, false
17090}
17091
17092// AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17093func (rp RecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
17094	return nil, false
17095}
17096
17097// AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17098func (rp RecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
17099	return nil, false
17100}
17101
17102// AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17103func (rp RecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
17104	return nil, false
17105}
17106
17107// AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17108func (rp RecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
17109	return nil, false
17110}
17111
17112// AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17113func (rp RecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
17114	return nil, false
17115}
17116
17117// AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17118func (rp RecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
17119	return nil, false
17120}
17121
17122// AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17123func (rp RecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
17124	return nil, false
17125}
17126
17127// AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17128func (rp RecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
17129	return nil, false
17130}
17131
17132// AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17133func (rp RecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
17134	return nil, false
17135}
17136
17137// AsRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17138func (rp RecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
17139	return &rp, true
17140}
17141
17142// AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
17143func (rp RecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
17144	return &rp, true
17145}
17146
17147// RecoveryPointDiskConfiguration disk configuration
17148type RecoveryPointDiskConfiguration struct {
17149	// NumberOfDisksIncludedInBackup - Number of disks included in backup
17150	NumberOfDisksIncludedInBackup *int32 `json:"numberOfDisksIncludedInBackup,omitempty"`
17151	// NumberOfDisksAttachedToVM - Number of disks attached to the VM
17152	NumberOfDisksAttachedToVM *int32 `json:"numberOfDisksAttachedToVm,omitempty"`
17153	// IncludedDiskList - Information of disks included in backup
17154	IncludedDiskList *[]DiskInformation `json:"includedDiskList,omitempty"`
17155	// ExcludedDiskList - Information of disks excluded from backup
17156	ExcludedDiskList *[]DiskInformation `json:"excludedDiskList,omitempty"`
17157}
17158
17159// RecoveryPointResource base class for backup copies. Workload-specific backup copies are derived from
17160// this class.
17161type RecoveryPointResource struct {
17162	autorest.Response `json:"-"`
17163	// Properties - RecoveryPointResource properties
17164	Properties BasicRecoveryPoint `json:"properties,omitempty"`
17165	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
17166	ID *string `json:"id,omitempty"`
17167	// Name - READ-ONLY; Resource name associated with the resource.
17168	Name *string `json:"name,omitempty"`
17169	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
17170	Type *string `json:"type,omitempty"`
17171	// Location - Resource location.
17172	Location *string `json:"location,omitempty"`
17173	// Tags - Resource tags.
17174	Tags map[string]*string `json:"tags"`
17175	// ETag - Optional ETag.
17176	ETag *string `json:"eTag,omitempty"`
17177}
17178
17179// MarshalJSON is the custom marshaler for RecoveryPointResource.
17180func (rpr RecoveryPointResource) MarshalJSON() ([]byte, error) {
17181	objectMap := make(map[string]interface{})
17182	objectMap["properties"] = rpr.Properties
17183	if rpr.Location != nil {
17184		objectMap["location"] = rpr.Location
17185	}
17186	if rpr.Tags != nil {
17187		objectMap["tags"] = rpr.Tags
17188	}
17189	if rpr.ETag != nil {
17190		objectMap["eTag"] = rpr.ETag
17191	}
17192	return json.Marshal(objectMap)
17193}
17194
17195// UnmarshalJSON is the custom unmarshaler for RecoveryPointResource struct.
17196func (rpr *RecoveryPointResource) UnmarshalJSON(body []byte) error {
17197	var m map[string]*json.RawMessage
17198	err := json.Unmarshal(body, &m)
17199	if err != nil {
17200		return err
17201	}
17202	for k, v := range m {
17203		switch k {
17204		case "properties":
17205			if v != nil {
17206				properties, err := unmarshalBasicRecoveryPoint(*v)
17207				if err != nil {
17208					return err
17209				}
17210				rpr.Properties = properties
17211			}
17212		case "id":
17213			if v != nil {
17214				var ID string
17215				err = json.Unmarshal(*v, &ID)
17216				if err != nil {
17217					return err
17218				}
17219				rpr.ID = &ID
17220			}
17221		case "name":
17222			if v != nil {
17223				var name string
17224				err = json.Unmarshal(*v, &name)
17225				if err != nil {
17226					return err
17227				}
17228				rpr.Name = &name
17229			}
17230		case "type":
17231			if v != nil {
17232				var typeVar string
17233				err = json.Unmarshal(*v, &typeVar)
17234				if err != nil {
17235					return err
17236				}
17237				rpr.Type = &typeVar
17238			}
17239		case "location":
17240			if v != nil {
17241				var location string
17242				err = json.Unmarshal(*v, &location)
17243				if err != nil {
17244					return err
17245				}
17246				rpr.Location = &location
17247			}
17248		case "tags":
17249			if v != nil {
17250				var tags map[string]*string
17251				err = json.Unmarshal(*v, &tags)
17252				if err != nil {
17253					return err
17254				}
17255				rpr.Tags = tags
17256			}
17257		case "eTag":
17258			if v != nil {
17259				var eTag string
17260				err = json.Unmarshal(*v, &eTag)
17261				if err != nil {
17262					return err
17263				}
17264				rpr.ETag = &eTag
17265			}
17266		}
17267	}
17268
17269	return nil
17270}
17271
17272// RecoveryPointResourceList list of RecoveryPoint resources
17273type RecoveryPointResourceList struct {
17274	autorest.Response `json:"-"`
17275	// Value - List of resources.
17276	Value *[]RecoveryPointResource `json:"value,omitempty"`
17277	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
17278	NextLink *string `json:"nextLink,omitempty"`
17279}
17280
17281// RecoveryPointResourceListIterator provides access to a complete listing of RecoveryPointResource values.
17282type RecoveryPointResourceListIterator struct {
17283	i    int
17284	page RecoveryPointResourceListPage
17285}
17286
17287// NextWithContext advances to the next value.  If there was an error making
17288// the request the iterator does not advance and the error is returned.
17289func (iter *RecoveryPointResourceListIterator) NextWithContext(ctx context.Context) (err error) {
17290	if tracing.IsEnabled() {
17291		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointResourceListIterator.NextWithContext")
17292		defer func() {
17293			sc := -1
17294			if iter.Response().Response.Response != nil {
17295				sc = iter.Response().Response.Response.StatusCode
17296			}
17297			tracing.EndSpan(ctx, sc, err)
17298		}()
17299	}
17300	iter.i++
17301	if iter.i < len(iter.page.Values()) {
17302		return nil
17303	}
17304	err = iter.page.NextWithContext(ctx)
17305	if err != nil {
17306		iter.i--
17307		return err
17308	}
17309	iter.i = 0
17310	return nil
17311}
17312
17313// Next advances to the next value.  If there was an error making
17314// the request the iterator does not advance and the error is returned.
17315// Deprecated: Use NextWithContext() instead.
17316func (iter *RecoveryPointResourceListIterator) Next() error {
17317	return iter.NextWithContext(context.Background())
17318}
17319
17320// NotDone returns true if the enumeration should be started or is not yet complete.
17321func (iter RecoveryPointResourceListIterator) NotDone() bool {
17322	return iter.page.NotDone() && iter.i < len(iter.page.Values())
17323}
17324
17325// Response returns the raw server response from the last page request.
17326func (iter RecoveryPointResourceListIterator) Response() RecoveryPointResourceList {
17327	return iter.page.Response()
17328}
17329
17330// Value returns the current value or a zero-initialized value if the
17331// iterator has advanced beyond the end of the collection.
17332func (iter RecoveryPointResourceListIterator) Value() RecoveryPointResource {
17333	if !iter.page.NotDone() {
17334		return RecoveryPointResource{}
17335	}
17336	return iter.page.Values()[iter.i]
17337}
17338
17339// Creates a new instance of the RecoveryPointResourceListIterator type.
17340func NewRecoveryPointResourceListIterator(page RecoveryPointResourceListPage) RecoveryPointResourceListIterator {
17341	return RecoveryPointResourceListIterator{page: page}
17342}
17343
17344// IsEmpty returns true if the ListResult contains no values.
17345func (rprl RecoveryPointResourceList) IsEmpty() bool {
17346	return rprl.Value == nil || len(*rprl.Value) == 0
17347}
17348
17349// hasNextLink returns true if the NextLink is not empty.
17350func (rprl RecoveryPointResourceList) hasNextLink() bool {
17351	return rprl.NextLink != nil && len(*rprl.NextLink) != 0
17352}
17353
17354// recoveryPointResourceListPreparer prepares a request to retrieve the next set of results.
17355// It returns nil if no more results exist.
17356func (rprl RecoveryPointResourceList) recoveryPointResourceListPreparer(ctx context.Context) (*http.Request, error) {
17357	if !rprl.hasNextLink() {
17358		return nil, nil
17359	}
17360	return autorest.Prepare((&http.Request{}).WithContext(ctx),
17361		autorest.AsJSON(),
17362		autorest.AsGet(),
17363		autorest.WithBaseURL(to.String(rprl.NextLink)))
17364}
17365
17366// RecoveryPointResourceListPage contains a page of RecoveryPointResource values.
17367type RecoveryPointResourceListPage struct {
17368	fn   func(context.Context, RecoveryPointResourceList) (RecoveryPointResourceList, error)
17369	rprl RecoveryPointResourceList
17370}
17371
17372// NextWithContext advances to the next page of values.  If there was an error making
17373// the request the page does not advance and the error is returned.
17374func (page *RecoveryPointResourceListPage) NextWithContext(ctx context.Context) (err error) {
17375	if tracing.IsEnabled() {
17376		ctx = tracing.StartSpan(ctx, fqdn+"/RecoveryPointResourceListPage.NextWithContext")
17377		defer func() {
17378			sc := -1
17379			if page.Response().Response.Response != nil {
17380				sc = page.Response().Response.Response.StatusCode
17381			}
17382			tracing.EndSpan(ctx, sc, err)
17383		}()
17384	}
17385	for {
17386		next, err := page.fn(ctx, page.rprl)
17387		if err != nil {
17388			return err
17389		}
17390		page.rprl = next
17391		if !next.hasNextLink() || !next.IsEmpty() {
17392			break
17393		}
17394	}
17395	return nil
17396}
17397
17398// Next advances to the next page of values.  If there was an error making
17399// the request the page does not advance and the error is returned.
17400// Deprecated: Use NextWithContext() instead.
17401func (page *RecoveryPointResourceListPage) Next() error {
17402	return page.NextWithContext(context.Background())
17403}
17404
17405// NotDone returns true if the page enumeration should be started or is not yet complete.
17406func (page RecoveryPointResourceListPage) NotDone() bool {
17407	return !page.rprl.IsEmpty()
17408}
17409
17410// Response returns the raw server response from the last page request.
17411func (page RecoveryPointResourceListPage) Response() RecoveryPointResourceList {
17412	return page.rprl
17413}
17414
17415// Values returns the slice of values for the current page or nil if there are no values.
17416func (page RecoveryPointResourceListPage) Values() []RecoveryPointResource {
17417	if page.rprl.IsEmpty() {
17418		return nil
17419	}
17420	return *page.rprl.Value
17421}
17422
17423// Creates a new instance of the RecoveryPointResourceListPage type.
17424func NewRecoveryPointResourceListPage(cur RecoveryPointResourceList, getNextPage func(context.Context, RecoveryPointResourceList) (RecoveryPointResourceList, error)) RecoveryPointResourceListPage {
17425	return RecoveryPointResourceListPage{
17426		fn:   getNextPage,
17427		rprl: cur,
17428	}
17429}
17430
17431// RecoveryPointTierInformation recovery point tier information.
17432type RecoveryPointTierInformation struct {
17433	// Type - Recovery point tier type. Possible values include: 'RecoveryPointTierTypeInvalid', 'RecoveryPointTierTypeInstantRP', 'RecoveryPointTierTypeHardenedRP'
17434	Type RecoveryPointTierType `json:"type,omitempty"`
17435	// Status - Recovery point tier status. Possible values include: 'RecoveryPointTierStatusInvalid', 'RecoveryPointTierStatusValid', 'RecoveryPointTierStatusDisabled', 'RecoveryPointTierStatusDeleted'
17436	Status RecoveryPointTierStatus `json:"status,omitempty"`
17437}
17438
17439// BasicRequest base class for backup request. Workload-specific backup requests are derived from this class.
17440type BasicRequest interface {
17441	AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool)
17442	AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool)
17443	AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool)
17444	AsRequest() (*Request, bool)
17445}
17446
17447// Request base class for backup request. Workload-specific backup requests are derived from this class.
17448type Request struct {
17449	// ObjectType - Possible values include: 'ObjectTypeBackupRequest', 'ObjectTypeAzureFileShareBackupRequest', 'ObjectTypeAzureWorkloadBackupRequest', 'ObjectTypeIaasVMBackupRequest'
17450	ObjectType ObjectTypeBasicRequest `json:"objectType,omitempty"`
17451}
17452
17453func unmarshalBasicRequest(body []byte) (BasicRequest, error) {
17454	var m map[string]interface{}
17455	err := json.Unmarshal(body, &m)
17456	if err != nil {
17457		return nil, err
17458	}
17459
17460	switch m["objectType"] {
17461	case string(ObjectTypeAzureFileShareBackupRequest):
17462		var afsbr AzureFileShareBackupRequest
17463		err := json.Unmarshal(body, &afsbr)
17464		return afsbr, err
17465	case string(ObjectTypeAzureWorkloadBackupRequest):
17466		var awbr AzureWorkloadBackupRequest
17467		err := json.Unmarshal(body, &awbr)
17468		return awbr, err
17469	case string(ObjectTypeIaasVMBackupRequest):
17470		var ivbr IaasVMBackupRequest
17471		err := json.Unmarshal(body, &ivbr)
17472		return ivbr, err
17473	default:
17474		var r Request
17475		err := json.Unmarshal(body, &r)
17476		return r, err
17477	}
17478}
17479func unmarshalBasicRequestArray(body []byte) ([]BasicRequest, error) {
17480	var rawMessages []*json.RawMessage
17481	err := json.Unmarshal(body, &rawMessages)
17482	if err != nil {
17483		return nil, err
17484	}
17485
17486	rArray := make([]BasicRequest, len(rawMessages))
17487
17488	for index, rawMessage := range rawMessages {
17489		r, err := unmarshalBasicRequest(*rawMessage)
17490		if err != nil {
17491			return nil, err
17492		}
17493		rArray[index] = r
17494	}
17495	return rArray, nil
17496}
17497
17498// MarshalJSON is the custom marshaler for Request.
17499func (r Request) MarshalJSON() ([]byte, error) {
17500	r.ObjectType = ObjectTypeBackupRequest
17501	objectMap := make(map[string]interface{})
17502	if r.ObjectType != "" {
17503		objectMap["objectType"] = r.ObjectType
17504	}
17505	return json.Marshal(objectMap)
17506}
17507
17508// AsAzureFileShareBackupRequest is the BasicRequest implementation for Request.
17509func (r Request) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
17510	return nil, false
17511}
17512
17513// AsAzureWorkloadBackupRequest is the BasicRequest implementation for Request.
17514func (r Request) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
17515	return nil, false
17516}
17517
17518// AsIaasVMBackupRequest is the BasicRequest implementation for Request.
17519func (r Request) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
17520	return nil, false
17521}
17522
17523// AsRequest is the BasicRequest implementation for Request.
17524func (r Request) AsRequest() (*Request, bool) {
17525	return &r, true
17526}
17527
17528// AsBasicRequest is the BasicRequest implementation for Request.
17529func (r Request) AsBasicRequest() (BasicRequest, bool) {
17530	return &r, true
17531}
17532
17533// RequestResource base class for backup request. Workload-specific backup requests are derived from this
17534// class.
17535type RequestResource struct {
17536	// Properties - BackupRequestResource properties
17537	Properties BasicRequest `json:"properties,omitempty"`
17538	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
17539	ID *string `json:"id,omitempty"`
17540	// Name - READ-ONLY; Resource name associated with the resource.
17541	Name *string `json:"name,omitempty"`
17542	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
17543	Type *string `json:"type,omitempty"`
17544	// Location - Resource location.
17545	Location *string `json:"location,omitempty"`
17546	// Tags - Resource tags.
17547	Tags map[string]*string `json:"tags"`
17548	// ETag - Optional ETag.
17549	ETag *string `json:"eTag,omitempty"`
17550}
17551
17552// MarshalJSON is the custom marshaler for RequestResource.
17553func (rr RequestResource) MarshalJSON() ([]byte, error) {
17554	objectMap := make(map[string]interface{})
17555	objectMap["properties"] = rr.Properties
17556	if rr.Location != nil {
17557		objectMap["location"] = rr.Location
17558	}
17559	if rr.Tags != nil {
17560		objectMap["tags"] = rr.Tags
17561	}
17562	if rr.ETag != nil {
17563		objectMap["eTag"] = rr.ETag
17564	}
17565	return json.Marshal(objectMap)
17566}
17567
17568// UnmarshalJSON is the custom unmarshaler for RequestResource struct.
17569func (rr *RequestResource) UnmarshalJSON(body []byte) error {
17570	var m map[string]*json.RawMessage
17571	err := json.Unmarshal(body, &m)
17572	if err != nil {
17573		return err
17574	}
17575	for k, v := range m {
17576		switch k {
17577		case "properties":
17578			if v != nil {
17579				properties, err := unmarshalBasicRequest(*v)
17580				if err != nil {
17581					return err
17582				}
17583				rr.Properties = properties
17584			}
17585		case "id":
17586			if v != nil {
17587				var ID string
17588				err = json.Unmarshal(*v, &ID)
17589				if err != nil {
17590					return err
17591				}
17592				rr.ID = &ID
17593			}
17594		case "name":
17595			if v != nil {
17596				var name string
17597				err = json.Unmarshal(*v, &name)
17598				if err != nil {
17599					return err
17600				}
17601				rr.Name = &name
17602			}
17603		case "type":
17604			if v != nil {
17605				var typeVar string
17606				err = json.Unmarshal(*v, &typeVar)
17607				if err != nil {
17608					return err
17609				}
17610				rr.Type = &typeVar
17611			}
17612		case "location":
17613			if v != nil {
17614				var location string
17615				err = json.Unmarshal(*v, &location)
17616				if err != nil {
17617					return err
17618				}
17619				rr.Location = &location
17620			}
17621		case "tags":
17622			if v != nil {
17623				var tags map[string]*string
17624				err = json.Unmarshal(*v, &tags)
17625				if err != nil {
17626					return err
17627				}
17628				rr.Tags = tags
17629			}
17630		case "eTag":
17631			if v != nil {
17632				var eTag string
17633				err = json.Unmarshal(*v, &eTag)
17634				if err != nil {
17635					return err
17636				}
17637				rr.ETag = &eTag
17638			}
17639		}
17640	}
17641
17642	return nil
17643}
17644
17645// Resource ARM Resource.
17646type Resource struct {
17647	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
17648	ID *string `json:"id,omitempty"`
17649	// Name - READ-ONLY; Resource name associated with the resource.
17650	Name *string `json:"name,omitempty"`
17651	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
17652	Type *string `json:"type,omitempty"`
17653	// Location - Resource location.
17654	Location *string `json:"location,omitempty"`
17655	// Tags - Resource tags.
17656	Tags map[string]*string `json:"tags"`
17657	// ETag - Optional ETag.
17658	ETag *string `json:"eTag,omitempty"`
17659}
17660
17661// MarshalJSON is the custom marshaler for Resource.
17662func (r Resource) MarshalJSON() ([]byte, error) {
17663	objectMap := make(map[string]interface{})
17664	if r.Location != nil {
17665		objectMap["location"] = r.Location
17666	}
17667	if r.Tags != nil {
17668		objectMap["tags"] = r.Tags
17669	}
17670	if r.ETag != nil {
17671		objectMap["eTag"] = r.ETag
17672	}
17673	return json.Marshal(objectMap)
17674}
17675
17676// ResourceConfig the resource storage details.
17677type ResourceConfig struct {
17678	// StorageModelType - Storage type. Possible values include: 'StorageTypeInvalid', 'StorageTypeGeoRedundant', 'StorageTypeLocallyRedundant'
17679	StorageModelType StorageType `json:"storageModelType,omitempty"`
17680	// StorageType - Storage type. Possible values include: 'StorageTypeInvalid', 'StorageTypeGeoRedundant', 'StorageTypeLocallyRedundant'
17681	StorageType StorageType `json:"storageType,omitempty"`
17682	// StorageTypeState - Locked or Unlocked. Once a machine is registered against a resource, the storageTypeState is always Locked. Possible values include: 'StorageTypeStateInvalid', 'StorageTypeStateLocked', 'StorageTypeStateUnlocked'
17683	StorageTypeState StorageTypeState `json:"storageTypeState,omitempty"`
17684}
17685
17686// ResourceConfigResource the resource storage details.
17687type ResourceConfigResource struct {
17688	autorest.Response `json:"-"`
17689	// Properties - BackupResourceConfigResource properties
17690	Properties *ResourceConfig `json:"properties,omitempty"`
17691	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
17692	ID *string `json:"id,omitempty"`
17693	// Name - READ-ONLY; Resource name associated with the resource.
17694	Name *string `json:"name,omitempty"`
17695	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
17696	Type *string `json:"type,omitempty"`
17697	// Location - Resource location.
17698	Location *string `json:"location,omitempty"`
17699	// Tags - Resource tags.
17700	Tags map[string]*string `json:"tags"`
17701	// ETag - Optional ETag.
17702	ETag *string `json:"eTag,omitempty"`
17703}
17704
17705// MarshalJSON is the custom marshaler for ResourceConfigResource.
17706func (rcr ResourceConfigResource) MarshalJSON() ([]byte, error) {
17707	objectMap := make(map[string]interface{})
17708	if rcr.Properties != nil {
17709		objectMap["properties"] = rcr.Properties
17710	}
17711	if rcr.Location != nil {
17712		objectMap["location"] = rcr.Location
17713	}
17714	if rcr.Tags != nil {
17715		objectMap["tags"] = rcr.Tags
17716	}
17717	if rcr.ETag != nil {
17718		objectMap["eTag"] = rcr.ETag
17719	}
17720	return json.Marshal(objectMap)
17721}
17722
17723// ResourceHealthDetails health Details for backup items.
17724type ResourceHealthDetails struct {
17725	// Code - READ-ONLY; Health Code
17726	Code *int32 `json:"code,omitempty"`
17727	// Title - READ-ONLY; Health Title
17728	Title *string `json:"title,omitempty"`
17729	// Message - READ-ONLY; Health Message
17730	Message *string `json:"message,omitempty"`
17731	// Recommendations - READ-ONLY; Health Recommended Actions
17732	Recommendations *[]string `json:"recommendations,omitempty"`
17733}
17734
17735// MarshalJSON is the custom marshaler for ResourceHealthDetails.
17736func (rhd ResourceHealthDetails) MarshalJSON() ([]byte, error) {
17737	objectMap := make(map[string]interface{})
17738	return json.Marshal(objectMap)
17739}
17740
17741// ResourceList base for all lists of resources.
17742type ResourceList struct {
17743	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
17744	NextLink *string `json:"nextLink,omitempty"`
17745}
17746
17747// ResourceVaultConfig backup resource vault config details.
17748type ResourceVaultConfig struct {
17749	// StorageModelType - Storage type. Possible values include: 'StorageTypeInvalid', 'StorageTypeGeoRedundant', 'StorageTypeLocallyRedundant'
17750	StorageModelType StorageType `json:"storageModelType,omitempty"`
17751	// StorageType - Storage type. Possible values include: 'StorageTypeInvalid', 'StorageTypeGeoRedundant', 'StorageTypeLocallyRedundant'
17752	StorageType StorageType `json:"storageType,omitempty"`
17753	// StorageTypeState - Locked or Unlocked. Once a machine is registered against a resource, the storageTypeState is always Locked. Possible values include: 'StorageTypeStateInvalid', 'StorageTypeStateLocked', 'StorageTypeStateUnlocked'
17754	StorageTypeState StorageTypeState `json:"storageTypeState,omitempty"`
17755	// EnhancedSecurityState - Enabled or Disabled. Possible values include: 'EnhancedSecurityStateInvalid', 'EnhancedSecurityStateEnabled', 'EnhancedSecurityStateDisabled'
17756	EnhancedSecurityState EnhancedSecurityState `json:"enhancedSecurityState,omitempty"`
17757	// SoftDeleteFeatureState - Soft Delete feature state. Possible values include: 'SoftDeleteFeatureStateInvalid', 'SoftDeleteFeatureStateEnabled', 'SoftDeleteFeatureStateDisabled'
17758	SoftDeleteFeatureState SoftDeleteFeatureState `json:"softDeleteFeatureState,omitempty"`
17759}
17760
17761// ResourceVaultConfigResource backup resource vault config details.
17762type ResourceVaultConfigResource struct {
17763	autorest.Response `json:"-"`
17764	// Properties - BackupResourceVaultConfigResource properties
17765	Properties *ResourceVaultConfig `json:"properties,omitempty"`
17766	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
17767	ID *string `json:"id,omitempty"`
17768	// Name - READ-ONLY; Resource name associated with the resource.
17769	Name *string `json:"name,omitempty"`
17770	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
17771	Type *string `json:"type,omitempty"`
17772	// Location - Resource location.
17773	Location *string `json:"location,omitempty"`
17774	// Tags - Resource tags.
17775	Tags map[string]*string `json:"tags"`
17776	// ETag - Optional ETag.
17777	ETag *string `json:"eTag,omitempty"`
17778}
17779
17780// MarshalJSON is the custom marshaler for ResourceVaultConfigResource.
17781func (rvcr ResourceVaultConfigResource) MarshalJSON() ([]byte, error) {
17782	objectMap := make(map[string]interface{})
17783	if rvcr.Properties != nil {
17784		objectMap["properties"] = rvcr.Properties
17785	}
17786	if rvcr.Location != nil {
17787		objectMap["location"] = rvcr.Location
17788	}
17789	if rvcr.Tags != nil {
17790		objectMap["tags"] = rvcr.Tags
17791	}
17792	if rvcr.ETag != nil {
17793		objectMap["eTag"] = rvcr.ETag
17794	}
17795	return json.Marshal(objectMap)
17796}
17797
17798// RestoreFileSpecs restore file specs like file path, type and target folder path info.
17799type RestoreFileSpecs struct {
17800	// Path - Source File/Folder path
17801	Path *string `json:"path,omitempty"`
17802	// FileSpecType - Indicates what the Path variable stands for
17803	FileSpecType *string `json:"fileSpecType,omitempty"`
17804	// TargetFolderPath - Destination folder path in target FileShare
17805	TargetFolderPath *string `json:"targetFolderPath,omitempty"`
17806}
17807
17808// BasicRestoreRequest base class for restore request. Workload-specific restore requests are derived from this class.
17809type BasicRestoreRequest interface {
17810	AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool)
17811	AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool)
17812	AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool)
17813	AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool)
17814	AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool)
17815	AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool)
17816	AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool)
17817	AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool)
17818	AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool)
17819	AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool)
17820	AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool)
17821	AsRestoreRequest() (*RestoreRequest, bool)
17822}
17823
17824// RestoreRequest base class for restore request. Workload-specific restore requests are derived from this
17825// class.
17826type RestoreRequest struct {
17827	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
17828	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
17829}
17830
17831func unmarshalBasicRestoreRequest(body []byte) (BasicRestoreRequest, error) {
17832	var m map[string]interface{}
17833	err := json.Unmarshal(body, &m)
17834	if err != nil {
17835		return nil, err
17836	}
17837
17838	switch m["objectType"] {
17839	case string(ObjectTypeAzureFileShareRestoreRequest):
17840		var afsrr AzureFileShareRestoreRequest
17841		err := json.Unmarshal(body, &afsrr)
17842		return afsrr, err
17843	case string(ObjectTypeAzureWorkloadPointInTimeRestoreRequest):
17844		var awpitrr AzureWorkloadPointInTimeRestoreRequest
17845		err := json.Unmarshal(body, &awpitrr)
17846		return awpitrr, err
17847	case string(ObjectTypeAzureWorkloadRestoreRequest):
17848		var awrr AzureWorkloadRestoreRequest
17849		err := json.Unmarshal(body, &awrr)
17850		return awrr, err
17851	case string(ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest):
17852		var awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest
17853		err := json.Unmarshal(body, &awshpitrr)
17854		return awshpitrr, err
17855	case string(ObjectTypeAzureWorkloadSAPHanaRestoreRequest):
17856		var awshrr AzureWorkloadSAPHanaRestoreRequest
17857		err := json.Unmarshal(body, &awshrr)
17858		return awshrr, err
17859	case string(ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest):
17860		var awspitrr AzureWorkloadSQLPointInTimeRestoreRequest
17861		err := json.Unmarshal(body, &awspitrr)
17862		return awspitrr, err
17863	case string(ObjectTypeAzureWorkloadSQLRestoreRequest):
17864		var awsrr AzureWorkloadSQLRestoreRequest
17865		err := json.Unmarshal(body, &awsrr)
17866		return awsrr, err
17867	case string(ObjectTypeIaasVMRestoreRequest):
17868		var ivrr IaasVMRestoreRequest
17869		err := json.Unmarshal(body, &ivrr)
17870		return ivrr, err
17871	default:
17872		var rr RestoreRequest
17873		err := json.Unmarshal(body, &rr)
17874		return rr, err
17875	}
17876}
17877func unmarshalBasicRestoreRequestArray(body []byte) ([]BasicRestoreRequest, error) {
17878	var rawMessages []*json.RawMessage
17879	err := json.Unmarshal(body, &rawMessages)
17880	if err != nil {
17881		return nil, err
17882	}
17883
17884	rrArray := make([]BasicRestoreRequest, len(rawMessages))
17885
17886	for index, rawMessage := range rawMessages {
17887		rr, err := unmarshalBasicRestoreRequest(*rawMessage)
17888		if err != nil {
17889			return nil, err
17890		}
17891		rrArray[index] = rr
17892	}
17893	return rrArray, nil
17894}
17895
17896// MarshalJSON is the custom marshaler for RestoreRequest.
17897func (rr RestoreRequest) MarshalJSON() ([]byte, error) {
17898	rr.ObjectType = ObjectTypeRestoreRequest
17899	objectMap := make(map[string]interface{})
17900	if rr.ObjectType != "" {
17901		objectMap["objectType"] = rr.ObjectType
17902	}
17903	return json.Marshal(objectMap)
17904}
17905
17906// AsAzureFileShareRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17907func (rr RestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
17908	return nil, false
17909}
17910
17911// AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17912func (rr RestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
17913	return nil, false
17914}
17915
17916// AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17917func (rr RestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
17918	return nil, false
17919}
17920
17921// AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17922func (rr RestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
17923	return nil, false
17924}
17925
17926// AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17927func (rr RestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
17928	return nil, false
17929}
17930
17931// AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17932func (rr RestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
17933	return nil, false
17934}
17935
17936// AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17937func (rr RestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
17938	return nil, false
17939}
17940
17941// AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17942func (rr RestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
17943	return nil, false
17944}
17945
17946// AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17947func (rr RestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
17948	return nil, false
17949}
17950
17951// AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17952func (rr RestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
17953	return nil, false
17954}
17955
17956// AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17957func (rr RestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
17958	return nil, false
17959}
17960
17961// AsRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17962func (rr RestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
17963	return &rr, true
17964}
17965
17966// AsBasicRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
17967func (rr RestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
17968	return &rr, true
17969}
17970
17971// RestoreRequestResource base class for restore request. Workload-specific restore requests are derived
17972// from this class.
17973type RestoreRequestResource struct {
17974	// Properties - RestoreRequestResource properties
17975	Properties BasicRestoreRequest `json:"properties,omitempty"`
17976	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
17977	ID *string `json:"id,omitempty"`
17978	// Name - READ-ONLY; Resource name associated with the resource.
17979	Name *string `json:"name,omitempty"`
17980	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
17981	Type *string `json:"type,omitempty"`
17982	// Location - Resource location.
17983	Location *string `json:"location,omitempty"`
17984	// Tags - Resource tags.
17985	Tags map[string]*string `json:"tags"`
17986	// ETag - Optional ETag.
17987	ETag *string `json:"eTag,omitempty"`
17988}
17989
17990// MarshalJSON is the custom marshaler for RestoreRequestResource.
17991func (rrr RestoreRequestResource) MarshalJSON() ([]byte, error) {
17992	objectMap := make(map[string]interface{})
17993	objectMap["properties"] = rrr.Properties
17994	if rrr.Location != nil {
17995		objectMap["location"] = rrr.Location
17996	}
17997	if rrr.Tags != nil {
17998		objectMap["tags"] = rrr.Tags
17999	}
18000	if rrr.ETag != nil {
18001		objectMap["eTag"] = rrr.ETag
18002	}
18003	return json.Marshal(objectMap)
18004}
18005
18006// UnmarshalJSON is the custom unmarshaler for RestoreRequestResource struct.
18007func (rrr *RestoreRequestResource) UnmarshalJSON(body []byte) error {
18008	var m map[string]*json.RawMessage
18009	err := json.Unmarshal(body, &m)
18010	if err != nil {
18011		return err
18012	}
18013	for k, v := range m {
18014		switch k {
18015		case "properties":
18016			if v != nil {
18017				properties, err := unmarshalBasicRestoreRequest(*v)
18018				if err != nil {
18019					return err
18020				}
18021				rrr.Properties = properties
18022			}
18023		case "id":
18024			if v != nil {
18025				var ID string
18026				err = json.Unmarshal(*v, &ID)
18027				if err != nil {
18028					return err
18029				}
18030				rrr.ID = &ID
18031			}
18032		case "name":
18033			if v != nil {
18034				var name string
18035				err = json.Unmarshal(*v, &name)
18036				if err != nil {
18037					return err
18038				}
18039				rrr.Name = &name
18040			}
18041		case "type":
18042			if v != nil {
18043				var typeVar string
18044				err = json.Unmarshal(*v, &typeVar)
18045				if err != nil {
18046					return err
18047				}
18048				rrr.Type = &typeVar
18049			}
18050		case "location":
18051			if v != nil {
18052				var location string
18053				err = json.Unmarshal(*v, &location)
18054				if err != nil {
18055					return err
18056				}
18057				rrr.Location = &location
18058			}
18059		case "tags":
18060			if v != nil {
18061				var tags map[string]*string
18062				err = json.Unmarshal(*v, &tags)
18063				if err != nil {
18064					return err
18065				}
18066				rrr.Tags = tags
18067			}
18068		case "eTag":
18069			if v != nil {
18070				var eTag string
18071				err = json.Unmarshal(*v, &eTag)
18072				if err != nil {
18073					return err
18074				}
18075				rrr.ETag = &eTag
18076			}
18077		}
18078	}
18079
18080	return nil
18081}
18082
18083// RetentionDuration retention duration.
18084type RetentionDuration struct {
18085	// Count - Count of duration types. Retention duration is obtained by the counting the duration type Count times.
18086	// For example, when Count = 3 and DurationType = Weeks, retention duration will be three weeks.
18087	Count *int32 `json:"count,omitempty"`
18088	// DurationType - Retention duration type of retention policy. Possible values include: 'RetentionDurationTypeInvalid', 'RetentionDurationTypeDays', 'RetentionDurationTypeWeeks', 'RetentionDurationTypeMonths', 'RetentionDurationTypeYears'
18089	DurationType RetentionDurationType `json:"durationType,omitempty"`
18090}
18091
18092// BasicRetentionPolicy base class for retention policy.
18093type BasicRetentionPolicy interface {
18094	AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool)
18095	AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool)
18096	AsRetentionPolicy() (*RetentionPolicy, bool)
18097}
18098
18099// RetentionPolicy base class for retention policy.
18100type RetentionPolicy struct {
18101	// RetentionPolicyType - Possible values include: 'RetentionPolicyTypeRetentionPolicy', 'RetentionPolicyTypeLongTermRetentionPolicy', 'RetentionPolicyTypeSimpleRetentionPolicy'
18102	RetentionPolicyType RetentionPolicyType `json:"retentionPolicyType,omitempty"`
18103}
18104
18105func unmarshalBasicRetentionPolicy(body []byte) (BasicRetentionPolicy, error) {
18106	var m map[string]interface{}
18107	err := json.Unmarshal(body, &m)
18108	if err != nil {
18109		return nil, err
18110	}
18111
18112	switch m["retentionPolicyType"] {
18113	case string(RetentionPolicyTypeLongTermRetentionPolicy):
18114		var ltrp LongTermRetentionPolicy
18115		err := json.Unmarshal(body, &ltrp)
18116		return ltrp, err
18117	case string(RetentionPolicyTypeSimpleRetentionPolicy):
18118		var srp SimpleRetentionPolicy
18119		err := json.Unmarshal(body, &srp)
18120		return srp, err
18121	default:
18122		var rp RetentionPolicy
18123		err := json.Unmarshal(body, &rp)
18124		return rp, err
18125	}
18126}
18127func unmarshalBasicRetentionPolicyArray(body []byte) ([]BasicRetentionPolicy, error) {
18128	var rawMessages []*json.RawMessage
18129	err := json.Unmarshal(body, &rawMessages)
18130	if err != nil {
18131		return nil, err
18132	}
18133
18134	rpArray := make([]BasicRetentionPolicy, len(rawMessages))
18135
18136	for index, rawMessage := range rawMessages {
18137		rp, err := unmarshalBasicRetentionPolicy(*rawMessage)
18138		if err != nil {
18139			return nil, err
18140		}
18141		rpArray[index] = rp
18142	}
18143	return rpArray, nil
18144}
18145
18146// MarshalJSON is the custom marshaler for RetentionPolicy.
18147func (rp RetentionPolicy) MarshalJSON() ([]byte, error) {
18148	rp.RetentionPolicyType = RetentionPolicyTypeRetentionPolicy
18149	objectMap := make(map[string]interface{})
18150	if rp.RetentionPolicyType != "" {
18151		objectMap["retentionPolicyType"] = rp.RetentionPolicyType
18152	}
18153	return json.Marshal(objectMap)
18154}
18155
18156// AsLongTermRetentionPolicy is the BasicRetentionPolicy implementation for RetentionPolicy.
18157func (rp RetentionPolicy) AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool) {
18158	return nil, false
18159}
18160
18161// AsSimpleRetentionPolicy is the BasicRetentionPolicy implementation for RetentionPolicy.
18162func (rp RetentionPolicy) AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool) {
18163	return nil, false
18164}
18165
18166// AsRetentionPolicy is the BasicRetentionPolicy implementation for RetentionPolicy.
18167func (rp RetentionPolicy) AsRetentionPolicy() (*RetentionPolicy, bool) {
18168	return &rp, true
18169}
18170
18171// AsBasicRetentionPolicy is the BasicRetentionPolicy implementation for RetentionPolicy.
18172func (rp RetentionPolicy) AsBasicRetentionPolicy() (BasicRetentionPolicy, bool) {
18173	return &rp, true
18174}
18175
18176// BasicSchedulePolicy base class for backup schedule.
18177type BasicSchedulePolicy interface {
18178	AsLogSchedulePolicy() (*LogSchedulePolicy, bool)
18179	AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool)
18180	AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool)
18181	AsSchedulePolicy() (*SchedulePolicy, bool)
18182}
18183
18184// SchedulePolicy base class for backup schedule.
18185type SchedulePolicy struct {
18186	// SchedulePolicyType - Possible values include: 'SchedulePolicyTypeSchedulePolicy', 'SchedulePolicyTypeLogSchedulePolicy', 'SchedulePolicyTypeLongTermSchedulePolicy', 'SchedulePolicyTypeSimpleSchedulePolicy'
18187	SchedulePolicyType SchedulePolicyType `json:"schedulePolicyType,omitempty"`
18188}
18189
18190func unmarshalBasicSchedulePolicy(body []byte) (BasicSchedulePolicy, error) {
18191	var m map[string]interface{}
18192	err := json.Unmarshal(body, &m)
18193	if err != nil {
18194		return nil, err
18195	}
18196
18197	switch m["schedulePolicyType"] {
18198	case string(SchedulePolicyTypeLogSchedulePolicy):
18199		var lsp LogSchedulePolicy
18200		err := json.Unmarshal(body, &lsp)
18201		return lsp, err
18202	case string(SchedulePolicyTypeLongTermSchedulePolicy):
18203		var ltsp LongTermSchedulePolicy
18204		err := json.Unmarshal(body, &ltsp)
18205		return ltsp, err
18206	case string(SchedulePolicyTypeSimpleSchedulePolicy):
18207		var ssp SimpleSchedulePolicy
18208		err := json.Unmarshal(body, &ssp)
18209		return ssp, err
18210	default:
18211		var sp SchedulePolicy
18212		err := json.Unmarshal(body, &sp)
18213		return sp, err
18214	}
18215}
18216func unmarshalBasicSchedulePolicyArray(body []byte) ([]BasicSchedulePolicy, error) {
18217	var rawMessages []*json.RawMessage
18218	err := json.Unmarshal(body, &rawMessages)
18219	if err != nil {
18220		return nil, err
18221	}
18222
18223	spArray := make([]BasicSchedulePolicy, len(rawMessages))
18224
18225	for index, rawMessage := range rawMessages {
18226		sp, err := unmarshalBasicSchedulePolicy(*rawMessage)
18227		if err != nil {
18228			return nil, err
18229		}
18230		spArray[index] = sp
18231	}
18232	return spArray, nil
18233}
18234
18235// MarshalJSON is the custom marshaler for SchedulePolicy.
18236func (sp SchedulePolicy) MarshalJSON() ([]byte, error) {
18237	sp.SchedulePolicyType = SchedulePolicyTypeSchedulePolicy
18238	objectMap := make(map[string]interface{})
18239	if sp.SchedulePolicyType != "" {
18240		objectMap["schedulePolicyType"] = sp.SchedulePolicyType
18241	}
18242	return json.Marshal(objectMap)
18243}
18244
18245// AsLogSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
18246func (sp SchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
18247	return nil, false
18248}
18249
18250// AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
18251func (sp SchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
18252	return nil, false
18253}
18254
18255// AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
18256func (sp SchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
18257	return nil, false
18258}
18259
18260// AsSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
18261func (sp SchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
18262	return &sp, true
18263}
18264
18265// AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
18266func (sp SchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
18267	return &sp, true
18268}
18269
18270// Settings common settings field for backup management
18271type Settings struct {
18272	// TimeZone - TimeZone optional input as string. For example: TimeZone = "Pacific Standard Time".
18273	TimeZone *string `json:"timeZone,omitempty"`
18274	// Issqlcompression - SQL compression flag
18275	Issqlcompression *bool `json:"issqlcompression,omitempty"`
18276	// IsCompression - Workload compression flag. This has been added so that 'isSqlCompression'
18277	// will be deprecated once clients upgrade to consider this flag.
18278	IsCompression *bool `json:"isCompression,omitempty"`
18279}
18280
18281// SimpleRetentionPolicy simple policy retention.
18282type SimpleRetentionPolicy struct {
18283	// RetentionDuration - Retention duration of the protection policy.
18284	RetentionDuration *RetentionDuration `json:"retentionDuration,omitempty"`
18285	// RetentionPolicyType - Possible values include: 'RetentionPolicyTypeRetentionPolicy', 'RetentionPolicyTypeLongTermRetentionPolicy', 'RetentionPolicyTypeSimpleRetentionPolicy'
18286	RetentionPolicyType RetentionPolicyType `json:"retentionPolicyType,omitempty"`
18287}
18288
18289// MarshalJSON is the custom marshaler for SimpleRetentionPolicy.
18290func (srp SimpleRetentionPolicy) MarshalJSON() ([]byte, error) {
18291	srp.RetentionPolicyType = RetentionPolicyTypeSimpleRetentionPolicy
18292	objectMap := make(map[string]interface{})
18293	if srp.RetentionDuration != nil {
18294		objectMap["retentionDuration"] = srp.RetentionDuration
18295	}
18296	if srp.RetentionPolicyType != "" {
18297		objectMap["retentionPolicyType"] = srp.RetentionPolicyType
18298	}
18299	return json.Marshal(objectMap)
18300}
18301
18302// AsLongTermRetentionPolicy is the BasicRetentionPolicy implementation for SimpleRetentionPolicy.
18303func (srp SimpleRetentionPolicy) AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool) {
18304	return nil, false
18305}
18306
18307// AsSimpleRetentionPolicy is the BasicRetentionPolicy implementation for SimpleRetentionPolicy.
18308func (srp SimpleRetentionPolicy) AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool) {
18309	return &srp, true
18310}
18311
18312// AsRetentionPolicy is the BasicRetentionPolicy implementation for SimpleRetentionPolicy.
18313func (srp SimpleRetentionPolicy) AsRetentionPolicy() (*RetentionPolicy, bool) {
18314	return nil, false
18315}
18316
18317// AsBasicRetentionPolicy is the BasicRetentionPolicy implementation for SimpleRetentionPolicy.
18318func (srp SimpleRetentionPolicy) AsBasicRetentionPolicy() (BasicRetentionPolicy, bool) {
18319	return &srp, true
18320}
18321
18322// SimpleSchedulePolicy simple policy schedule.
18323type SimpleSchedulePolicy struct {
18324	// ScheduleRunFrequency - Frequency of the schedule operation of this policy. Possible values include: 'ScheduleRunTypeInvalid', 'ScheduleRunTypeDaily', 'ScheduleRunTypeWeekly'
18325	ScheduleRunFrequency ScheduleRunType `json:"scheduleRunFrequency,omitempty"`
18326	// ScheduleRunDays - List of days of week this schedule has to be run.
18327	ScheduleRunDays *[]DayOfWeek `json:"scheduleRunDays,omitempty"`
18328	// ScheduleRunTimes - List of times of day this schedule has to be run.
18329	ScheduleRunTimes *[]date.Time `json:"scheduleRunTimes,omitempty"`
18330	// ScheduleWeeklyFrequency - At every number weeks this schedule has to be run.
18331	ScheduleWeeklyFrequency *int32 `json:"scheduleWeeklyFrequency,omitempty"`
18332	// SchedulePolicyType - Possible values include: 'SchedulePolicyTypeSchedulePolicy', 'SchedulePolicyTypeLogSchedulePolicy', 'SchedulePolicyTypeLongTermSchedulePolicy', 'SchedulePolicyTypeSimpleSchedulePolicy'
18333	SchedulePolicyType SchedulePolicyType `json:"schedulePolicyType,omitempty"`
18334}
18335
18336// MarshalJSON is the custom marshaler for SimpleSchedulePolicy.
18337func (ssp SimpleSchedulePolicy) MarshalJSON() ([]byte, error) {
18338	ssp.SchedulePolicyType = SchedulePolicyTypeSimpleSchedulePolicy
18339	objectMap := make(map[string]interface{})
18340	if ssp.ScheduleRunFrequency != "" {
18341		objectMap["scheduleRunFrequency"] = ssp.ScheduleRunFrequency
18342	}
18343	if ssp.ScheduleRunDays != nil {
18344		objectMap["scheduleRunDays"] = ssp.ScheduleRunDays
18345	}
18346	if ssp.ScheduleRunTimes != nil {
18347		objectMap["scheduleRunTimes"] = ssp.ScheduleRunTimes
18348	}
18349	if ssp.ScheduleWeeklyFrequency != nil {
18350		objectMap["scheduleWeeklyFrequency"] = ssp.ScheduleWeeklyFrequency
18351	}
18352	if ssp.SchedulePolicyType != "" {
18353		objectMap["schedulePolicyType"] = ssp.SchedulePolicyType
18354	}
18355	return json.Marshal(objectMap)
18356}
18357
18358// AsLogSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
18359func (ssp SimpleSchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
18360	return nil, false
18361}
18362
18363// AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
18364func (ssp SimpleSchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
18365	return nil, false
18366}
18367
18368// AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
18369func (ssp SimpleSchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
18370	return &ssp, true
18371}
18372
18373// AsSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
18374func (ssp SimpleSchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
18375	return nil, false
18376}
18377
18378// AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
18379func (ssp SimpleSchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
18380	return &ssp, true
18381}
18382
18383// SQLDataDirectory sQLDataDirectory info
18384type SQLDataDirectory struct {
18385	// Type - Type of data directory mapping. Possible values include: 'SQLDataDirectoryTypeInvalid', 'SQLDataDirectoryTypeData', 'SQLDataDirectoryTypeLog'
18386	Type SQLDataDirectoryType `json:"type,omitempty"`
18387	// Path - File path
18388	Path *string `json:"path,omitempty"`
18389	// LogicalName - Logical name of the file
18390	LogicalName *string `json:"logicalName,omitempty"`
18391}
18392
18393// SQLDataDirectoryMapping encapsulates information regarding data directory
18394type SQLDataDirectoryMapping struct {
18395	// MappingType - Type of data directory mapping. Possible values include: 'SQLDataDirectoryTypeInvalid', 'SQLDataDirectoryTypeData', 'SQLDataDirectoryTypeLog'
18396	MappingType SQLDataDirectoryType `json:"mappingType,omitempty"`
18397	// SourceLogicalName - Restore source logical name path
18398	SourceLogicalName *string `json:"sourceLogicalName,omitempty"`
18399	// SourcePath - Restore source path
18400	SourcePath *string `json:"sourcePath,omitempty"`
18401	// TargetPath - Target path
18402	TargetPath *string `json:"targetPath,omitempty"`
18403}
18404
18405// StatusRequest backupStatus request.
18406type StatusRequest struct {
18407	// ResourceType - Container Type - VM, SQLPaaS, DPM, AzureFileShare. Possible values include: 'DataSourceTypeInvalid', 'DataSourceTypeVM', 'DataSourceTypeFileFolder', 'DataSourceTypeAzureSQLDb', 'DataSourceTypeSQLDB', 'DataSourceTypeExchange', 'DataSourceTypeSharepoint', 'DataSourceTypeVMwareVM', 'DataSourceTypeSystemState', 'DataSourceTypeClient', 'DataSourceTypeGenericDataSource', 'DataSourceTypeSQLDataBase', 'DataSourceTypeAzureFileShare', 'DataSourceTypeSAPHanaDatabase', 'DataSourceTypeSAPAseDatabase'
18408	ResourceType DataSourceType `json:"resourceType,omitempty"`
18409	// ResourceID - Entire ARM resource id of the resource
18410	ResourceID *string `json:"resourceId,omitempty"`
18411	// PoLogicalName - Protectable Item Logical Name
18412	PoLogicalName *string `json:"poLogicalName,omitempty"`
18413}
18414
18415// StatusResponse backupStatus response.
18416type StatusResponse struct {
18417	autorest.Response `json:"-"`
18418	// ProtectionStatus - Specifies whether the container is registered or not. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
18419	ProtectionStatus ProtectionStatus `json:"protectionStatus,omitempty"`
18420	// VaultID - Specifies the arm resource id of the vault
18421	VaultID *string `json:"vaultId,omitempty"`
18422	// FabricName - Specifies the fabric name - Azure or AD. Possible values include: 'FabricNameInvalid', 'FabricNameAzure'
18423	FabricName FabricName `json:"fabricName,omitempty"`
18424	// ContainerName - Specifies the product specific container name. E.g. iaasvmcontainer;iaasvmcontainer;csname;vmname.
18425	ContainerName *string `json:"containerName,omitempty"`
18426	// ProtectedItemName - Specifies the product specific ds name. E.g. vm;iaasvmcontainer;csname;vmname.
18427	ProtectedItemName *string `json:"protectedItemName,omitempty"`
18428	// ErrorCode - ErrorCode in case of intent failed
18429	ErrorCode *string `json:"errorCode,omitempty"`
18430	// ErrorMessage - ErrorMessage in case of intent failed.
18431	ErrorMessage *string `json:"errorMessage,omitempty"`
18432	// PolicyName - Specifies the policy name which is used for protection
18433	PolicyName *string `json:"policyName,omitempty"`
18434	// RegistrationStatus - Container registration status
18435	RegistrationStatus *string `json:"registrationStatus,omitempty"`
18436}
18437
18438// SubProtectionPolicy sub-protection policy which includes schedule and retention
18439type SubProtectionPolicy struct {
18440	// PolicyType - Type of backup policy type. Possible values include: 'PolicyTypeInvalid', 'PolicyTypeFull', 'PolicyTypeDifferential', 'PolicyTypeLog', 'PolicyTypeCopyOnlyFull'
18441	PolicyType PolicyType `json:"policyType,omitempty"`
18442	// SchedulePolicy - Backup schedule specified as part of backup policy.
18443	SchedulePolicy BasicSchedulePolicy `json:"schedulePolicy,omitempty"`
18444	// RetentionPolicy - Retention policy with the details on backup copy retention ranges.
18445	RetentionPolicy BasicRetentionPolicy `json:"retentionPolicy,omitempty"`
18446}
18447
18448// UnmarshalJSON is the custom unmarshaler for SubProtectionPolicy struct.
18449func (spp *SubProtectionPolicy) UnmarshalJSON(body []byte) error {
18450	var m map[string]*json.RawMessage
18451	err := json.Unmarshal(body, &m)
18452	if err != nil {
18453		return err
18454	}
18455	for k, v := range m {
18456		switch k {
18457		case "policyType":
18458			if v != nil {
18459				var policyType PolicyType
18460				err = json.Unmarshal(*v, &policyType)
18461				if err != nil {
18462					return err
18463				}
18464				spp.PolicyType = policyType
18465			}
18466		case "schedulePolicy":
18467			if v != nil {
18468				schedulePolicy, err := unmarshalBasicSchedulePolicy(*v)
18469				if err != nil {
18470					return err
18471				}
18472				spp.SchedulePolicy = schedulePolicy
18473			}
18474		case "retentionPolicy":
18475			if v != nil {
18476				retentionPolicy, err := unmarshalBasicRetentionPolicy(*v)
18477				if err != nil {
18478					return err
18479				}
18480				spp.RetentionPolicy = retentionPolicy
18481			}
18482		}
18483	}
18484
18485	return nil
18486}
18487
18488// TargetAFSRestoreInfo target Azure File Share Info.
18489type TargetAFSRestoreInfo struct {
18490	// Name - File share name
18491	Name *string `json:"name,omitempty"`
18492	// TargetResourceID - Target file share resource ARM ID
18493	TargetResourceID *string `json:"targetResourceId,omitempty"`
18494}
18495
18496// TargetRestoreInfo details about target workload during restore operation.
18497type TargetRestoreInfo struct {
18498	// OverwriteOption - Can Overwrite if Target DataBase already exists. Possible values include: 'OverwriteOptionsInvalid', 'OverwriteOptionsFailOnConflict', 'OverwriteOptionsOverwrite'
18499	OverwriteOption OverwriteOptions `json:"overwriteOption,omitempty"`
18500	// ContainerID - Resource Id name of the container in which Target DataBase resides
18501	ContainerID *string `json:"containerId,omitempty"`
18502	// DatabaseName - Database name InstanceName/DataBaseName for SQL or System/DbName for SAP Hana
18503	DatabaseName *string `json:"databaseName,omitempty"`
18504	// TargetDirectoryForFileRestore - Target directory location for restore as files.
18505	TargetDirectoryForFileRestore *string `json:"targetDirectoryForFileRestore,omitempty"`
18506}
18507
18508// TokenInformation the token information details.
18509type TokenInformation struct {
18510	autorest.Response `json:"-"`
18511	// Token - Token value.
18512	Token *string `json:"token,omitempty"`
18513	// ExpiryTimeInUtcTicks - Expiry time of token.
18514	ExpiryTimeInUtcTicks *int64 `json:"expiryTimeInUtcTicks,omitempty"`
18515	// SecurityPIN - Security PIN
18516	SecurityPIN *string `json:"securityPIN,omitempty"`
18517}
18518
18519// ValidateIaasVMRestoreOperationRequest azureRestoreValidation request.
18520type ValidateIaasVMRestoreOperationRequest struct {
18521	// RestoreRequest - Sets restore request to be validated
18522	RestoreRequest BasicRestoreRequest `json:"restoreRequest,omitempty"`
18523	// ObjectType - Possible values include: 'ObjectTypeValidateOperationRequest', 'ObjectTypeValidateIaasVMRestoreOperationRequest', 'ObjectTypeValidateRestoreOperationRequest'
18524	ObjectType ObjectTypeBasicValidateOperationRequest `json:"objectType,omitempty"`
18525}
18526
18527// MarshalJSON is the custom marshaler for ValidateIaasVMRestoreOperationRequest.
18528func (vivror ValidateIaasVMRestoreOperationRequest) MarshalJSON() ([]byte, error) {
18529	vivror.ObjectType = ObjectTypeValidateIaasVMRestoreOperationRequest
18530	objectMap := make(map[string]interface{})
18531	objectMap["restoreRequest"] = vivror.RestoreRequest
18532	if vivror.ObjectType != "" {
18533		objectMap["objectType"] = vivror.ObjectType
18534	}
18535	return json.Marshal(objectMap)
18536}
18537
18538// AsValidateIaasVMRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
18539func (vivror ValidateIaasVMRestoreOperationRequest) AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool) {
18540	return &vivror, true
18541}
18542
18543// AsValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
18544func (vivror ValidateIaasVMRestoreOperationRequest) AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool) {
18545	return nil, false
18546}
18547
18548// AsBasicValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
18549func (vivror ValidateIaasVMRestoreOperationRequest) AsBasicValidateRestoreOperationRequest() (BasicValidateRestoreOperationRequest, bool) {
18550	return &vivror, true
18551}
18552
18553// AsValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
18554func (vivror ValidateIaasVMRestoreOperationRequest) AsValidateOperationRequest() (*ValidateOperationRequest, bool) {
18555	return nil, false
18556}
18557
18558// AsBasicValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
18559func (vivror ValidateIaasVMRestoreOperationRequest) AsBasicValidateOperationRequest() (BasicValidateOperationRequest, bool) {
18560	return &vivror, true
18561}
18562
18563// UnmarshalJSON is the custom unmarshaler for ValidateIaasVMRestoreOperationRequest struct.
18564func (vivror *ValidateIaasVMRestoreOperationRequest) UnmarshalJSON(body []byte) error {
18565	var m map[string]*json.RawMessage
18566	err := json.Unmarshal(body, &m)
18567	if err != nil {
18568		return err
18569	}
18570	for k, v := range m {
18571		switch k {
18572		case "restoreRequest":
18573			if v != nil {
18574				restoreRequest, err := unmarshalBasicRestoreRequest(*v)
18575				if err != nil {
18576					return err
18577				}
18578				vivror.RestoreRequest = restoreRequest
18579			}
18580		case "objectType":
18581			if v != nil {
18582				var objectType ObjectTypeBasicValidateOperationRequest
18583				err = json.Unmarshal(*v, &objectType)
18584				if err != nil {
18585					return err
18586				}
18587				vivror.ObjectType = objectType
18588			}
18589		}
18590	}
18591
18592	return nil
18593}
18594
18595// BasicValidateOperationRequest base class for validate operation request.
18596type BasicValidateOperationRequest interface {
18597	AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool)
18598	AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool)
18599	AsBasicValidateRestoreOperationRequest() (BasicValidateRestoreOperationRequest, bool)
18600	AsValidateOperationRequest() (*ValidateOperationRequest, bool)
18601}
18602
18603// ValidateOperationRequest base class for validate operation request.
18604type ValidateOperationRequest struct {
18605	// ObjectType - Possible values include: 'ObjectTypeValidateOperationRequest', 'ObjectTypeValidateIaasVMRestoreOperationRequest', 'ObjectTypeValidateRestoreOperationRequest'
18606	ObjectType ObjectTypeBasicValidateOperationRequest `json:"objectType,omitempty"`
18607}
18608
18609func unmarshalBasicValidateOperationRequest(body []byte) (BasicValidateOperationRequest, error) {
18610	var m map[string]interface{}
18611	err := json.Unmarshal(body, &m)
18612	if err != nil {
18613		return nil, err
18614	}
18615
18616	switch m["objectType"] {
18617	case string(ObjectTypeValidateIaasVMRestoreOperationRequest):
18618		var vivror ValidateIaasVMRestoreOperationRequest
18619		err := json.Unmarshal(body, &vivror)
18620		return vivror, err
18621	case string(ObjectTypeValidateRestoreOperationRequest):
18622		var vror ValidateRestoreOperationRequest
18623		err := json.Unmarshal(body, &vror)
18624		return vror, err
18625	default:
18626		var vor ValidateOperationRequest
18627		err := json.Unmarshal(body, &vor)
18628		return vor, err
18629	}
18630}
18631func unmarshalBasicValidateOperationRequestArray(body []byte) ([]BasicValidateOperationRequest, error) {
18632	var rawMessages []*json.RawMessage
18633	err := json.Unmarshal(body, &rawMessages)
18634	if err != nil {
18635		return nil, err
18636	}
18637
18638	vorArray := make([]BasicValidateOperationRequest, len(rawMessages))
18639
18640	for index, rawMessage := range rawMessages {
18641		vor, err := unmarshalBasicValidateOperationRequest(*rawMessage)
18642		if err != nil {
18643			return nil, err
18644		}
18645		vorArray[index] = vor
18646	}
18647	return vorArray, nil
18648}
18649
18650// MarshalJSON is the custom marshaler for ValidateOperationRequest.
18651func (vor ValidateOperationRequest) MarshalJSON() ([]byte, error) {
18652	vor.ObjectType = ObjectTypeValidateOperationRequest
18653	objectMap := make(map[string]interface{})
18654	if vor.ObjectType != "" {
18655		objectMap["objectType"] = vor.ObjectType
18656	}
18657	return json.Marshal(objectMap)
18658}
18659
18660// AsValidateIaasVMRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
18661func (vor ValidateOperationRequest) AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool) {
18662	return nil, false
18663}
18664
18665// AsValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
18666func (vor ValidateOperationRequest) AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool) {
18667	return nil, false
18668}
18669
18670// AsBasicValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
18671func (vor ValidateOperationRequest) AsBasicValidateRestoreOperationRequest() (BasicValidateRestoreOperationRequest, bool) {
18672	return nil, false
18673}
18674
18675// AsValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
18676func (vor ValidateOperationRequest) AsValidateOperationRequest() (*ValidateOperationRequest, bool) {
18677	return &vor, true
18678}
18679
18680// AsBasicValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
18681func (vor ValidateOperationRequest) AsBasicValidateOperationRequest() (BasicValidateOperationRequest, bool) {
18682	return &vor, true
18683}
18684
18685// ValidateOperationResponse base class for validate operation response.
18686type ValidateOperationResponse struct {
18687	// ValidationResults - Gets the validation result
18688	ValidationResults *[]ErrorDetail `json:"validationResults,omitempty"`
18689}
18690
18691// ValidateOperationsResponse ...
18692type ValidateOperationsResponse struct {
18693	autorest.Response         `json:"-"`
18694	ValidateOperationResponse *ValidateOperationResponse `json:"validateOperationResponse,omitempty"`
18695}
18696
18697// BasicValidateRestoreOperationRequest azureRestoreValidation request.
18698type BasicValidateRestoreOperationRequest interface {
18699	AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool)
18700	AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool)
18701}
18702
18703// ValidateRestoreOperationRequest azureRestoreValidation request.
18704type ValidateRestoreOperationRequest struct {
18705	// RestoreRequest - Sets restore request to be validated
18706	RestoreRequest BasicRestoreRequest `json:"restoreRequest,omitempty"`
18707	// ObjectType - Possible values include: 'ObjectTypeValidateOperationRequest', 'ObjectTypeValidateIaasVMRestoreOperationRequest', 'ObjectTypeValidateRestoreOperationRequest'
18708	ObjectType ObjectTypeBasicValidateOperationRequest `json:"objectType,omitempty"`
18709}
18710
18711func unmarshalBasicValidateRestoreOperationRequest(body []byte) (BasicValidateRestoreOperationRequest, error) {
18712	var m map[string]interface{}
18713	err := json.Unmarshal(body, &m)
18714	if err != nil {
18715		return nil, err
18716	}
18717
18718	switch m["objectType"] {
18719	case string(ObjectTypeValidateIaasVMRestoreOperationRequest):
18720		var vivror ValidateIaasVMRestoreOperationRequest
18721		err := json.Unmarshal(body, &vivror)
18722		return vivror, err
18723	default:
18724		var vror ValidateRestoreOperationRequest
18725		err := json.Unmarshal(body, &vror)
18726		return vror, err
18727	}
18728}
18729func unmarshalBasicValidateRestoreOperationRequestArray(body []byte) ([]BasicValidateRestoreOperationRequest, error) {
18730	var rawMessages []*json.RawMessage
18731	err := json.Unmarshal(body, &rawMessages)
18732	if err != nil {
18733		return nil, err
18734	}
18735
18736	vrorArray := make([]BasicValidateRestoreOperationRequest, len(rawMessages))
18737
18738	for index, rawMessage := range rawMessages {
18739		vror, err := unmarshalBasicValidateRestoreOperationRequest(*rawMessage)
18740		if err != nil {
18741			return nil, err
18742		}
18743		vrorArray[index] = vror
18744	}
18745	return vrorArray, nil
18746}
18747
18748// MarshalJSON is the custom marshaler for ValidateRestoreOperationRequest.
18749func (vror ValidateRestoreOperationRequest) MarshalJSON() ([]byte, error) {
18750	vror.ObjectType = ObjectTypeValidateRestoreOperationRequest
18751	objectMap := make(map[string]interface{})
18752	objectMap["restoreRequest"] = vror.RestoreRequest
18753	if vror.ObjectType != "" {
18754		objectMap["objectType"] = vror.ObjectType
18755	}
18756	return json.Marshal(objectMap)
18757}
18758
18759// AsValidateIaasVMRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
18760func (vror ValidateRestoreOperationRequest) AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool) {
18761	return nil, false
18762}
18763
18764// AsValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
18765func (vror ValidateRestoreOperationRequest) AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool) {
18766	return &vror, true
18767}
18768
18769// AsBasicValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
18770func (vror ValidateRestoreOperationRequest) AsBasicValidateRestoreOperationRequest() (BasicValidateRestoreOperationRequest, bool) {
18771	return &vror, true
18772}
18773
18774// AsValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
18775func (vror ValidateRestoreOperationRequest) AsValidateOperationRequest() (*ValidateOperationRequest, bool) {
18776	return nil, false
18777}
18778
18779// AsBasicValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
18780func (vror ValidateRestoreOperationRequest) AsBasicValidateOperationRequest() (BasicValidateOperationRequest, bool) {
18781	return &vror, true
18782}
18783
18784// UnmarshalJSON is the custom unmarshaler for ValidateRestoreOperationRequest struct.
18785func (vror *ValidateRestoreOperationRequest) UnmarshalJSON(body []byte) error {
18786	var m map[string]*json.RawMessage
18787	err := json.Unmarshal(body, &m)
18788	if err != nil {
18789		return err
18790	}
18791	for k, v := range m {
18792		switch k {
18793		case "restoreRequest":
18794			if v != nil {
18795				restoreRequest, err := unmarshalBasicRestoreRequest(*v)
18796				if err != nil {
18797					return err
18798				}
18799				vror.RestoreRequest = restoreRequest
18800			}
18801		case "objectType":
18802			if v != nil {
18803				var objectType ObjectTypeBasicValidateOperationRequest
18804				err = json.Unmarshal(*v, &objectType)
18805				if err != nil {
18806					return err
18807				}
18808				vror.ObjectType = objectType
18809			}
18810		}
18811	}
18812
18813	return nil
18814}
18815
18816// WeeklyRetentionFormat weekly retention format.
18817type WeeklyRetentionFormat struct {
18818	// DaysOfTheWeek - List of days of the week.
18819	DaysOfTheWeek *[]DayOfWeek `json:"daysOfTheWeek,omitempty"`
18820	// WeeksOfTheMonth - List of weeks of month.
18821	WeeksOfTheMonth *[]WeekOfMonth `json:"weeksOfTheMonth,omitempty"`
18822}
18823
18824// WeeklyRetentionSchedule weekly retention schedule.
18825type WeeklyRetentionSchedule struct {
18826	// DaysOfTheWeek - List of days of week for weekly retention policy.
18827	DaysOfTheWeek *[]DayOfWeek `json:"daysOfTheWeek,omitempty"`
18828	// RetentionTimes - Retention times of retention policy.
18829	RetentionTimes *[]date.Time `json:"retentionTimes,omitempty"`
18830	// RetentionDuration - Retention duration of retention Policy.
18831	RetentionDuration *RetentionDuration `json:"retentionDuration,omitempty"`
18832}
18833
18834// WorkloadInquiryDetails details of an inquired protectable item.
18835type WorkloadInquiryDetails struct {
18836	// Type - Type of the Workload such as SQL, Oracle etc.
18837	Type *string `json:"type,omitempty"`
18838	// ItemCount - Contains the protectable item Count inside this Container.
18839	ItemCount *int64 `json:"itemCount,omitempty"`
18840	// InquiryValidation - Inquiry validation such as permissions and other backup validations.
18841	InquiryValidation *InquiryValidation `json:"inquiryValidation,omitempty"`
18842}
18843
18844// BasicWorkloadItem base class for backup item. Workload-specific backup items are derived from this class.
18845type BasicWorkloadItem interface {
18846	AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool)
18847	AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool)
18848	AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool)
18849	AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool)
18850	AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool)
18851	AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool)
18852	AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool)
18853	AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool)
18854	AsWorkloadItem() (*WorkloadItem, bool)
18855}
18856
18857// WorkloadItem base class for backup item. Workload-specific backup items are derived from this class.
18858type WorkloadItem struct {
18859	// BackupManagementType - Type of backup management to backup an item.
18860	BackupManagementType *string `json:"backupManagementType,omitempty"`
18861	// WorkloadType - Type of workload for the backup management
18862	WorkloadType *string `json:"workloadType,omitempty"`
18863	// FriendlyName - Friendly name of the backup item.
18864	FriendlyName *string `json:"friendlyName,omitempty"`
18865	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
18866	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
18867	// WorkloadItemType - Possible values include: 'WorkloadItemTypeWorkloadItem', 'WorkloadItemTypeAzureVMWorkloadItem', 'WorkloadItemTypeSAPAseDatabase1', 'WorkloadItemTypeSAPAseSystem1', 'WorkloadItemTypeSAPHanaDatabase1', 'WorkloadItemTypeSAPHanaSystem1', 'WorkloadItemTypeSQLDataBase1', 'WorkloadItemTypeSQLInstance1'
18868	WorkloadItemType WorkloadItemTypeBasicWorkloadItem `json:"workloadItemType,omitempty"`
18869}
18870
18871func unmarshalBasicWorkloadItem(body []byte) (BasicWorkloadItem, error) {
18872	var m map[string]interface{}
18873	err := json.Unmarshal(body, &m)
18874	if err != nil {
18875		return nil, err
18876	}
18877
18878	switch m["workloadItemType"] {
18879	case string(WorkloadItemTypeAzureVMWorkloadItem):
18880		var avwi AzureVMWorkloadItem
18881		err := json.Unmarshal(body, &avwi)
18882		return avwi, err
18883	case string(WorkloadItemTypeSAPAseDatabase1):
18884		var avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem
18885		err := json.Unmarshal(body, &avwsadwi)
18886		return avwsadwi, err
18887	case string(WorkloadItemTypeSAPAseSystem1):
18888		var avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem
18889		err := json.Unmarshal(body, &avwsaswi)
18890		return avwsaswi, err
18891	case string(WorkloadItemTypeSAPHanaDatabase1):
18892		var avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem
18893		err := json.Unmarshal(body, &avwshdwi)
18894		return avwshdwi, err
18895	case string(WorkloadItemTypeSAPHanaSystem1):
18896		var avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem
18897		err := json.Unmarshal(body, &avwshswi)
18898		return avwshswi, err
18899	case string(WorkloadItemTypeSQLDataBase1):
18900		var avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem
18901		err := json.Unmarshal(body, &avwsdwi)
18902		return avwsdwi, err
18903	case string(WorkloadItemTypeSQLInstance1):
18904		var avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem
18905		err := json.Unmarshal(body, &avwsiwi)
18906		return avwsiwi, err
18907	default:
18908		var wi WorkloadItem
18909		err := json.Unmarshal(body, &wi)
18910		return wi, err
18911	}
18912}
18913func unmarshalBasicWorkloadItemArray(body []byte) ([]BasicWorkloadItem, error) {
18914	var rawMessages []*json.RawMessage
18915	err := json.Unmarshal(body, &rawMessages)
18916	if err != nil {
18917		return nil, err
18918	}
18919
18920	wiArray := make([]BasicWorkloadItem, len(rawMessages))
18921
18922	for index, rawMessage := range rawMessages {
18923		wi, err := unmarshalBasicWorkloadItem(*rawMessage)
18924		if err != nil {
18925			return nil, err
18926		}
18927		wiArray[index] = wi
18928	}
18929	return wiArray, nil
18930}
18931
18932// MarshalJSON is the custom marshaler for WorkloadItem.
18933func (wi WorkloadItem) MarshalJSON() ([]byte, error) {
18934	wi.WorkloadItemType = WorkloadItemTypeWorkloadItem
18935	objectMap := make(map[string]interface{})
18936	if wi.BackupManagementType != nil {
18937		objectMap["backupManagementType"] = wi.BackupManagementType
18938	}
18939	if wi.WorkloadType != nil {
18940		objectMap["workloadType"] = wi.WorkloadType
18941	}
18942	if wi.FriendlyName != nil {
18943		objectMap["friendlyName"] = wi.FriendlyName
18944	}
18945	if wi.ProtectionState != "" {
18946		objectMap["protectionState"] = wi.ProtectionState
18947	}
18948	if wi.WorkloadItemType != "" {
18949		objectMap["workloadItemType"] = wi.WorkloadItemType
18950	}
18951	return json.Marshal(objectMap)
18952}
18953
18954// AsAzureVMWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18955func (wi WorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
18956	return nil, false
18957}
18958
18959// AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18960func (wi WorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
18961	return nil, false
18962}
18963
18964// AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18965func (wi WorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
18966	return nil, false
18967}
18968
18969// AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18970func (wi WorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
18971	return nil, false
18972}
18973
18974// AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18975func (wi WorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
18976	return nil, false
18977}
18978
18979// AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18980func (wi WorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
18981	return nil, false
18982}
18983
18984// AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18985func (wi WorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
18986	return nil, false
18987}
18988
18989// AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18990func (wi WorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
18991	return nil, false
18992}
18993
18994// AsWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
18995func (wi WorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
18996	return &wi, true
18997}
18998
18999// AsBasicWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
19000func (wi WorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
19001	return &wi, true
19002}
19003
19004// WorkloadItemResource base class for backup item. Workload-specific backup items are derived from this
19005// class.
19006type WorkloadItemResource struct {
19007	// Properties - WorkloadItemResource properties
19008	Properties BasicWorkloadItem `json:"properties,omitempty"`
19009	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
19010	ID *string `json:"id,omitempty"`
19011	// Name - READ-ONLY; Resource name associated with the resource.
19012	Name *string `json:"name,omitempty"`
19013	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
19014	Type *string `json:"type,omitempty"`
19015	// Location - Resource location.
19016	Location *string `json:"location,omitempty"`
19017	// Tags - Resource tags.
19018	Tags map[string]*string `json:"tags"`
19019	// ETag - Optional ETag.
19020	ETag *string `json:"eTag,omitempty"`
19021}
19022
19023// MarshalJSON is the custom marshaler for WorkloadItemResource.
19024func (wir WorkloadItemResource) MarshalJSON() ([]byte, error) {
19025	objectMap := make(map[string]interface{})
19026	objectMap["properties"] = wir.Properties
19027	if wir.Location != nil {
19028		objectMap["location"] = wir.Location
19029	}
19030	if wir.Tags != nil {
19031		objectMap["tags"] = wir.Tags
19032	}
19033	if wir.ETag != nil {
19034		objectMap["eTag"] = wir.ETag
19035	}
19036	return json.Marshal(objectMap)
19037}
19038
19039// UnmarshalJSON is the custom unmarshaler for WorkloadItemResource struct.
19040func (wir *WorkloadItemResource) UnmarshalJSON(body []byte) error {
19041	var m map[string]*json.RawMessage
19042	err := json.Unmarshal(body, &m)
19043	if err != nil {
19044		return err
19045	}
19046	for k, v := range m {
19047		switch k {
19048		case "properties":
19049			if v != nil {
19050				properties, err := unmarshalBasicWorkloadItem(*v)
19051				if err != nil {
19052					return err
19053				}
19054				wir.Properties = properties
19055			}
19056		case "id":
19057			if v != nil {
19058				var ID string
19059				err = json.Unmarshal(*v, &ID)
19060				if err != nil {
19061					return err
19062				}
19063				wir.ID = &ID
19064			}
19065		case "name":
19066			if v != nil {
19067				var name string
19068				err = json.Unmarshal(*v, &name)
19069				if err != nil {
19070					return err
19071				}
19072				wir.Name = &name
19073			}
19074		case "type":
19075			if v != nil {
19076				var typeVar string
19077				err = json.Unmarshal(*v, &typeVar)
19078				if err != nil {
19079					return err
19080				}
19081				wir.Type = &typeVar
19082			}
19083		case "location":
19084			if v != nil {
19085				var location string
19086				err = json.Unmarshal(*v, &location)
19087				if err != nil {
19088					return err
19089				}
19090				wir.Location = &location
19091			}
19092		case "tags":
19093			if v != nil {
19094				var tags map[string]*string
19095				err = json.Unmarshal(*v, &tags)
19096				if err != nil {
19097					return err
19098				}
19099				wir.Tags = tags
19100			}
19101		case "eTag":
19102			if v != nil {
19103				var eTag string
19104				err = json.Unmarshal(*v, &eTag)
19105				if err != nil {
19106					return err
19107				}
19108				wir.ETag = &eTag
19109			}
19110		}
19111	}
19112
19113	return nil
19114}
19115
19116// WorkloadItemResourceList list of WorkloadItem resources
19117type WorkloadItemResourceList struct {
19118	autorest.Response `json:"-"`
19119	// Value - List of resources.
19120	Value *[]WorkloadItemResource `json:"value,omitempty"`
19121	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
19122	NextLink *string `json:"nextLink,omitempty"`
19123}
19124
19125// WorkloadItemResourceListIterator provides access to a complete listing of WorkloadItemResource values.
19126type WorkloadItemResourceListIterator struct {
19127	i    int
19128	page WorkloadItemResourceListPage
19129}
19130
19131// NextWithContext advances to the next value.  If there was an error making
19132// the request the iterator does not advance and the error is returned.
19133func (iter *WorkloadItemResourceListIterator) NextWithContext(ctx context.Context) (err error) {
19134	if tracing.IsEnabled() {
19135		ctx = tracing.StartSpan(ctx, fqdn+"/WorkloadItemResourceListIterator.NextWithContext")
19136		defer func() {
19137			sc := -1
19138			if iter.Response().Response.Response != nil {
19139				sc = iter.Response().Response.Response.StatusCode
19140			}
19141			tracing.EndSpan(ctx, sc, err)
19142		}()
19143	}
19144	iter.i++
19145	if iter.i < len(iter.page.Values()) {
19146		return nil
19147	}
19148	err = iter.page.NextWithContext(ctx)
19149	if err != nil {
19150		iter.i--
19151		return err
19152	}
19153	iter.i = 0
19154	return nil
19155}
19156
19157// Next advances to the next value.  If there was an error making
19158// the request the iterator does not advance and the error is returned.
19159// Deprecated: Use NextWithContext() instead.
19160func (iter *WorkloadItemResourceListIterator) Next() error {
19161	return iter.NextWithContext(context.Background())
19162}
19163
19164// NotDone returns true if the enumeration should be started or is not yet complete.
19165func (iter WorkloadItemResourceListIterator) NotDone() bool {
19166	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19167}
19168
19169// Response returns the raw server response from the last page request.
19170func (iter WorkloadItemResourceListIterator) Response() WorkloadItemResourceList {
19171	return iter.page.Response()
19172}
19173
19174// Value returns the current value or a zero-initialized value if the
19175// iterator has advanced beyond the end of the collection.
19176func (iter WorkloadItemResourceListIterator) Value() WorkloadItemResource {
19177	if !iter.page.NotDone() {
19178		return WorkloadItemResource{}
19179	}
19180	return iter.page.Values()[iter.i]
19181}
19182
19183// Creates a new instance of the WorkloadItemResourceListIterator type.
19184func NewWorkloadItemResourceListIterator(page WorkloadItemResourceListPage) WorkloadItemResourceListIterator {
19185	return WorkloadItemResourceListIterator{page: page}
19186}
19187
19188// IsEmpty returns true if the ListResult contains no values.
19189func (wirl WorkloadItemResourceList) IsEmpty() bool {
19190	return wirl.Value == nil || len(*wirl.Value) == 0
19191}
19192
19193// hasNextLink returns true if the NextLink is not empty.
19194func (wirl WorkloadItemResourceList) hasNextLink() bool {
19195	return wirl.NextLink != nil && len(*wirl.NextLink) != 0
19196}
19197
19198// workloadItemResourceListPreparer prepares a request to retrieve the next set of results.
19199// It returns nil if no more results exist.
19200func (wirl WorkloadItemResourceList) workloadItemResourceListPreparer(ctx context.Context) (*http.Request, error) {
19201	if !wirl.hasNextLink() {
19202		return nil, nil
19203	}
19204	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19205		autorest.AsJSON(),
19206		autorest.AsGet(),
19207		autorest.WithBaseURL(to.String(wirl.NextLink)))
19208}
19209
19210// WorkloadItemResourceListPage contains a page of WorkloadItemResource values.
19211type WorkloadItemResourceListPage struct {
19212	fn   func(context.Context, WorkloadItemResourceList) (WorkloadItemResourceList, error)
19213	wirl WorkloadItemResourceList
19214}
19215
19216// NextWithContext advances to the next page of values.  If there was an error making
19217// the request the page does not advance and the error is returned.
19218func (page *WorkloadItemResourceListPage) NextWithContext(ctx context.Context) (err error) {
19219	if tracing.IsEnabled() {
19220		ctx = tracing.StartSpan(ctx, fqdn+"/WorkloadItemResourceListPage.NextWithContext")
19221		defer func() {
19222			sc := -1
19223			if page.Response().Response.Response != nil {
19224				sc = page.Response().Response.Response.StatusCode
19225			}
19226			tracing.EndSpan(ctx, sc, err)
19227		}()
19228	}
19229	for {
19230		next, err := page.fn(ctx, page.wirl)
19231		if err != nil {
19232			return err
19233		}
19234		page.wirl = next
19235		if !next.hasNextLink() || !next.IsEmpty() {
19236			break
19237		}
19238	}
19239	return nil
19240}
19241
19242// Next advances to the next page of values.  If there was an error making
19243// the request the page does not advance and the error is returned.
19244// Deprecated: Use NextWithContext() instead.
19245func (page *WorkloadItemResourceListPage) Next() error {
19246	return page.NextWithContext(context.Background())
19247}
19248
19249// NotDone returns true if the page enumeration should be started or is not yet complete.
19250func (page WorkloadItemResourceListPage) NotDone() bool {
19251	return !page.wirl.IsEmpty()
19252}
19253
19254// Response returns the raw server response from the last page request.
19255func (page WorkloadItemResourceListPage) Response() WorkloadItemResourceList {
19256	return page.wirl
19257}
19258
19259// Values returns the slice of values for the current page or nil if there are no values.
19260func (page WorkloadItemResourceListPage) Values() []WorkloadItemResource {
19261	if page.wirl.IsEmpty() {
19262		return nil
19263	}
19264	return *page.wirl.Value
19265}
19266
19267// Creates a new instance of the WorkloadItemResourceListPage type.
19268func NewWorkloadItemResourceListPage(cur WorkloadItemResourceList, getNextPage func(context.Context, WorkloadItemResourceList) (WorkloadItemResourceList, error)) WorkloadItemResourceListPage {
19269	return WorkloadItemResourceListPage{
19270		fn:   getNextPage,
19271		wirl: cur,
19272	}
19273}
19274
19275// BasicWorkloadProtectableItem base class for backup item. Workload-specific backup items are derived from this class.
19276type BasicWorkloadProtectableItem interface {
19277	AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool)
19278	AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool)
19279	AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool)
19280	AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool)
19281	AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool)
19282	AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool)
19283	AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool)
19284	AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool)
19285	AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool)
19286	AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool)
19287	AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool)
19288	AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool)
19289	AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool)
19290	AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool)
19291}
19292
19293// WorkloadProtectableItem base class for backup item. Workload-specific backup items are derived from this
19294// class.
19295type WorkloadProtectableItem struct {
19296	// BackupManagementType - Type of backup management to backup an item.
19297	BackupManagementType *string `json:"backupManagementType,omitempty"`
19298	// WorkloadType - Type of workload for the backup management
19299	WorkloadType *string `json:"workloadType,omitempty"`
19300	// FriendlyName - Friendly name of the backup item.
19301	FriendlyName *string `json:"friendlyName,omitempty"`
19302	// ProtectionState - State of the back up item. Possible values include: 'ProtectionStatusInvalid', 'ProtectionStatusNotProtected', 'ProtectionStatusProtecting', 'ProtectionStatusProtected', 'ProtectionStatusProtectionFailed'
19303	ProtectionState ProtectionStatus `json:"protectionState,omitempty"`
19304	// ProtectableItemType - Possible values include: 'ProtectableItemTypeWorkloadProtectableItem', 'ProtectableItemTypeAzureFileShare', 'ProtectableItemTypeMicrosoftClassicComputevirtualMachines', 'ProtectableItemTypeMicrosoftComputevirtualMachines', 'ProtectableItemTypeAzureVMWorkloadProtectableItem', 'ProtectableItemTypeSAPAseSystem', 'ProtectableItemTypeSAPHanaDatabase', 'ProtectableItemTypeSAPHanaSystem', 'ProtectableItemTypeSQLAvailabilityGroupContainer', 'ProtectableItemTypeSQLDataBase', 'ProtectableItemTypeSQLInstance', 'ProtectableItemTypeIaaSVMProtectableItem'
19305	ProtectableItemType ProtectableItemType `json:"protectableItemType,omitempty"`
19306}
19307
19308func unmarshalBasicWorkloadProtectableItem(body []byte) (BasicWorkloadProtectableItem, error) {
19309	var m map[string]interface{}
19310	err := json.Unmarshal(body, &m)
19311	if err != nil {
19312		return nil, err
19313	}
19314
19315	switch m["protectableItemType"] {
19316	case string(ProtectableItemTypeAzureFileShare):
19317		var afspi AzureFileShareProtectableItem
19318		err := json.Unmarshal(body, &afspi)
19319		return afspi, err
19320	case string(ProtectableItemTypeMicrosoftClassicComputevirtualMachines):
19321		var aisccvpi AzureIaaSClassicComputeVMProtectableItem
19322		err := json.Unmarshal(body, &aisccvpi)
19323		return aisccvpi, err
19324	case string(ProtectableItemTypeMicrosoftComputevirtualMachines):
19325		var aiscvpi AzureIaaSComputeVMProtectableItem
19326		err := json.Unmarshal(body, &aiscvpi)
19327		return aiscvpi, err
19328	case string(ProtectableItemTypeAzureVMWorkloadProtectableItem):
19329		var avwpi AzureVMWorkloadProtectableItem
19330		err := json.Unmarshal(body, &avwpi)
19331		return avwpi, err
19332	case string(ProtectableItemTypeSAPAseSystem):
19333		var avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem
19334		err := json.Unmarshal(body, &avwsaspi)
19335		return avwsaspi, err
19336	case string(ProtectableItemTypeSAPHanaDatabase):
19337		var avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem
19338		err := json.Unmarshal(body, &avwshdpi)
19339		return avwshdpi, err
19340	case string(ProtectableItemTypeSAPHanaSystem):
19341		var avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem
19342		err := json.Unmarshal(body, &avwshspi)
19343		return avwshspi, err
19344	case string(ProtectableItemTypeSQLAvailabilityGroupContainer):
19345		var avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem
19346		err := json.Unmarshal(body, &avwsagpi)
19347		return avwsagpi, err
19348	case string(ProtectableItemTypeSQLDataBase):
19349		var avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem
19350		err := json.Unmarshal(body, &avwsdpi)
19351		return avwsdpi, err
19352	case string(ProtectableItemTypeSQLInstance):
19353		var avwsipi AzureVMWorkloadSQLInstanceProtectableItem
19354		err := json.Unmarshal(body, &avwsipi)
19355		return avwsipi, err
19356	case string(ProtectableItemTypeIaaSVMProtectableItem):
19357		var ispi IaaSVMProtectableItem
19358		err := json.Unmarshal(body, &ispi)
19359		return ispi, err
19360	default:
19361		var wpi WorkloadProtectableItem
19362		err := json.Unmarshal(body, &wpi)
19363		return wpi, err
19364	}
19365}
19366func unmarshalBasicWorkloadProtectableItemArray(body []byte) ([]BasicWorkloadProtectableItem, error) {
19367	var rawMessages []*json.RawMessage
19368	err := json.Unmarshal(body, &rawMessages)
19369	if err != nil {
19370		return nil, err
19371	}
19372
19373	wpiArray := make([]BasicWorkloadProtectableItem, len(rawMessages))
19374
19375	for index, rawMessage := range rawMessages {
19376		wpi, err := unmarshalBasicWorkloadProtectableItem(*rawMessage)
19377		if err != nil {
19378			return nil, err
19379		}
19380		wpiArray[index] = wpi
19381	}
19382	return wpiArray, nil
19383}
19384
19385// MarshalJSON is the custom marshaler for WorkloadProtectableItem.
19386func (wpi WorkloadProtectableItem) MarshalJSON() ([]byte, error) {
19387	wpi.ProtectableItemType = ProtectableItemTypeWorkloadProtectableItem
19388	objectMap := make(map[string]interface{})
19389	if wpi.BackupManagementType != nil {
19390		objectMap["backupManagementType"] = wpi.BackupManagementType
19391	}
19392	if wpi.WorkloadType != nil {
19393		objectMap["workloadType"] = wpi.WorkloadType
19394	}
19395	if wpi.FriendlyName != nil {
19396		objectMap["friendlyName"] = wpi.FriendlyName
19397	}
19398	if wpi.ProtectionState != "" {
19399		objectMap["protectionState"] = wpi.ProtectionState
19400	}
19401	if wpi.ProtectableItemType != "" {
19402		objectMap["protectableItemType"] = wpi.ProtectableItemType
19403	}
19404	return json.Marshal(objectMap)
19405}
19406
19407// AsAzureFileShareProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19408func (wpi WorkloadProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
19409	return nil, false
19410}
19411
19412// AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19413func (wpi WorkloadProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
19414	return nil, false
19415}
19416
19417// AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19418func (wpi WorkloadProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
19419	return nil, false
19420}
19421
19422// AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19423func (wpi WorkloadProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
19424	return nil, false
19425}
19426
19427// AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19428func (wpi WorkloadProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
19429	return nil, false
19430}
19431
19432// AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19433func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
19434	return nil, false
19435}
19436
19437// AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19438func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
19439	return nil, false
19440}
19441
19442// AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19443func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
19444	return nil, false
19445}
19446
19447// AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19448func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
19449	return nil, false
19450}
19451
19452// AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19453func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
19454	return nil, false
19455}
19456
19457// AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19458func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
19459	return nil, false
19460}
19461
19462// AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19463func (wpi WorkloadProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
19464	return nil, false
19465}
19466
19467// AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19468func (wpi WorkloadProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
19469	return nil, false
19470}
19471
19472// AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19473func (wpi WorkloadProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
19474	return &wpi, true
19475}
19476
19477// AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
19478func (wpi WorkloadProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
19479	return &wpi, true
19480}
19481
19482// WorkloadProtectableItemResource base class for backup item. Workload-specific backup items are derived
19483// from this class.
19484type WorkloadProtectableItemResource struct {
19485	// Properties - WorkloadProtectableItemResource properties
19486	Properties BasicWorkloadProtectableItem `json:"properties,omitempty"`
19487	// ID - READ-ONLY; Resource Id represents the complete path to the resource.
19488	ID *string `json:"id,omitempty"`
19489	// Name - READ-ONLY; Resource name associated with the resource.
19490	Name *string `json:"name,omitempty"`
19491	// Type - READ-ONLY; Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
19492	Type *string `json:"type,omitempty"`
19493	// Location - Resource location.
19494	Location *string `json:"location,omitempty"`
19495	// Tags - Resource tags.
19496	Tags map[string]*string `json:"tags"`
19497	// ETag - Optional ETag.
19498	ETag *string `json:"eTag,omitempty"`
19499}
19500
19501// MarshalJSON is the custom marshaler for WorkloadProtectableItemResource.
19502func (wpir WorkloadProtectableItemResource) MarshalJSON() ([]byte, error) {
19503	objectMap := make(map[string]interface{})
19504	objectMap["properties"] = wpir.Properties
19505	if wpir.Location != nil {
19506		objectMap["location"] = wpir.Location
19507	}
19508	if wpir.Tags != nil {
19509		objectMap["tags"] = wpir.Tags
19510	}
19511	if wpir.ETag != nil {
19512		objectMap["eTag"] = wpir.ETag
19513	}
19514	return json.Marshal(objectMap)
19515}
19516
19517// UnmarshalJSON is the custom unmarshaler for WorkloadProtectableItemResource struct.
19518func (wpir *WorkloadProtectableItemResource) UnmarshalJSON(body []byte) error {
19519	var m map[string]*json.RawMessage
19520	err := json.Unmarshal(body, &m)
19521	if err != nil {
19522		return err
19523	}
19524	for k, v := range m {
19525		switch k {
19526		case "properties":
19527			if v != nil {
19528				properties, err := unmarshalBasicWorkloadProtectableItem(*v)
19529				if err != nil {
19530					return err
19531				}
19532				wpir.Properties = properties
19533			}
19534		case "id":
19535			if v != nil {
19536				var ID string
19537				err = json.Unmarshal(*v, &ID)
19538				if err != nil {
19539					return err
19540				}
19541				wpir.ID = &ID
19542			}
19543		case "name":
19544			if v != nil {
19545				var name string
19546				err = json.Unmarshal(*v, &name)
19547				if err != nil {
19548					return err
19549				}
19550				wpir.Name = &name
19551			}
19552		case "type":
19553			if v != nil {
19554				var typeVar string
19555				err = json.Unmarshal(*v, &typeVar)
19556				if err != nil {
19557					return err
19558				}
19559				wpir.Type = &typeVar
19560			}
19561		case "location":
19562			if v != nil {
19563				var location string
19564				err = json.Unmarshal(*v, &location)
19565				if err != nil {
19566					return err
19567				}
19568				wpir.Location = &location
19569			}
19570		case "tags":
19571			if v != nil {
19572				var tags map[string]*string
19573				err = json.Unmarshal(*v, &tags)
19574				if err != nil {
19575					return err
19576				}
19577				wpir.Tags = tags
19578			}
19579		case "eTag":
19580			if v != nil {
19581				var eTag string
19582				err = json.Unmarshal(*v, &eTag)
19583				if err != nil {
19584					return err
19585				}
19586				wpir.ETag = &eTag
19587			}
19588		}
19589	}
19590
19591	return nil
19592}
19593
19594// WorkloadProtectableItemResourceList list of WorkloadProtectableItem resources
19595type WorkloadProtectableItemResourceList struct {
19596	autorest.Response `json:"-"`
19597	// Value - List of resources.
19598	Value *[]WorkloadProtectableItemResource `json:"value,omitempty"`
19599	// NextLink - The uri to fetch the next page of resources. Call ListNext() fetches next page of resources.
19600	NextLink *string `json:"nextLink,omitempty"`
19601}
19602
19603// WorkloadProtectableItemResourceListIterator provides access to a complete listing of
19604// WorkloadProtectableItemResource values.
19605type WorkloadProtectableItemResourceListIterator struct {
19606	i    int
19607	page WorkloadProtectableItemResourceListPage
19608}
19609
19610// NextWithContext advances to the next value.  If there was an error making
19611// the request the iterator does not advance and the error is returned.
19612func (iter *WorkloadProtectableItemResourceListIterator) NextWithContext(ctx context.Context) (err error) {
19613	if tracing.IsEnabled() {
19614		ctx = tracing.StartSpan(ctx, fqdn+"/WorkloadProtectableItemResourceListIterator.NextWithContext")
19615		defer func() {
19616			sc := -1
19617			if iter.Response().Response.Response != nil {
19618				sc = iter.Response().Response.Response.StatusCode
19619			}
19620			tracing.EndSpan(ctx, sc, err)
19621		}()
19622	}
19623	iter.i++
19624	if iter.i < len(iter.page.Values()) {
19625		return nil
19626	}
19627	err = iter.page.NextWithContext(ctx)
19628	if err != nil {
19629		iter.i--
19630		return err
19631	}
19632	iter.i = 0
19633	return nil
19634}
19635
19636// Next advances to the next value.  If there was an error making
19637// the request the iterator does not advance and the error is returned.
19638// Deprecated: Use NextWithContext() instead.
19639func (iter *WorkloadProtectableItemResourceListIterator) Next() error {
19640	return iter.NextWithContext(context.Background())
19641}
19642
19643// NotDone returns true if the enumeration should be started or is not yet complete.
19644func (iter WorkloadProtectableItemResourceListIterator) NotDone() bool {
19645	return iter.page.NotDone() && iter.i < len(iter.page.Values())
19646}
19647
19648// Response returns the raw server response from the last page request.
19649func (iter WorkloadProtectableItemResourceListIterator) Response() WorkloadProtectableItemResourceList {
19650	return iter.page.Response()
19651}
19652
19653// Value returns the current value or a zero-initialized value if the
19654// iterator has advanced beyond the end of the collection.
19655func (iter WorkloadProtectableItemResourceListIterator) Value() WorkloadProtectableItemResource {
19656	if !iter.page.NotDone() {
19657		return WorkloadProtectableItemResource{}
19658	}
19659	return iter.page.Values()[iter.i]
19660}
19661
19662// Creates a new instance of the WorkloadProtectableItemResourceListIterator type.
19663func NewWorkloadProtectableItemResourceListIterator(page WorkloadProtectableItemResourceListPage) WorkloadProtectableItemResourceListIterator {
19664	return WorkloadProtectableItemResourceListIterator{page: page}
19665}
19666
19667// IsEmpty returns true if the ListResult contains no values.
19668func (wpirl WorkloadProtectableItemResourceList) IsEmpty() bool {
19669	return wpirl.Value == nil || len(*wpirl.Value) == 0
19670}
19671
19672// hasNextLink returns true if the NextLink is not empty.
19673func (wpirl WorkloadProtectableItemResourceList) hasNextLink() bool {
19674	return wpirl.NextLink != nil && len(*wpirl.NextLink) != 0
19675}
19676
19677// workloadProtectableItemResourceListPreparer prepares a request to retrieve the next set of results.
19678// It returns nil if no more results exist.
19679func (wpirl WorkloadProtectableItemResourceList) workloadProtectableItemResourceListPreparer(ctx context.Context) (*http.Request, error) {
19680	if !wpirl.hasNextLink() {
19681		return nil, nil
19682	}
19683	return autorest.Prepare((&http.Request{}).WithContext(ctx),
19684		autorest.AsJSON(),
19685		autorest.AsGet(),
19686		autorest.WithBaseURL(to.String(wpirl.NextLink)))
19687}
19688
19689// WorkloadProtectableItemResourceListPage contains a page of WorkloadProtectableItemResource values.
19690type WorkloadProtectableItemResourceListPage struct {
19691	fn    func(context.Context, WorkloadProtectableItemResourceList) (WorkloadProtectableItemResourceList, error)
19692	wpirl WorkloadProtectableItemResourceList
19693}
19694
19695// NextWithContext advances to the next page of values.  If there was an error making
19696// the request the page does not advance and the error is returned.
19697func (page *WorkloadProtectableItemResourceListPage) NextWithContext(ctx context.Context) (err error) {
19698	if tracing.IsEnabled() {
19699		ctx = tracing.StartSpan(ctx, fqdn+"/WorkloadProtectableItemResourceListPage.NextWithContext")
19700		defer func() {
19701			sc := -1
19702			if page.Response().Response.Response != nil {
19703				sc = page.Response().Response.Response.StatusCode
19704			}
19705			tracing.EndSpan(ctx, sc, err)
19706		}()
19707	}
19708	for {
19709		next, err := page.fn(ctx, page.wpirl)
19710		if err != nil {
19711			return err
19712		}
19713		page.wpirl = next
19714		if !next.hasNextLink() || !next.IsEmpty() {
19715			break
19716		}
19717	}
19718	return nil
19719}
19720
19721// Next advances to the next page of values.  If there was an error making
19722// the request the page does not advance and the error is returned.
19723// Deprecated: Use NextWithContext() instead.
19724func (page *WorkloadProtectableItemResourceListPage) Next() error {
19725	return page.NextWithContext(context.Background())
19726}
19727
19728// NotDone returns true if the page enumeration should be started or is not yet complete.
19729func (page WorkloadProtectableItemResourceListPage) NotDone() bool {
19730	return !page.wpirl.IsEmpty()
19731}
19732
19733// Response returns the raw server response from the last page request.
19734func (page WorkloadProtectableItemResourceListPage) Response() WorkloadProtectableItemResourceList {
19735	return page.wpirl
19736}
19737
19738// Values returns the slice of values for the current page or nil if there are no values.
19739func (page WorkloadProtectableItemResourceListPage) Values() []WorkloadProtectableItemResource {
19740	if page.wpirl.IsEmpty() {
19741		return nil
19742	}
19743	return *page.wpirl.Value
19744}
19745
19746// Creates a new instance of the WorkloadProtectableItemResourceListPage type.
19747func NewWorkloadProtectableItemResourceListPage(cur WorkloadProtectableItemResourceList, getNextPage func(context.Context, WorkloadProtectableItemResourceList) (WorkloadProtectableItemResourceList, error)) WorkloadProtectableItemResourceListPage {
19748	return WorkloadProtectableItemResourceListPage{
19749		fn:    getNextPage,
19750		wpirl: cur,
19751	}
19752}
19753
19754// YearlyRetentionSchedule yearly retention schedule.
19755type YearlyRetentionSchedule struct {
19756	// RetentionScheduleFormatType - Retention schedule format for yearly retention policy. Possible values include: 'RetentionScheduleFormatInvalid', 'RetentionScheduleFormatDaily', 'RetentionScheduleFormatWeekly'
19757	RetentionScheduleFormatType RetentionScheduleFormat `json:"retentionScheduleFormatType,omitempty"`
19758	// MonthsOfYear - List of months of year of yearly retention policy.
19759	MonthsOfYear *[]MonthOfYear `json:"monthsOfYear,omitempty"`
19760	// RetentionScheduleDaily - Daily retention format for yearly retention policy.
19761	RetentionScheduleDaily *DailyRetentionFormat `json:"retentionScheduleDaily,omitempty"`
19762	// RetentionScheduleWeekly - Weekly retention format for yearly retention policy.
19763	RetentionScheduleWeekly *WeeklyRetentionFormat `json:"retentionScheduleWeekly,omitempty"`
19764	// RetentionTimes - Retention times of retention policy.
19765	RetentionTimes *[]date.Time `json:"retentionTimes,omitempty"`
19766	// RetentionDuration - Retention duration of retention Policy.
19767	RetentionDuration *RetentionDuration `json:"retentionDuration,omitempty"`
19768}
19769