...

Source file src/github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2020-02-02/backup/models.go

Documentation: github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2020-02-02/backup

     1  package 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  
     9  import (
    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.
    21  const fqdn = "github.com/Azure/azure-sdk-for-go/services/recoveryservices/mgmt/2020-02-02/backup"
    22  
    23  // AzureBackupGoalFeatureSupportRequest azure backup goal feature specific request.
    24  type 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.
    30  func (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.
    40  func (abgfsr AzureBackupGoalFeatureSupportRequest) AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool) {
    41  	return &abgfsr, true
    42  }
    43  
    44  // AsAzureVMResourceFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureBackupGoalFeatureSupportRequest.
    45  func (abgfsr AzureBackupGoalFeatureSupportRequest) AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool) {
    46  	return nil, false
    47  }
    48  
    49  // AsFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureBackupGoalFeatureSupportRequest.
    50  func (abgfsr AzureBackupGoalFeatureSupportRequest) AsFeatureSupportRequest() (*FeatureSupportRequest, bool) {
    51  	return nil, false
    52  }
    53  
    54  // AsBasicFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureBackupGoalFeatureSupportRequest.
    55  func (abgfsr AzureBackupGoalFeatureSupportRequest) AsBasicFeatureSupportRequest() (BasicFeatureSupportRequest, bool) {
    56  	return &abgfsr, true
    57  }
    58  
    59  // AzureBackupServerContainer azureBackupServer (DPMVenus) workload-specific protection container.
    60  type 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.
    90  func (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.
   136  func (absc AzureBackupServerContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
   137  	return &absc, true
   138  }
   139  
   140  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   141  func (absc AzureBackupServerContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
   142  	return nil, false
   143  }
   144  
   145  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   146  func (absc AzureBackupServerContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
   147  	return nil, false
   148  }
   149  
   150  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   151  func (absc AzureBackupServerContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
   152  	return nil, false
   153  }
   154  
   155  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   156  func (absc AzureBackupServerContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
   157  	return nil, false
   158  }
   159  
   160  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   161  func (absc AzureBackupServerContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
   162  	return nil, false
   163  }
   164  
   165  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   166  func (absc AzureBackupServerContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
   167  	return nil, false
   168  }
   169  
   170  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   171  func (absc AzureBackupServerContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
   172  	return nil, false
   173  }
   174  
   175  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   176  func (absc AzureBackupServerContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
   177  	return nil, false
   178  }
   179  
   180  // AsDpmContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   181  func (absc AzureBackupServerContainer) AsDpmContainer() (*DpmContainer, bool) {
   182  	return nil, false
   183  }
   184  
   185  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   186  func (absc AzureBackupServerContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
   187  	return &absc, true
   188  }
   189  
   190  // AsGenericContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   191  func (absc AzureBackupServerContainer) AsGenericContainer() (*GenericContainer, bool) {
   192  	return nil, false
   193  }
   194  
   195  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   196  func (absc AzureBackupServerContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
   197  	return nil, false
   198  }
   199  
   200  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   201  func (absc AzureBackupServerContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
   202  	return nil, false
   203  }
   204  
   205  // AsMabContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   206  func (absc AzureBackupServerContainer) AsMabContainer() (*MabContainer, bool) {
   207  	return nil, false
   208  }
   209  
   210  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   211  func (absc AzureBackupServerContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
   212  	return nil, false
   213  }
   214  
   215  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureBackupServerContainer.
   216  func (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.
   221  type 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.
   251  func (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.
   297  func (abse AzureBackupServerEngine) AsAzureBackupServerEngine() (*AzureBackupServerEngine, bool) {
   298  	return &abse, true
   299  }
   300  
   301  // AsDpmBackupEngine is the BasicEngineBase implementation for AzureBackupServerEngine.
   302  func (abse AzureBackupServerEngine) AsDpmBackupEngine() (*DpmBackupEngine, bool) {
   303  	return nil, false
   304  }
   305  
   306  // AsEngineBase is the BasicEngineBase implementation for AzureBackupServerEngine.
   307  func (abse AzureBackupServerEngine) AsEngineBase() (*EngineBase, bool) {
   308  	return nil, false
   309  }
   310  
   311  // AsBasicEngineBase is the BasicEngineBase implementation for AzureBackupServerEngine.
   312  func (abse AzureBackupServerEngine) AsBasicEngineBase() (BasicEngineBase, bool) {
   313  	return &abse, true
   314  }
   315  
   316  // AzureFileShareBackupRequest azureFileShare workload-specific backup request.
   317  type 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.
   325  func (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.
   338  func (afsbr AzureFileShareBackupRequest) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
   339  	return &afsbr, true
   340  }
   341  
   342  // AsAzureWorkloadBackupRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
   343  func (afsbr AzureFileShareBackupRequest) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
   344  	return nil, false
   345  }
   346  
   347  // AsIaasVMBackupRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
   348  func (afsbr AzureFileShareBackupRequest) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
   349  	return nil, false
   350  }
   351  
   352  // AsRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
   353  func (afsbr AzureFileShareBackupRequest) AsRequest() (*Request, bool) {
   354  	return nil, false
   355  }
   356  
   357  // AsBasicRequest is the BasicRequest implementation for AzureFileShareBackupRequest.
   358  func (afsbr AzureFileShareBackupRequest) AsBasicRequest() (BasicRequest, bool) {
   359  	return &afsbr, true
   360  }
   361  
   362  // AzureFileShareProtectableItem protectable item for Azure Fileshare workloads.
   363  type 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.
   383  func (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.
   414  func (afspi AzureFileShareProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
   415  	return &afspi, true
   416  }
   417  
   418  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   419  func (afspi AzureFileShareProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
   420  	return nil, false
   421  }
   422  
   423  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   424  func (afspi AzureFileShareProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
   425  	return nil, false
   426  }
   427  
   428  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   429  func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
   430  	return nil, false
   431  }
   432  
   433  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   434  func (afspi AzureFileShareProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
   435  	return nil, false
   436  }
   437  
   438  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   439  func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
   440  	return nil, false
   441  }
   442  
   443  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   444  func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
   445  	return nil, false
   446  }
   447  
   448  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   449  func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
   450  	return nil, false
   451  }
   452  
   453  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   454  func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
   455  	return nil, false
   456  }
   457  
   458  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   459  func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
   460  	return nil, false
   461  }
   462  
   463  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   464  func (afspi AzureFileShareProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
   465  	return nil, false
   466  }
   467  
   468  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   469  func (afspi AzureFileShareProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
   470  	return nil, false
   471  }
   472  
   473  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   474  func (afspi AzureFileShareProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
   475  	return nil, false
   476  }
   477  
   478  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   479  func (afspi AzureFileShareProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
   480  	return nil, false
   481  }
   482  
   483  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureFileShareProtectableItem.
   484  func (afspi AzureFileShareProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
   485  	return &afspi, true
   486  }
   487  
   488  // AzureFileshareProtectedItem azure File Share workload-specific backup item.
   489  type 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.
   535  func (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.
   605  func (afpi AzureFileshareProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
   606  	return &afpi, true
   607  }
   608  
   609  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   610  func (afpi AzureFileshareProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
   611  	return nil, false
   612  }
   613  
   614  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   615  func (afpi AzureFileshareProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
   616  	return nil, false
   617  }
   618  
   619  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   620  func (afpi AzureFileshareProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
   621  	return nil, false
   622  }
   623  
   624  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   625  func (afpi AzureFileshareProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
   626  	return nil, false
   627  }
   628  
   629  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   630  func (afpi AzureFileshareProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
   631  	return nil, false
   632  }
   633  
   634  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   635  func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
   636  	return nil, false
   637  }
   638  
   639  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   640  func (afpi AzureFileshareProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
   641  	return nil, false
   642  }
   643  
   644  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   645  func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
   646  	return nil, false
   647  }
   648  
   649  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   650  func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
   651  	return nil, false
   652  }
   653  
   654  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   655  func (afpi AzureFileshareProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
   656  	return nil, false
   657  }
   658  
   659  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   660  func (afpi AzureFileshareProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
   661  	return nil, false
   662  }
   663  
   664  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   665  func (afpi AzureFileshareProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
   666  	return nil, false
   667  }
   668  
   669  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   670  func (afpi AzureFileshareProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
   671  	return nil, false
   672  }
   673  
   674  // AsProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   675  func (afpi AzureFileshareProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
   676  	return nil, false
   677  }
   678  
   679  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureFileshareProtectedItem.
   680  func (afpi AzureFileshareProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
   681  	return &afpi, true
   682  }
   683  
   684  // AzureFileshareProtectedItemExtendedInfo additional information about Azure File Share backup item.
   685  type 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.
   699  func (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.
   714  type 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.
   730  func (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.
   751  func (afspp AzureFileShareProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
   752  	return nil, false
   753  }
   754  
   755  // AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
   756  func (afspp AzureFileShareProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
   757  	return &afspp, true
   758  }
   759  
   760  // AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
   761  func (afspp AzureFileShareProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
   762  	return nil, false
   763  }
   764  
   765  // AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
   766  func (afspp AzureFileShareProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
   767  	return nil, false
   768  }
   769  
   770  // AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
   771  func (afspp AzureFileShareProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
   772  	return nil, false
   773  }
   774  
   775  // AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
   776  func (afspp AzureFileShareProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
   777  	return nil, false
   778  }
   779  
   780  // AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
   781  func (afspp AzureFileShareProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
   782  	return nil, false
   783  }
   784  
   785  // AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureFileShareProtectionPolicy.
   786  func (afspp AzureFileShareProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
   787  	return &afspp, true
   788  }
   789  
   790  // UnmarshalJSON is the custom unmarshaler for AzureFileShareProtectionPolicy struct.
   791  func (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.
   859  type 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.
   869  func (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.
   885  func (afspir AzureFileShareProvisionILRRequest) AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool) {
   886  	return &afspir, true
   887  }
   888  
   889  // AsIaasVMILRRegistrationRequest is the BasicILRRequest implementation for AzureFileShareProvisionILRRequest.
   890  func (afspir AzureFileShareProvisionILRRequest) AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool) {
   891  	return nil, false
   892  }
   893  
   894  // AsILRRequest is the BasicILRRequest implementation for AzureFileShareProvisionILRRequest.
   895  func (afspir AzureFileShareProvisionILRRequest) AsILRRequest() (*ILRRequest, bool) {
   896  	return nil, false
   897  }
   898  
   899  // AsBasicILRRequest is the BasicILRRequest implementation for AzureFileShareProvisionILRRequest.
   900  func (afspir AzureFileShareProvisionILRRequest) AsBasicILRRequest() (BasicILRRequest, bool) {
   901  	return &afspir, true
   902  }
   903  
   904  // AzureFileShareRecoveryPoint azure File Share workload specific backup copy.
   905  type 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.
   919  func (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.
   929  func (afsrp AzureFileShareRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
   930  	return &afsrp, true
   931  }
   932  
   933  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   934  func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
   935  	return nil, false
   936  }
   937  
   938  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   939  func (afsrp AzureFileShareRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
   940  	return nil, false
   941  }
   942  
   943  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   944  func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
   945  	return nil, false
   946  }
   947  
   948  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   949  func (afsrp AzureFileShareRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
   950  	return nil, false
   951  }
   952  
   953  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   954  func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
   955  	return nil, false
   956  }
   957  
   958  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   959  func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
   960  	return nil, false
   961  }
   962  
   963  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   964  func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
   965  	return nil, false
   966  }
   967  
   968  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   969  func (afsrp AzureFileShareRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
   970  	return nil, false
   971  }
   972  
   973  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   974  func (afsrp AzureFileShareRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
   975  	return nil, false
   976  }
   977  
   978  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   979  func (afsrp AzureFileShareRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
   980  	return nil, false
   981  }
   982  
   983  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   984  func (afsrp AzureFileShareRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
   985  	return nil, false
   986  }
   987  
   988  // AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   989  func (afsrp AzureFileShareRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
   990  	return nil, false
   991  }
   992  
   993  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureFileShareRecoveryPoint.
   994  func (afsrp AzureFileShareRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
   995  	return &afsrp, true
   996  }
   997  
   998  // AzureFileShareRestoreRequest azureFileShare Restore Request
   999  type 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.
  1017  func (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.
  1045  func (afsrr AzureFileShareRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
  1046  	return &afsrr, true
  1047  }
  1048  
  1049  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1050  func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
  1051  	return nil, false
  1052  }
  1053  
  1054  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1055  func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
  1056  	return nil, false
  1057  }
  1058  
  1059  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1060  func (afsrr AzureFileShareRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
  1061  	return nil, false
  1062  }
  1063  
  1064  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1065  func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
  1066  	return nil, false
  1067  }
  1068  
  1069  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1070  func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
  1071  	return nil, false
  1072  }
  1073  
  1074  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1075  func (afsrr AzureFileShareRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
  1076  	return nil, false
  1077  }
  1078  
  1079  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1080  func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
  1081  	return nil, false
  1082  }
  1083  
  1084  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1085  func (afsrr AzureFileShareRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
  1086  	return nil, false
  1087  }
  1088  
  1089  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1090  func (afsrr AzureFileShareRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
  1091  	return nil, false
  1092  }
  1093  
  1094  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1095  func (afsrr AzureFileShareRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
  1096  	return nil, false
  1097  }
  1098  
  1099  // AsRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1100  func (afsrr AzureFileShareRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
  1101  	return nil, false
  1102  }
  1103  
  1104  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureFileShareRestoreRequest.
  1105  func (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.
  1111  type 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.
  1131  func (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.
  1162  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  1163  	return nil, false
  1164  }
  1165  
  1166  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1167  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  1168  	return &aisccvc, true
  1169  }
  1170  
  1171  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1172  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  1173  	return nil, false
  1174  }
  1175  
  1176  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1177  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  1178  	return nil, false
  1179  }
  1180  
  1181  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1182  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  1183  	return nil, false
  1184  }
  1185  
  1186  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1187  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  1188  	return nil, false
  1189  }
  1190  
  1191  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1192  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  1193  	return nil, false
  1194  }
  1195  
  1196  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1197  func (aisccvc AzureIaaSClassicComputeVMContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  1198  	return nil, false
  1199  }
  1200  
  1201  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1202  func (aisccvc AzureIaaSClassicComputeVMContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  1203  	return nil, false
  1204  }
  1205  
  1206  // AsDpmContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1207  func (aisccvc AzureIaaSClassicComputeVMContainer) AsDpmContainer() (*DpmContainer, bool) {
  1208  	return nil, false
  1209  }
  1210  
  1211  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1212  func (aisccvc AzureIaaSClassicComputeVMContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  1213  	return nil, false
  1214  }
  1215  
  1216  // AsGenericContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1217  func (aisccvc AzureIaaSClassicComputeVMContainer) AsGenericContainer() (*GenericContainer, bool) {
  1218  	return nil, false
  1219  }
  1220  
  1221  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1222  func (aisccvc AzureIaaSClassicComputeVMContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  1223  	return nil, false
  1224  }
  1225  
  1226  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1227  func (aisccvc AzureIaaSClassicComputeVMContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  1228  	return &aisccvc, true
  1229  }
  1230  
  1231  // AsMabContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1232  func (aisccvc AzureIaaSClassicComputeVMContainer) AsMabContainer() (*MabContainer, bool) {
  1233  	return nil, false
  1234  }
  1235  
  1236  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1237  func (aisccvc AzureIaaSClassicComputeVMContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
  1238  	return nil, false
  1239  }
  1240  
  1241  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSClassicComputeVMContainer.
  1242  func (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.
  1248  type 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.
  1264  func (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.
  1289  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  1290  	return nil, false
  1291  }
  1292  
  1293  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1294  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  1295  	return &aisccvpi, true
  1296  }
  1297  
  1298  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1299  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  1300  	return nil, false
  1301  }
  1302  
  1303  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1304  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  1305  	return nil, false
  1306  }
  1307  
  1308  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1309  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  1310  	return nil, false
  1311  }
  1312  
  1313  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1314  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  1315  	return nil, false
  1316  }
  1317  
  1318  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1319  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  1320  	return nil, false
  1321  }
  1322  
  1323  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1324  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  1325  	return nil, false
  1326  }
  1327  
  1328  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1329  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  1330  	return nil, false
  1331  }
  1332  
  1333  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1334  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  1335  	return nil, false
  1336  }
  1337  
  1338  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1339  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  1340  	return nil, false
  1341  }
  1342  
  1343  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1344  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  1345  	return nil, false
  1346  }
  1347  
  1348  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1349  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  1350  	return &aisccvpi, true
  1351  }
  1352  
  1353  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1354  func (aisccvpi AzureIaaSClassicComputeVMProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  1355  	return nil, false
  1356  }
  1357  
  1358  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSClassicComputeVMProtectableItem.
  1359  func (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.
  1365  type 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.
  1420  func (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.
  1505  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  1506  	return nil, false
  1507  }
  1508  
  1509  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1510  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  1511  	return &aisccvpi, true
  1512  }
  1513  
  1514  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1515  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  1516  	return nil, false
  1517  }
  1518  
  1519  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1520  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  1521  	return nil, false
  1522  }
  1523  
  1524  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1525  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  1526  	return &aisccvpi, true
  1527  }
  1528  
  1529  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1530  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  1531  	return nil, false
  1532  }
  1533  
  1534  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1535  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  1536  	return nil, false
  1537  }
  1538  
  1539  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1540  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  1541  	return nil, false
  1542  }
  1543  
  1544  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1545  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  1546  	return nil, false
  1547  }
  1548  
  1549  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1550  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  1551  	return nil, false
  1552  }
  1553  
  1554  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1555  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  1556  	return nil, false
  1557  }
  1558  
  1559  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1560  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  1561  	return nil, false
  1562  }
  1563  
  1564  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1565  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  1566  	return nil, false
  1567  }
  1568  
  1569  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1570  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  1571  	return nil, false
  1572  }
  1573  
  1574  // AsProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1575  func (aisccvpi AzureIaaSClassicComputeVMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  1576  	return nil, false
  1577  }
  1578  
  1579  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureIaaSClassicComputeVMProtectedItem.
  1580  func (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.
  1586  type 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.
  1606  func (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.
  1637  func (aiscvc AzureIaaSComputeVMContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  1638  	return nil, false
  1639  }
  1640  
  1641  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1642  func (aiscvc AzureIaaSComputeVMContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  1643  	return nil, false
  1644  }
  1645  
  1646  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1647  func (aiscvc AzureIaaSComputeVMContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  1648  	return &aiscvc, true
  1649  }
  1650  
  1651  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1652  func (aiscvc AzureIaaSComputeVMContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  1653  	return nil, false
  1654  }
  1655  
  1656  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1657  func (aiscvc AzureIaaSComputeVMContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  1658  	return nil, false
  1659  }
  1660  
  1661  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1662  func (aiscvc AzureIaaSComputeVMContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  1663  	return nil, false
  1664  }
  1665  
  1666  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1667  func (aiscvc AzureIaaSComputeVMContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  1668  	return nil, false
  1669  }
  1670  
  1671  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1672  func (aiscvc AzureIaaSComputeVMContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  1673  	return nil, false
  1674  }
  1675  
  1676  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1677  func (aiscvc AzureIaaSComputeVMContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  1678  	return nil, false
  1679  }
  1680  
  1681  // AsDpmContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1682  func (aiscvc AzureIaaSComputeVMContainer) AsDpmContainer() (*DpmContainer, bool) {
  1683  	return nil, false
  1684  }
  1685  
  1686  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1687  func (aiscvc AzureIaaSComputeVMContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  1688  	return nil, false
  1689  }
  1690  
  1691  // AsGenericContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1692  func (aiscvc AzureIaaSComputeVMContainer) AsGenericContainer() (*GenericContainer, bool) {
  1693  	return nil, false
  1694  }
  1695  
  1696  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1697  func (aiscvc AzureIaaSComputeVMContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  1698  	return nil, false
  1699  }
  1700  
  1701  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1702  func (aiscvc AzureIaaSComputeVMContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  1703  	return &aiscvc, true
  1704  }
  1705  
  1706  // AsMabContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1707  func (aiscvc AzureIaaSComputeVMContainer) AsMabContainer() (*MabContainer, bool) {
  1708  	return nil, false
  1709  }
  1710  
  1711  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1712  func (aiscvc AzureIaaSComputeVMContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
  1713  	return nil, false
  1714  }
  1715  
  1716  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureIaaSComputeVMContainer.
  1717  func (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.
  1723  type 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.
  1739  func (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.
  1764  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  1765  	return nil, false
  1766  }
  1767  
  1768  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1769  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  1770  	return nil, false
  1771  }
  1772  
  1773  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1774  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  1775  	return &aiscvpi, true
  1776  }
  1777  
  1778  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1779  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  1780  	return nil, false
  1781  }
  1782  
  1783  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1784  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  1785  	return nil, false
  1786  }
  1787  
  1788  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1789  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  1790  	return nil, false
  1791  }
  1792  
  1793  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1794  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  1795  	return nil, false
  1796  }
  1797  
  1798  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1799  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  1800  	return nil, false
  1801  }
  1802  
  1803  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1804  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  1805  	return nil, false
  1806  }
  1807  
  1808  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1809  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  1810  	return nil, false
  1811  }
  1812  
  1813  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1814  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  1815  	return nil, false
  1816  }
  1817  
  1818  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1819  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  1820  	return nil, false
  1821  }
  1822  
  1823  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1824  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  1825  	return &aiscvpi, true
  1826  }
  1827  
  1828  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1829  func (aiscvpi AzureIaaSComputeVMProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  1830  	return nil, false
  1831  }
  1832  
  1833  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureIaaSComputeVMProtectableItem.
  1834  func (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.
  1840  type 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.
  1895  func (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.
  1980  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  1981  	return nil, false
  1982  }
  1983  
  1984  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  1985  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  1986  	return nil, false
  1987  }
  1988  
  1989  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  1990  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  1991  	return &aiscvpi, true
  1992  }
  1993  
  1994  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  1995  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  1996  	return nil, false
  1997  }
  1998  
  1999  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2000  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  2001  	return &aiscvpi, true
  2002  }
  2003  
  2004  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2005  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  2006  	return nil, false
  2007  }
  2008  
  2009  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2010  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  2011  	return nil, false
  2012  }
  2013  
  2014  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2015  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  2016  	return nil, false
  2017  }
  2018  
  2019  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2020  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  2021  	return nil, false
  2022  }
  2023  
  2024  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2025  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  2026  	return nil, false
  2027  }
  2028  
  2029  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2030  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  2031  	return nil, false
  2032  }
  2033  
  2034  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2035  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  2036  	return nil, false
  2037  }
  2038  
  2039  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2040  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  2041  	return nil, false
  2042  }
  2043  
  2044  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2045  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  2046  	return nil, false
  2047  }
  2048  
  2049  // AsProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2050  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  2051  	return nil, false
  2052  }
  2053  
  2054  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureIaaSComputeVMProtectedItem.
  2055  func (aiscvpi AzureIaaSComputeVMProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
  2056  	return &aiscvpi, true
  2057  }
  2058  
  2059  // AzureIaaSVMErrorInfo azure IaaS VM workload-specific error information.
  2060  type 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.
  2072  func (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.
  2078  type 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.
  2090  func (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.
  2096  type 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.
  2126  func (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.
  2172  func (aisj AzureIaaSVMJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
  2173  	return &aisj, true
  2174  }
  2175  
  2176  // AsAzureStorageJob is the BasicJob implementation for AzureIaaSVMJob.
  2177  func (aisj AzureIaaSVMJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
  2178  	return nil, false
  2179  }
  2180  
  2181  // AsAzureWorkloadJob is the BasicJob implementation for AzureIaaSVMJob.
  2182  func (aisj AzureIaaSVMJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
  2183  	return nil, false
  2184  }
  2185  
  2186  // AsDpmJob is the BasicJob implementation for AzureIaaSVMJob.
  2187  func (aisj AzureIaaSVMJob) AsDpmJob() (*DpmJob, bool) {
  2188  	return nil, false
  2189  }
  2190  
  2191  // AsMabJob is the BasicJob implementation for AzureIaaSVMJob.
  2192  func (aisj AzureIaaSVMJob) AsMabJob() (*MabJob, bool) {
  2193  	return nil, false
  2194  }
  2195  
  2196  // AsJob is the BasicJob implementation for AzureIaaSVMJob.
  2197  func (aisj AzureIaaSVMJob) AsJob() (*Job, bool) {
  2198  	return nil, false
  2199  }
  2200  
  2201  // AsBasicJob is the BasicJob implementation for AzureIaaSVMJob.
  2202  func (aisj AzureIaaSVMJob) AsBasicJob() (BasicJob, bool) {
  2203  	return &aisj, true
  2204  }
  2205  
  2206  // AzureIaaSVMJobExtendedInfo azure IaaS VM workload-specific additional information for job.
  2207  type 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.
  2223  func (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.
  2247  type 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.
  2268  type BasicAzureIaaSVMProtectedItem interface {
  2269  	AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool)
  2270  	AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool)
  2271  	AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool)
  2272  }
  2273  
  2274  // AzureIaaSVMProtectedItem iaaS VM workload-specific backup item.
  2275  type 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  
  2329  func 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  }
  2351  func 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.
  2371  func (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.
  2456  func (aispi AzureIaaSVMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  2457  	return nil, false
  2458  }
  2459  
  2460  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2461  func (aispi AzureIaaSVMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  2462  	return nil, false
  2463  }
  2464  
  2465  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2466  func (aispi AzureIaaSVMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  2467  	return nil, false
  2468  }
  2469  
  2470  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2471  func (aispi AzureIaaSVMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  2472  	return &aispi, true
  2473  }
  2474  
  2475  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2476  func (aispi AzureIaaSVMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  2477  	return &aispi, true
  2478  }
  2479  
  2480  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2481  func (aispi AzureIaaSVMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  2482  	return nil, false
  2483  }
  2484  
  2485  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2486  func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  2487  	return nil, false
  2488  }
  2489  
  2490  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2491  func (aispi AzureIaaSVMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  2492  	return nil, false
  2493  }
  2494  
  2495  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2496  func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  2497  	return nil, false
  2498  }
  2499  
  2500  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2501  func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  2502  	return nil, false
  2503  }
  2504  
  2505  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2506  func (aispi AzureIaaSVMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  2507  	return nil, false
  2508  }
  2509  
  2510  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2511  func (aispi AzureIaaSVMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  2512  	return nil, false
  2513  }
  2514  
  2515  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2516  func (aispi AzureIaaSVMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  2517  	return nil, false
  2518  }
  2519  
  2520  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2521  func (aispi AzureIaaSVMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  2522  	return nil, false
  2523  }
  2524  
  2525  // AsProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2526  func (aispi AzureIaaSVMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  2527  	return nil, false
  2528  }
  2529  
  2530  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureIaaSVMProtectedItem.
  2531  func (aispi AzureIaaSVMProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
  2532  	return &aispi, true
  2533  }
  2534  
  2535  // AzureIaaSVMProtectedItemExtendedInfo additional information on Azure IaaS VM specific backup item.
  2536  type 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.
  2546  type 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.
  2563  func (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.
  2587  func (aispp AzureIaaSVMProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
  2588  	return nil, false
  2589  }
  2590  
  2591  // AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
  2592  func (aispp AzureIaaSVMProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
  2593  	return nil, false
  2594  }
  2595  
  2596  // AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
  2597  func (aispp AzureIaaSVMProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
  2598  	return &aispp, true
  2599  }
  2600  
  2601  // AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
  2602  func (aispp AzureIaaSVMProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
  2603  	return nil, false
  2604  }
  2605  
  2606  // AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
  2607  func (aispp AzureIaaSVMProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
  2608  	return nil, false
  2609  }
  2610  
  2611  // AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
  2612  func (aispp AzureIaaSVMProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
  2613  	return nil, false
  2614  }
  2615  
  2616  // AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
  2617  func (aispp AzureIaaSVMProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
  2618  	return nil, false
  2619  }
  2620  
  2621  // AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureIaaSVMProtectionPolicy.
  2622  func (aispp AzureIaaSVMProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
  2623  	return &aispp, true
  2624  }
  2625  
  2626  // UnmarshalJSON is the custom unmarshaler for AzureIaaSVMProtectionPolicy struct.
  2627  func (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.
  2703  type 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.
  2711  type 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  
  2726  func 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  }
  2748  func 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.
  2768  func (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.
  2793  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
  2794  	return &arsvpi, true
  2795  }
  2796  
  2797  // AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
  2798  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
  2799  	return &arsvpi, true
  2800  }
  2801  
  2802  // AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
  2803  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
  2804  	return nil, false
  2805  }
  2806  
  2807  // AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
  2808  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
  2809  	return nil, false
  2810  }
  2811  
  2812  // AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
  2813  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
  2814  	return nil, false
  2815  }
  2816  
  2817  // AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
  2818  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
  2819  	return nil, false
  2820  }
  2821  
  2822  // AsProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
  2823  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
  2824  	return nil, false
  2825  }
  2826  
  2827  // AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureRecoveryServiceVaultProtectionIntent.
  2828  func (arsvpi AzureRecoveryServiceVaultProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
  2829  	return &arsvpi, true
  2830  }
  2831  
  2832  // AzureResourceProtectionIntent iaaS VM specific backup protection intent item.
  2833  type 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.
  2851  func (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.
  2879  func (arpi AzureResourceProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
  2880  	return nil, false
  2881  }
  2882  
  2883  // AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
  2884  func (arpi AzureResourceProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
  2885  	return nil, false
  2886  }
  2887  
  2888  // AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
  2889  func (arpi AzureResourceProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
  2890  	return &arpi, true
  2891  }
  2892  
  2893  // AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
  2894  func (arpi AzureResourceProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
  2895  	return nil, false
  2896  }
  2897  
  2898  // AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
  2899  func (arpi AzureResourceProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
  2900  	return nil, false
  2901  }
  2902  
  2903  // AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
  2904  func (arpi AzureResourceProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
  2905  	return nil, false
  2906  }
  2907  
  2908  // AsProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
  2909  func (arpi AzureResourceProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
  2910  	return nil, false
  2911  }
  2912  
  2913  // AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureResourceProtectionIntent.
  2914  func (arpi AzureResourceProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
  2915  	return &arpi, true
  2916  }
  2917  
  2918  // AzureSQLAGWorkloadContainerProtectionContainer container for SQL workloads under SQL Availability Group.
  2919  type 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.
  2943  func (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.
  2980  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  2981  	return nil, false
  2982  }
  2983  
  2984  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  2985  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  2986  	return nil, false
  2987  }
  2988  
  2989  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  2990  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  2991  	return nil, false
  2992  }
  2993  
  2994  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  2995  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  2996  	return &aswcpc, true
  2997  }
  2998  
  2999  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3000  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  3001  	return nil, false
  3002  }
  3003  
  3004  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3005  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  3006  	return nil, false
  3007  }
  3008  
  3009  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3010  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  3011  	return nil, false
  3012  }
  3013  
  3014  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3015  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  3016  	return nil, false
  3017  }
  3018  
  3019  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3020  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  3021  	return &aswcpc, true
  3022  }
  3023  
  3024  // AsDpmContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3025  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsDpmContainer() (*DpmContainer, bool) {
  3026  	return nil, false
  3027  }
  3028  
  3029  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3030  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  3031  	return nil, false
  3032  }
  3033  
  3034  // AsGenericContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3035  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsGenericContainer() (*GenericContainer, bool) {
  3036  	return nil, false
  3037  }
  3038  
  3039  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3040  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  3041  	return nil, false
  3042  }
  3043  
  3044  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3045  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  3046  	return nil, false
  3047  }
  3048  
  3049  // AsMabContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3050  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsMabContainer() (*MabContainer, bool) {
  3051  	return nil, false
  3052  }
  3053  
  3054  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3055  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
  3056  	return nil, false
  3057  }
  3058  
  3059  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureSQLAGWorkloadContainerProtectionContainer.
  3060  func (aswcpc AzureSQLAGWorkloadContainerProtectionContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
  3061  	return &aswcpc, true
  3062  }
  3063  
  3064  // AzureSQLContainer azure Sql workload-specific container.
  3065  type 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.
  3079  func (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.
  3101  func (asc AzureSQLContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  3102  	return nil, false
  3103  }
  3104  
  3105  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3106  func (asc AzureSQLContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  3107  	return nil, false
  3108  }
  3109  
  3110  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3111  func (asc AzureSQLContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  3112  	return nil, false
  3113  }
  3114  
  3115  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3116  func (asc AzureSQLContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  3117  	return nil, false
  3118  }
  3119  
  3120  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3121  func (asc AzureSQLContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  3122  	return &asc, true
  3123  }
  3124  
  3125  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3126  func (asc AzureSQLContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  3127  	return nil, false
  3128  }
  3129  
  3130  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3131  func (asc AzureSQLContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  3132  	return nil, false
  3133  }
  3134  
  3135  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3136  func (asc AzureSQLContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  3137  	return nil, false
  3138  }
  3139  
  3140  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3141  func (asc AzureSQLContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  3142  	return nil, false
  3143  }
  3144  
  3145  // AsDpmContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3146  func (asc AzureSQLContainer) AsDpmContainer() (*DpmContainer, bool) {
  3147  	return nil, false
  3148  }
  3149  
  3150  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3151  func (asc AzureSQLContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  3152  	return nil, false
  3153  }
  3154  
  3155  // AsGenericContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3156  func (asc AzureSQLContainer) AsGenericContainer() (*GenericContainer, bool) {
  3157  	return nil, false
  3158  }
  3159  
  3160  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3161  func (asc AzureSQLContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  3162  	return nil, false
  3163  }
  3164  
  3165  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3166  func (asc AzureSQLContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  3167  	return nil, false
  3168  }
  3169  
  3170  // AsMabContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3171  func (asc AzureSQLContainer) AsMabContainer() (*MabContainer, bool) {
  3172  	return nil, false
  3173  }
  3174  
  3175  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3176  func (asc AzureSQLContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
  3177  	return nil, false
  3178  }
  3179  
  3180  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureSQLContainer.
  3181  func (asc AzureSQLContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
  3182  	return &asc, true
  3183  }
  3184  
  3185  // AzureSQLProtectedItem azure SQL workload-specific backup item.
  3186  type 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.
  3224  func (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.
  3282  func (aspi AzureSQLProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  3283  	return nil, false
  3284  }
  3285  
  3286  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3287  func (aspi AzureSQLProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  3288  	return nil, false
  3289  }
  3290  
  3291  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3292  func (aspi AzureSQLProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  3293  	return nil, false
  3294  }
  3295  
  3296  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3297  func (aspi AzureSQLProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  3298  	return nil, false
  3299  }
  3300  
  3301  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3302  func (aspi AzureSQLProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  3303  	return nil, false
  3304  }
  3305  
  3306  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3307  func (aspi AzureSQLProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  3308  	return &aspi, true
  3309  }
  3310  
  3311  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3312  func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  3313  	return nil, false
  3314  }
  3315  
  3316  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3317  func (aspi AzureSQLProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  3318  	return nil, false
  3319  }
  3320  
  3321  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3322  func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  3323  	return nil, false
  3324  }
  3325  
  3326  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3327  func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  3328  	return nil, false
  3329  }
  3330  
  3331  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3332  func (aspi AzureSQLProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  3333  	return nil, false
  3334  }
  3335  
  3336  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3337  func (aspi AzureSQLProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  3338  	return nil, false
  3339  }
  3340  
  3341  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3342  func (aspi AzureSQLProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  3343  	return nil, false
  3344  }
  3345  
  3346  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3347  func (aspi AzureSQLProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  3348  	return nil, false
  3349  }
  3350  
  3351  // AsProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3352  func (aspi AzureSQLProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  3353  	return nil, false
  3354  }
  3355  
  3356  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureSQLProtectedItem.
  3357  func (aspi AzureSQLProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
  3358  	return &aspi, true
  3359  }
  3360  
  3361  // AzureSQLProtectedItemExtendedInfo additional information on Azure Sql specific protected item.
  3362  type 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.
  3372  type 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.
  3382  func (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.
  3396  func (aspp AzureSQLProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
  3397  	return nil, false
  3398  }
  3399  
  3400  // AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
  3401  func (aspp AzureSQLProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
  3402  	return nil, false
  3403  }
  3404  
  3405  // AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
  3406  func (aspp AzureSQLProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
  3407  	return nil, false
  3408  }
  3409  
  3410  // AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
  3411  func (aspp AzureSQLProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
  3412  	return &aspp, true
  3413  }
  3414  
  3415  // AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
  3416  func (aspp AzureSQLProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
  3417  	return nil, false
  3418  }
  3419  
  3420  // AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
  3421  func (aspp AzureSQLProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
  3422  	return nil, false
  3423  }
  3424  
  3425  // AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
  3426  func (aspp AzureSQLProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
  3427  	return nil, false
  3428  }
  3429  
  3430  // AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureSQLProtectionPolicy.
  3431  func (aspp AzureSQLProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
  3432  	return &aspp, true
  3433  }
  3434  
  3435  // UnmarshalJSON is the custom unmarshaler for AzureSQLProtectionPolicy struct.
  3436  func (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.
  3477  type 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.
  3499  func (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.
  3533  func (asc AzureStorageContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  3534  	return nil, false
  3535  }
  3536  
  3537  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3538  func (asc AzureStorageContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  3539  	return nil, false
  3540  }
  3541  
  3542  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3543  func (asc AzureStorageContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  3544  	return nil, false
  3545  }
  3546  
  3547  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3548  func (asc AzureStorageContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  3549  	return nil, false
  3550  }
  3551  
  3552  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3553  func (asc AzureStorageContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  3554  	return nil, false
  3555  }
  3556  
  3557  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3558  func (asc AzureStorageContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  3559  	return &asc, true
  3560  }
  3561  
  3562  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3563  func (asc AzureStorageContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  3564  	return nil, false
  3565  }
  3566  
  3567  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3568  func (asc AzureStorageContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  3569  	return nil, false
  3570  }
  3571  
  3572  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3573  func (asc AzureStorageContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  3574  	return nil, false
  3575  }
  3576  
  3577  // AsDpmContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3578  func (asc AzureStorageContainer) AsDpmContainer() (*DpmContainer, bool) {
  3579  	return nil, false
  3580  }
  3581  
  3582  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3583  func (asc AzureStorageContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  3584  	return nil, false
  3585  }
  3586  
  3587  // AsGenericContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3588  func (asc AzureStorageContainer) AsGenericContainer() (*GenericContainer, bool) {
  3589  	return nil, false
  3590  }
  3591  
  3592  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3593  func (asc AzureStorageContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  3594  	return nil, false
  3595  }
  3596  
  3597  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3598  func (asc AzureStorageContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  3599  	return nil, false
  3600  }
  3601  
  3602  // AsMabContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3603  func (asc AzureStorageContainer) AsMabContainer() (*MabContainer, bool) {
  3604  	return nil, false
  3605  }
  3606  
  3607  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3608  func (asc AzureStorageContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
  3609  	return nil, false
  3610  }
  3611  
  3612  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureStorageContainer.
  3613  func (asc AzureStorageContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
  3614  	return &asc, true
  3615  }
  3616  
  3617  // AzureStorageErrorInfo azure storage specific error information
  3618  type 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.
  3628  type 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.
  3660  func (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.
  3709  func (asj AzureStorageJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
  3710  	return nil, false
  3711  }
  3712  
  3713  // AsAzureStorageJob is the BasicJob implementation for AzureStorageJob.
  3714  func (asj AzureStorageJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
  3715  	return &asj, true
  3716  }
  3717  
  3718  // AsAzureWorkloadJob is the BasicJob implementation for AzureStorageJob.
  3719  func (asj AzureStorageJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
  3720  	return nil, false
  3721  }
  3722  
  3723  // AsDpmJob is the BasicJob implementation for AzureStorageJob.
  3724  func (asj AzureStorageJob) AsDpmJob() (*DpmJob, bool) {
  3725  	return nil, false
  3726  }
  3727  
  3728  // AsMabJob is the BasicJob implementation for AzureStorageJob.
  3729  func (asj AzureStorageJob) AsMabJob() (*MabJob, bool) {
  3730  	return nil, false
  3731  }
  3732  
  3733  // AsJob is the BasicJob implementation for AzureStorageJob.
  3734  func (asj AzureStorageJob) AsJob() (*Job, bool) {
  3735  	return nil, false
  3736  }
  3737  
  3738  // AsBasicJob is the BasicJob implementation for AzureStorageJob.
  3739  func (asj AzureStorageJob) AsBasicJob() (BasicJob, bool) {
  3740  	return &asj, true
  3741  }
  3742  
  3743  // AzureStorageJobExtendedInfo azure Storage workload-specific additional information for job.
  3744  type 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.
  3754  func (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.
  3769  type 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
  3777  type 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.
  3791  func (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.
  3813  func (aspc AzureStorageProtectableContainer) AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool) {
  3814  	return &aspc, true
  3815  }
  3816  
  3817  // AsAzureVMAppContainerProtectableContainer is the BasicProtectableContainer implementation for AzureStorageProtectableContainer.
  3818  func (aspc AzureStorageProtectableContainer) AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool) {
  3819  	return nil, false
  3820  }
  3821  
  3822  // AsProtectableContainer is the BasicProtectableContainer implementation for AzureStorageProtectableContainer.
  3823  func (aspc AzureStorageProtectableContainer) AsProtectableContainer() (*ProtectableContainer, bool) {
  3824  	return nil, false
  3825  }
  3826  
  3827  // AsBasicProtectableContainer is the BasicProtectableContainer implementation for AzureStorageProtectableContainer.
  3828  func (aspc AzureStorageProtectableContainer) AsBasicProtectableContainer() (BasicProtectableContainer, bool) {
  3829  	return &aspc, true
  3830  }
  3831  
  3832  // AzureVMAppContainerProtectableContainer azure workload-specific container
  3833  type 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.
  3847  func (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.
  3869  func (avacpc AzureVMAppContainerProtectableContainer) AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool) {
  3870  	return nil, false
  3871  }
  3872  
  3873  // AsAzureVMAppContainerProtectableContainer is the BasicProtectableContainer implementation for AzureVMAppContainerProtectableContainer.
  3874  func (avacpc AzureVMAppContainerProtectableContainer) AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool) {
  3875  	return &avacpc, true
  3876  }
  3877  
  3878  // AsProtectableContainer is the BasicProtectableContainer implementation for AzureVMAppContainerProtectableContainer.
  3879  func (avacpc AzureVMAppContainerProtectableContainer) AsProtectableContainer() (*ProtectableContainer, bool) {
  3880  	return nil, false
  3881  }
  3882  
  3883  // AsBasicProtectableContainer is the BasicProtectableContainer implementation for AzureVMAppContainerProtectableContainer.
  3884  func (avacpc AzureVMAppContainerProtectableContainer) AsBasicProtectableContainer() (BasicProtectableContainer, bool) {
  3885  	return &avacpc, true
  3886  }
  3887  
  3888  // AzureVMAppContainerProtectionContainer container for SQL workloads under Azure Virtual Machines.
  3889  type 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.
  3913  func (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.
  3950  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  3951  	return nil, false
  3952  }
  3953  
  3954  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3955  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  3956  	return nil, false
  3957  }
  3958  
  3959  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3960  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  3961  	return nil, false
  3962  }
  3963  
  3964  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3965  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  3966  	return nil, false
  3967  }
  3968  
  3969  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3970  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  3971  	return nil, false
  3972  }
  3973  
  3974  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3975  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  3976  	return nil, false
  3977  }
  3978  
  3979  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3980  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  3981  	return &avacpc, true
  3982  }
  3983  
  3984  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3985  func (avacpc AzureVMAppContainerProtectionContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  3986  	return nil, false
  3987  }
  3988  
  3989  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3990  func (avacpc AzureVMAppContainerProtectionContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  3991  	return &avacpc, true
  3992  }
  3993  
  3994  // AsDpmContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  3995  func (avacpc AzureVMAppContainerProtectionContainer) AsDpmContainer() (*DpmContainer, bool) {
  3996  	return nil, false
  3997  }
  3998  
  3999  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  4000  func (avacpc AzureVMAppContainerProtectionContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  4001  	return nil, false
  4002  }
  4003  
  4004  // AsGenericContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  4005  func (avacpc AzureVMAppContainerProtectionContainer) AsGenericContainer() (*GenericContainer, bool) {
  4006  	return nil, false
  4007  }
  4008  
  4009  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  4010  func (avacpc AzureVMAppContainerProtectionContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  4011  	return nil, false
  4012  }
  4013  
  4014  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  4015  func (avacpc AzureVMAppContainerProtectionContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  4016  	return nil, false
  4017  }
  4018  
  4019  // AsMabContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  4020  func (avacpc AzureVMAppContainerProtectionContainer) AsMabContainer() (*MabContainer, bool) {
  4021  	return nil, false
  4022  }
  4023  
  4024  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  4025  func (avacpc AzureVMAppContainerProtectionContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
  4026  	return nil, false
  4027  }
  4028  
  4029  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureVMAppContainerProtectionContainer.
  4030  func (avacpc AzureVMAppContainerProtectionContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
  4031  	return &avacpc, true
  4032  }
  4033  
  4034  // AzureVMResourceFeatureSupportRequest azureResource(IaaS VM) Specific feature support request
  4035  type 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.
  4045  func (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.
  4061  func (avrfsr AzureVMResourceFeatureSupportRequest) AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool) {
  4062  	return nil, false
  4063  }
  4064  
  4065  // AsAzureVMResourceFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureVMResourceFeatureSupportRequest.
  4066  func (avrfsr AzureVMResourceFeatureSupportRequest) AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool) {
  4067  	return &avrfsr, true
  4068  }
  4069  
  4070  // AsFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureVMResourceFeatureSupportRequest.
  4071  func (avrfsr AzureVMResourceFeatureSupportRequest) AsFeatureSupportRequest() (*FeatureSupportRequest, bool) {
  4072  	return nil, false
  4073  }
  4074  
  4075  // AsBasicFeatureSupportRequest is the BasicFeatureSupportRequest implementation for AzureVMResourceFeatureSupportRequest.
  4076  func (avrfsr AzureVMResourceFeatureSupportRequest) AsBasicFeatureSupportRequest() (BasicFeatureSupportRequest, bool) {
  4077  	return &avrfsr, true
  4078  }
  4079  
  4080  // AzureVMResourceFeatureSupportResponse response for feature support requests for Azure IaasVm
  4081  type 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.
  4088  type 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.
  4099  type 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  
  4122  func 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  }
  4160  func 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.
  4180  func (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.
  4217  func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
  4218  	return &avwi, true
  4219  }
  4220  
  4221  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4222  func (avwi AzureVMWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
  4223  	return &avwi, true
  4224  }
  4225  
  4226  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4227  func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
  4228  	return nil, false
  4229  }
  4230  
  4231  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4232  func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
  4233  	return nil, false
  4234  }
  4235  
  4236  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4237  func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
  4238  	return nil, false
  4239  }
  4240  
  4241  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4242  func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
  4243  	return nil, false
  4244  }
  4245  
  4246  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4247  func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
  4248  	return nil, false
  4249  }
  4250  
  4251  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4252  func (avwi AzureVMWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
  4253  	return nil, false
  4254  }
  4255  
  4256  // AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4257  func (avwi AzureVMWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
  4258  	return nil, false
  4259  }
  4260  
  4261  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadItem.
  4262  func (avwi AzureVMWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
  4263  	return &avwi, true
  4264  }
  4265  
  4266  // BasicAzureVMWorkloadProtectableItem azure VM workload-specific protectable item.
  4267  type 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.
  4278  type 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  
  4308  func 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  }
  4346  func 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.
  4366  func (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.
  4412  func (avwpi AzureVMWorkloadProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  4413  	return nil, false
  4414  }
  4415  
  4416  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4417  func (avwpi AzureVMWorkloadProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  4418  	return nil, false
  4419  }
  4420  
  4421  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4422  func (avwpi AzureVMWorkloadProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  4423  	return nil, false
  4424  }
  4425  
  4426  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4427  func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  4428  	return &avwpi, true
  4429  }
  4430  
  4431  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4432  func (avwpi AzureVMWorkloadProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  4433  	return &avwpi, true
  4434  }
  4435  
  4436  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4437  func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  4438  	return nil, false
  4439  }
  4440  
  4441  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4442  func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  4443  	return nil, false
  4444  }
  4445  
  4446  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4447  func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  4448  	return nil, false
  4449  }
  4450  
  4451  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4452  func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  4453  	return nil, false
  4454  }
  4455  
  4456  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4457  func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  4458  	return nil, false
  4459  }
  4460  
  4461  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4462  func (avwpi AzureVMWorkloadProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  4463  	return nil, false
  4464  }
  4465  
  4466  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4467  func (avwpi AzureVMWorkloadProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  4468  	return nil, false
  4469  }
  4470  
  4471  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4472  func (avwpi AzureVMWorkloadProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  4473  	return nil, false
  4474  }
  4475  
  4476  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4477  func (avwpi AzureVMWorkloadProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  4478  	return nil, false
  4479  }
  4480  
  4481  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadProtectableItem.
  4482  func (avwpi AzureVMWorkloadProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
  4483  	return &avwpi, true
  4484  }
  4485  
  4486  // BasicAzureVMWorkloadProtectedItem azure VM workload-specific protected item.
  4487  type 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.
  4495  type 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  
  4552  func 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  }
  4578  func 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.
  4598  func (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.
  4686  func (avwpi AzureVMWorkloadProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  4687  	return nil, false
  4688  }
  4689  
  4690  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4691  func (avwpi AzureVMWorkloadProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  4692  	return nil, false
  4693  }
  4694  
  4695  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4696  func (avwpi AzureVMWorkloadProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  4697  	return nil, false
  4698  }
  4699  
  4700  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4701  func (avwpi AzureVMWorkloadProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  4702  	return nil, false
  4703  }
  4704  
  4705  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4706  func (avwpi AzureVMWorkloadProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  4707  	return nil, false
  4708  }
  4709  
  4710  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4711  func (avwpi AzureVMWorkloadProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  4712  	return nil, false
  4713  }
  4714  
  4715  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4716  func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  4717  	return &avwpi, true
  4718  }
  4719  
  4720  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4721  func (avwpi AzureVMWorkloadProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  4722  	return &avwpi, true
  4723  }
  4724  
  4725  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4726  func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  4727  	return nil, false
  4728  }
  4729  
  4730  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4731  func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  4732  	return nil, false
  4733  }
  4734  
  4735  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4736  func (avwpi AzureVMWorkloadProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  4737  	return nil, false
  4738  }
  4739  
  4740  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4741  func (avwpi AzureVMWorkloadProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  4742  	return nil, false
  4743  }
  4744  
  4745  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4746  func (avwpi AzureVMWorkloadProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  4747  	return nil, false
  4748  }
  4749  
  4750  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4751  func (avwpi AzureVMWorkloadProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  4752  	return nil, false
  4753  }
  4754  
  4755  // AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4756  func (avwpi AzureVMWorkloadProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  4757  	return nil, false
  4758  }
  4759  
  4760  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadProtectedItem.
  4761  func (avwpi AzureVMWorkloadProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
  4762  	return &avwpi, true
  4763  }
  4764  
  4765  // AzureVMWorkloadProtectedItemExtendedInfo additional information on Azure Workload for SQL specific
  4766  // backup item.
  4767  type 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.
  4777  type 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.
  4793  func (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.
  4818  func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
  4819  	return &avwpp, true
  4820  }
  4821  
  4822  // AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
  4823  func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
  4824  	return nil, false
  4825  }
  4826  
  4827  // AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
  4828  func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
  4829  	return nil, false
  4830  }
  4831  
  4832  // AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
  4833  func (avwpp AzureVMWorkloadProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
  4834  	return nil, false
  4835  }
  4836  
  4837  // AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
  4838  func (avwpp AzureVMWorkloadProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
  4839  	return nil, false
  4840  }
  4841  
  4842  // AsMabProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
  4843  func (avwpp AzureVMWorkloadProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
  4844  	return nil, false
  4845  }
  4846  
  4847  // AsProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
  4848  func (avwpp AzureVMWorkloadProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
  4849  	return nil, false
  4850  }
  4851  
  4852  // AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for AzureVMWorkloadProtectionPolicy.
  4853  func (avwpp AzureVMWorkloadProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
  4854  	return &avwpp, true
  4855  }
  4856  
  4857  // AzureVMWorkloadSAPAseDatabaseProtectedItem azure VM workload-specific protected item representing SAP
  4858  // ASE Database.
  4859  type 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.
  4917  func (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.
  5005  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  5006  	return nil, false
  5007  }
  5008  
  5009  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5010  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  5011  	return nil, false
  5012  }
  5013  
  5014  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5015  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  5016  	return nil, false
  5017  }
  5018  
  5019  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5020  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  5021  	return nil, false
  5022  }
  5023  
  5024  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5025  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  5026  	return nil, false
  5027  }
  5028  
  5029  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5030  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  5031  	return nil, false
  5032  }
  5033  
  5034  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5035  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  5036  	return nil, false
  5037  }
  5038  
  5039  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5040  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  5041  	return &avwsadpi, true
  5042  }
  5043  
  5044  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5045  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  5046  	return &avwsadpi, true
  5047  }
  5048  
  5049  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5050  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  5051  	return nil, false
  5052  }
  5053  
  5054  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5055  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  5056  	return nil, false
  5057  }
  5058  
  5059  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5060  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  5061  	return nil, false
  5062  }
  5063  
  5064  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5065  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  5066  	return nil, false
  5067  }
  5068  
  5069  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5070  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  5071  	return nil, false
  5072  }
  5073  
  5074  // AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5075  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  5076  	return nil, false
  5077  }
  5078  
  5079  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPAseDatabaseProtectedItem.
  5080  func (avwsadpi AzureVMWorkloadSAPAseDatabaseProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
  5081  	return &avwsadpi, true
  5082  }
  5083  
  5084  // AzureVMWorkloadSAPAseDatabaseWorkloadItem azure VM workload-specific workload item representing SAP ASE
  5085  // Database.
  5086  type 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.
  5110  func (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.
  5147  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
  5148  	return nil, false
  5149  }
  5150  
  5151  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5152  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
  5153  	return &avwsadwi, true
  5154  }
  5155  
  5156  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5157  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
  5158  	return &avwsadwi, true
  5159  }
  5160  
  5161  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5162  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
  5163  	return nil, false
  5164  }
  5165  
  5166  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5167  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
  5168  	return nil, false
  5169  }
  5170  
  5171  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5172  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
  5173  	return nil, false
  5174  }
  5175  
  5176  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5177  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
  5178  	return nil, false
  5179  }
  5180  
  5181  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5182  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
  5183  	return nil, false
  5184  }
  5185  
  5186  // AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5187  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
  5188  	return nil, false
  5189  }
  5190  
  5191  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseDatabaseWorkloadItem.
  5192  func (avwsadwi AzureVMWorkloadSAPAseDatabaseWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
  5193  	return &avwsadwi, true
  5194  }
  5195  
  5196  // AzureVMWorkloadSAPAseSystemProtectableItem azure VM workload-specific protectable item representing SAP
  5197  // ASE System.
  5198  type 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.
  5229  func (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.
  5275  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  5276  	return nil, false
  5277  }
  5278  
  5279  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5280  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  5281  	return nil, false
  5282  }
  5283  
  5284  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5285  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  5286  	return nil, false
  5287  }
  5288  
  5289  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5290  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  5291  	return nil, false
  5292  }
  5293  
  5294  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5295  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  5296  	return &avwsaspi, true
  5297  }
  5298  
  5299  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5300  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  5301  	return &avwsaspi, true
  5302  }
  5303  
  5304  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5305  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  5306  	return nil, false
  5307  }
  5308  
  5309  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5310  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  5311  	return nil, false
  5312  }
  5313  
  5314  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5315  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  5316  	return nil, false
  5317  }
  5318  
  5319  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5320  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  5321  	return nil, false
  5322  }
  5323  
  5324  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5325  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  5326  	return nil, false
  5327  }
  5328  
  5329  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5330  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  5331  	return nil, false
  5332  }
  5333  
  5334  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5335  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  5336  	return nil, false
  5337  }
  5338  
  5339  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5340  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  5341  	return nil, false
  5342  }
  5343  
  5344  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPAseSystemProtectableItem.
  5345  func (avwsaspi AzureVMWorkloadSAPAseSystemProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
  5346  	return &avwsaspi, true
  5347  }
  5348  
  5349  // AzureVMWorkloadSAPAseSystemWorkloadItem azure VM workload-specific workload item representing SAP ASE
  5350  // System.
  5351  type 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.
  5375  func (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.
  5412  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
  5413  	return nil, false
  5414  }
  5415  
  5416  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5417  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
  5418  	return &avwsaswi, true
  5419  }
  5420  
  5421  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5422  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
  5423  	return nil, false
  5424  }
  5425  
  5426  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5427  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
  5428  	return &avwsaswi, true
  5429  }
  5430  
  5431  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5432  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
  5433  	return nil, false
  5434  }
  5435  
  5436  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5437  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
  5438  	return nil, false
  5439  }
  5440  
  5441  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5442  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
  5443  	return nil, false
  5444  }
  5445  
  5446  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5447  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
  5448  	return nil, false
  5449  }
  5450  
  5451  // AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5452  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
  5453  	return nil, false
  5454  }
  5455  
  5456  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPAseSystemWorkloadItem.
  5457  func (avwsaswi AzureVMWorkloadSAPAseSystemWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
  5458  	return &avwsaswi, true
  5459  }
  5460  
  5461  // AzureVMWorkloadSAPHanaDatabaseProtectableItem azure VM workload-specific protectable item representing
  5462  // SAP HANA Database.
  5463  type 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.
  5494  func (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.
  5540  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  5541  	return nil, false
  5542  }
  5543  
  5544  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5545  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  5546  	return nil, false
  5547  }
  5548  
  5549  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5550  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  5551  	return nil, false
  5552  }
  5553  
  5554  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5555  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  5556  	return nil, false
  5557  }
  5558  
  5559  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5560  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  5561  	return &avwshdpi, true
  5562  }
  5563  
  5564  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5565  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  5566  	return nil, false
  5567  }
  5568  
  5569  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5570  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  5571  	return &avwshdpi, true
  5572  }
  5573  
  5574  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5575  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  5576  	return nil, false
  5577  }
  5578  
  5579  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5580  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  5581  	return nil, false
  5582  }
  5583  
  5584  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5585  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  5586  	return nil, false
  5587  }
  5588  
  5589  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5590  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  5591  	return nil, false
  5592  }
  5593  
  5594  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5595  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  5596  	return nil, false
  5597  }
  5598  
  5599  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5600  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  5601  	return nil, false
  5602  }
  5603  
  5604  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5605  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  5606  	return nil, false
  5607  }
  5608  
  5609  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectableItem.
  5610  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
  5611  	return &avwshdpi, true
  5612  }
  5613  
  5614  // AzureVMWorkloadSAPHanaDatabaseProtectedItem azure VM workload-specific protected item representing SAP
  5615  // HANA Database.
  5616  type 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.
  5674  func (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.
  5762  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  5763  	return nil, false
  5764  }
  5765  
  5766  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5767  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  5768  	return nil, false
  5769  }
  5770  
  5771  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5772  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  5773  	return nil, false
  5774  }
  5775  
  5776  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5777  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  5778  	return nil, false
  5779  }
  5780  
  5781  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5782  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  5783  	return nil, false
  5784  }
  5785  
  5786  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5787  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  5788  	return nil, false
  5789  }
  5790  
  5791  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5792  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  5793  	return nil, false
  5794  }
  5795  
  5796  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5797  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  5798  	return &avwshdpi, true
  5799  }
  5800  
  5801  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5802  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  5803  	return nil, false
  5804  }
  5805  
  5806  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5807  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  5808  	return &avwshdpi, true
  5809  }
  5810  
  5811  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5812  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  5813  	return nil, false
  5814  }
  5815  
  5816  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5817  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  5818  	return nil, false
  5819  }
  5820  
  5821  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5822  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  5823  	return nil, false
  5824  }
  5825  
  5826  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5827  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  5828  	return nil, false
  5829  }
  5830  
  5831  // AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5832  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  5833  	return nil, false
  5834  }
  5835  
  5836  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSAPHanaDatabaseProtectedItem.
  5837  func (avwshdpi AzureVMWorkloadSAPHanaDatabaseProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
  5838  	return &avwshdpi, true
  5839  }
  5840  
  5841  // AzureVMWorkloadSAPHanaDatabaseWorkloadItem azure VM workload-specific workload item representing SAP
  5842  // HANA Database.
  5843  type 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.
  5867  func (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.
  5904  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
  5905  	return nil, false
  5906  }
  5907  
  5908  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5909  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
  5910  	return &avwshdwi, true
  5911  }
  5912  
  5913  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5914  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
  5915  	return nil, false
  5916  }
  5917  
  5918  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5919  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
  5920  	return nil, false
  5921  }
  5922  
  5923  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5924  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
  5925  	return &avwshdwi, true
  5926  }
  5927  
  5928  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5929  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
  5930  	return nil, false
  5931  }
  5932  
  5933  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5934  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
  5935  	return nil, false
  5936  }
  5937  
  5938  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5939  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
  5940  	return nil, false
  5941  }
  5942  
  5943  // AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5944  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
  5945  	return nil, false
  5946  }
  5947  
  5948  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaDatabaseWorkloadItem.
  5949  func (avwshdwi AzureVMWorkloadSAPHanaDatabaseWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
  5950  	return &avwshdwi, true
  5951  }
  5952  
  5953  // AzureVMWorkloadSAPHanaSystemProtectableItem azure VM workload-specific protectable item representing SAP
  5954  // HANA System.
  5955  type 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.
  5986  func (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.
  6032  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  6033  	return nil, false
  6034  }
  6035  
  6036  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6037  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  6038  	return nil, false
  6039  }
  6040  
  6041  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6042  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  6043  	return nil, false
  6044  }
  6045  
  6046  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6047  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  6048  	return nil, false
  6049  }
  6050  
  6051  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6052  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  6053  	return &avwshspi, true
  6054  }
  6055  
  6056  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6057  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  6058  	return nil, false
  6059  }
  6060  
  6061  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6062  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  6063  	return nil, false
  6064  }
  6065  
  6066  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6067  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  6068  	return &avwshspi, true
  6069  }
  6070  
  6071  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6072  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  6073  	return nil, false
  6074  }
  6075  
  6076  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6077  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  6078  	return nil, false
  6079  }
  6080  
  6081  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6082  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  6083  	return nil, false
  6084  }
  6085  
  6086  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6087  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  6088  	return nil, false
  6089  }
  6090  
  6091  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6092  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  6093  	return nil, false
  6094  }
  6095  
  6096  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6097  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  6098  	return nil, false
  6099  }
  6100  
  6101  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSAPHanaSystemProtectableItem.
  6102  func (avwshspi AzureVMWorkloadSAPHanaSystemProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
  6103  	return &avwshspi, true
  6104  }
  6105  
  6106  // AzureVMWorkloadSAPHanaSystemWorkloadItem azure VM workload-specific workload item representing SAP HANA
  6107  // System.
  6108  type 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.
  6132  func (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.
  6169  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
  6170  	return nil, false
  6171  }
  6172  
  6173  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6174  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
  6175  	return &avwshswi, true
  6176  }
  6177  
  6178  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6179  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
  6180  	return nil, false
  6181  }
  6182  
  6183  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6184  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
  6185  	return nil, false
  6186  }
  6187  
  6188  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6189  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
  6190  	return nil, false
  6191  }
  6192  
  6193  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6194  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
  6195  	return &avwshswi, true
  6196  }
  6197  
  6198  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6199  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
  6200  	return nil, false
  6201  }
  6202  
  6203  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6204  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
  6205  	return nil, false
  6206  }
  6207  
  6208  // AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6209  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
  6210  	return nil, false
  6211  }
  6212  
  6213  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSAPHanaSystemWorkloadItem.
  6214  func (avwshswi AzureVMWorkloadSAPHanaSystemWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
  6215  	return &avwshswi, true
  6216  }
  6217  
  6218  // AzureVMWorkloadSQLAvailabilityGroupProtectableItem azure VM workload-specific protectable item
  6219  // representing SQL Availability Group.
  6220  type 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.
  6251  func (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.
  6297  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  6298  	return nil, false
  6299  }
  6300  
  6301  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6302  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  6303  	return nil, false
  6304  }
  6305  
  6306  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6307  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  6308  	return nil, false
  6309  }
  6310  
  6311  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6312  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  6313  	return nil, false
  6314  }
  6315  
  6316  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6317  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  6318  	return &avwsagpi, true
  6319  }
  6320  
  6321  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6322  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  6323  	return nil, false
  6324  }
  6325  
  6326  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6327  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  6328  	return nil, false
  6329  }
  6330  
  6331  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6332  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  6333  	return nil, false
  6334  }
  6335  
  6336  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6337  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  6338  	return &avwsagpi, true
  6339  }
  6340  
  6341  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6342  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  6343  	return nil, false
  6344  }
  6345  
  6346  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6347  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  6348  	return nil, false
  6349  }
  6350  
  6351  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6352  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  6353  	return nil, false
  6354  }
  6355  
  6356  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6357  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  6358  	return nil, false
  6359  }
  6360  
  6361  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6362  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  6363  	return nil, false
  6364  }
  6365  
  6366  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLAvailabilityGroupProtectableItem.
  6367  func (avwsagpi AzureVMWorkloadSQLAvailabilityGroupProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
  6368  	return &avwsagpi, true
  6369  }
  6370  
  6371  // AzureVMWorkloadSQLDatabaseProtectableItem azure VM workload-specific protectable item representing SQL
  6372  // Database.
  6373  type 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.
  6404  func (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.
  6450  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  6451  	return nil, false
  6452  }
  6453  
  6454  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6455  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  6456  	return nil, false
  6457  }
  6458  
  6459  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6460  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  6461  	return nil, false
  6462  }
  6463  
  6464  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6465  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  6466  	return nil, false
  6467  }
  6468  
  6469  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6470  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  6471  	return &avwsdpi, true
  6472  }
  6473  
  6474  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6475  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  6476  	return nil, false
  6477  }
  6478  
  6479  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6480  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  6481  	return nil, false
  6482  }
  6483  
  6484  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6485  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  6486  	return nil, false
  6487  }
  6488  
  6489  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6490  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  6491  	return nil, false
  6492  }
  6493  
  6494  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6495  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  6496  	return &avwsdpi, true
  6497  }
  6498  
  6499  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6500  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  6501  	return nil, false
  6502  }
  6503  
  6504  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6505  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  6506  	return nil, false
  6507  }
  6508  
  6509  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6510  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  6511  	return nil, false
  6512  }
  6513  
  6514  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6515  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  6516  	return nil, false
  6517  }
  6518  
  6519  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLDatabaseProtectableItem.
  6520  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
  6521  	return &avwsdpi, true
  6522  }
  6523  
  6524  // AzureVMWorkloadSQLDatabaseProtectedItem azure VM workload-specific protected item representing SQL
  6525  // Database.
  6526  type 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.
  6584  func (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.
  6672  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
  6673  	return nil, false
  6674  }
  6675  
  6676  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6677  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
  6678  	return nil, false
  6679  }
  6680  
  6681  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6682  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
  6683  	return nil, false
  6684  }
  6685  
  6686  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6687  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
  6688  	return nil, false
  6689  }
  6690  
  6691  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6692  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
  6693  	return nil, false
  6694  }
  6695  
  6696  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6697  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
  6698  	return nil, false
  6699  }
  6700  
  6701  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6702  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
  6703  	return nil, false
  6704  }
  6705  
  6706  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6707  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
  6708  	return &avwsdpi, true
  6709  }
  6710  
  6711  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6712  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
  6713  	return nil, false
  6714  }
  6715  
  6716  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6717  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
  6718  	return nil, false
  6719  }
  6720  
  6721  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6722  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
  6723  	return &avwsdpi, true
  6724  }
  6725  
  6726  // AsDPMProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6727  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
  6728  	return nil, false
  6729  }
  6730  
  6731  // AsGenericProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6732  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
  6733  	return nil, false
  6734  }
  6735  
  6736  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6737  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
  6738  	return nil, false
  6739  }
  6740  
  6741  // AsProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6742  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
  6743  	return nil, false
  6744  }
  6745  
  6746  // AsBasicProtectedItem is the BasicProtectedItem implementation for AzureVMWorkloadSQLDatabaseProtectedItem.
  6747  func (avwsdpi AzureVMWorkloadSQLDatabaseProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
  6748  	return &avwsdpi, true
  6749  }
  6750  
  6751  // AzureVMWorkloadSQLDatabaseWorkloadItem azure VM workload-specific workload item representing SQL
  6752  // Database.
  6753  type 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.
  6777  func (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.
  6814  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
  6815  	return nil, false
  6816  }
  6817  
  6818  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6819  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
  6820  	return &avwsdwi, true
  6821  }
  6822  
  6823  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6824  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
  6825  	return nil, false
  6826  }
  6827  
  6828  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6829  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
  6830  	return nil, false
  6831  }
  6832  
  6833  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6834  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
  6835  	return nil, false
  6836  }
  6837  
  6838  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6839  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
  6840  	return nil, false
  6841  }
  6842  
  6843  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6844  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
  6845  	return &avwsdwi, true
  6846  }
  6847  
  6848  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6849  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
  6850  	return nil, false
  6851  }
  6852  
  6853  // AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6854  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
  6855  	return nil, false
  6856  }
  6857  
  6858  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLDatabaseWorkloadItem.
  6859  func (avwsdwi AzureVMWorkloadSQLDatabaseWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
  6860  	return &avwsdwi, true
  6861  }
  6862  
  6863  // AzureVMWorkloadSQLInstanceProtectableItem azure VM workload-specific protectable item representing SQL
  6864  // Instance.
  6865  type 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.
  6896  func (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.
  6942  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
  6943  	return nil, false
  6944  }
  6945  
  6946  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6947  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
  6948  	return nil, false
  6949  }
  6950  
  6951  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6952  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
  6953  	return nil, false
  6954  }
  6955  
  6956  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6957  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
  6958  	return nil, false
  6959  }
  6960  
  6961  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6962  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
  6963  	return &avwsipi, true
  6964  }
  6965  
  6966  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6967  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
  6968  	return nil, false
  6969  }
  6970  
  6971  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6972  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
  6973  	return nil, false
  6974  }
  6975  
  6976  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6977  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
  6978  	return nil, false
  6979  }
  6980  
  6981  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6982  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
  6983  	return nil, false
  6984  }
  6985  
  6986  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6987  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
  6988  	return nil, false
  6989  }
  6990  
  6991  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6992  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
  6993  	return &avwsipi, true
  6994  }
  6995  
  6996  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  6997  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
  6998  	return nil, false
  6999  }
  7000  
  7001  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  7002  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
  7003  	return nil, false
  7004  }
  7005  
  7006  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  7007  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
  7008  	return nil, false
  7009  }
  7010  
  7011  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for AzureVMWorkloadSQLInstanceProtectableItem.
  7012  func (avwsipi AzureVMWorkloadSQLInstanceProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
  7013  	return &avwsipi, true
  7014  }
  7015  
  7016  // AzureVMWorkloadSQLInstanceWorkloadItem azure VM workload-specific workload item representing SQL
  7017  // Instance.
  7018  type 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.
  7044  func (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.
  7084  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
  7085  	return nil, false
  7086  }
  7087  
  7088  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7089  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
  7090  	return &avwsiwi, true
  7091  }
  7092  
  7093  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7094  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
  7095  	return nil, false
  7096  }
  7097  
  7098  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7099  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
  7100  	return nil, false
  7101  }
  7102  
  7103  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7104  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
  7105  	return nil, false
  7106  }
  7107  
  7108  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7109  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
  7110  	return nil, false
  7111  }
  7112  
  7113  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7114  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
  7115  	return nil, false
  7116  }
  7117  
  7118  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7119  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
  7120  	return &avwsiwi, true
  7121  }
  7122  
  7123  // AsWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7124  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
  7125  	return nil, false
  7126  }
  7127  
  7128  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for AzureVMWorkloadSQLInstanceWorkloadItem.
  7129  func (avwsiwi AzureVMWorkloadSQLInstanceWorkloadItem) AsBasicWorkloadItem() (BasicWorkloadItem, bool) {
  7130  	return &avwsiwi, true
  7131  }
  7132  
  7133  // BasicAzureWorkloadAutoProtectionIntent azure Recovery Services Vault specific protection intent item.
  7134  type BasicAzureWorkloadAutoProtectionIntent interface {
  7135  	AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool)
  7136  	AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool)
  7137  }
  7138  
  7139  // AzureWorkloadAutoProtectionIntent azure Recovery Services Vault specific protection intent item.
  7140  type 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  
  7155  func 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  }
  7173  func 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.
  7193  func (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.
  7218  func (awapi AzureWorkloadAutoProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
  7219  	return nil, false
  7220  }
  7221  
  7222  // AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
  7223  func (awapi AzureWorkloadAutoProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
  7224  	return &awapi, true
  7225  }
  7226  
  7227  // AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
  7228  func (awapi AzureWorkloadAutoProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
  7229  	return nil, false
  7230  }
  7231  
  7232  // AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
  7233  func (awapi AzureWorkloadAutoProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
  7234  	return &awapi, true
  7235  }
  7236  
  7237  // AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
  7238  func (awapi AzureWorkloadAutoProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
  7239  	return &awapi, true
  7240  }
  7241  
  7242  // AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
  7243  func (awapi AzureWorkloadAutoProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
  7244  	return nil, false
  7245  }
  7246  
  7247  // AsProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
  7248  func (awapi AzureWorkloadAutoProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
  7249  	return nil, false
  7250  }
  7251  
  7252  // AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadAutoProtectionIntent.
  7253  func (awapi AzureWorkloadAutoProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
  7254  	return &awapi, true
  7255  }
  7256  
  7257  // AzureWorkloadBackupRequest azureWorkload workload-specific backup request.
  7258  type 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.
  7270  func (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.
  7289  func (awbr AzureWorkloadBackupRequest) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
  7290  	return nil, false
  7291  }
  7292  
  7293  // AsAzureWorkloadBackupRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
  7294  func (awbr AzureWorkloadBackupRequest) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
  7295  	return &awbr, true
  7296  }
  7297  
  7298  // AsIaasVMBackupRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
  7299  func (awbr AzureWorkloadBackupRequest) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
  7300  	return nil, false
  7301  }
  7302  
  7303  // AsRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
  7304  func (awbr AzureWorkloadBackupRequest) AsRequest() (*Request, bool) {
  7305  	return nil, false
  7306  }
  7307  
  7308  // AsBasicRequest is the BasicRequest implementation for AzureWorkloadBackupRequest.
  7309  func (awbr AzureWorkloadBackupRequest) AsBasicRequest() (BasicRequest, bool) {
  7310  	return &awbr, true
  7311  }
  7312  
  7313  // BasicAzureWorkloadContainer container for the workloads running inside Azure Compute or Classic Compute.
  7314  type 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.
  7321  type 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  
  7344  func 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  }
  7366  func 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.
  7386  func (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.
  7423  func (awc AzureWorkloadContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  7424  	return nil, false
  7425  }
  7426  
  7427  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7428  func (awc AzureWorkloadContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  7429  	return nil, false
  7430  }
  7431  
  7432  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7433  func (awc AzureWorkloadContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  7434  	return nil, false
  7435  }
  7436  
  7437  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7438  func (awc AzureWorkloadContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  7439  	return nil, false
  7440  }
  7441  
  7442  // AsAzureSQLContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7443  func (awc AzureWorkloadContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  7444  	return nil, false
  7445  }
  7446  
  7447  // AsAzureStorageContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7448  func (awc AzureWorkloadContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  7449  	return nil, false
  7450  }
  7451  
  7452  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7453  func (awc AzureWorkloadContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  7454  	return nil, false
  7455  }
  7456  
  7457  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7458  func (awc AzureWorkloadContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  7459  	return &awc, true
  7460  }
  7461  
  7462  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7463  func (awc AzureWorkloadContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  7464  	return &awc, true
  7465  }
  7466  
  7467  // AsDpmContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7468  func (awc AzureWorkloadContainer) AsDpmContainer() (*DpmContainer, bool) {
  7469  	return nil, false
  7470  }
  7471  
  7472  // AsBasicDpmContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7473  func (awc AzureWorkloadContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  7474  	return nil, false
  7475  }
  7476  
  7477  // AsGenericContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7478  func (awc AzureWorkloadContainer) AsGenericContainer() (*GenericContainer, bool) {
  7479  	return nil, false
  7480  }
  7481  
  7482  // AsIaaSVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7483  func (awc AzureWorkloadContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  7484  	return nil, false
  7485  }
  7486  
  7487  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7488  func (awc AzureWorkloadContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  7489  	return nil, false
  7490  }
  7491  
  7492  // AsMabContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7493  func (awc AzureWorkloadContainer) AsMabContainer() (*MabContainer, bool) {
  7494  	return nil, false
  7495  }
  7496  
  7497  // AsProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7498  func (awc AzureWorkloadContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
  7499  	return nil, false
  7500  }
  7501  
  7502  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for AzureWorkloadContainer.
  7503  func (awc AzureWorkloadContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
  7504  	return &awc, true
  7505  }
  7506  
  7507  // AzureWorkloadContainerExtendedInfo extended information of the container.
  7508  type 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
  7518  type 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.
  7532  type 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.
  7562  func (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.
  7608  func (awj AzureWorkloadJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
  7609  	return nil, false
  7610  }
  7611  
  7612  // AsAzureStorageJob is the BasicJob implementation for AzureWorkloadJob.
  7613  func (awj AzureWorkloadJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
  7614  	return nil, false
  7615  }
  7616  
  7617  // AsAzureWorkloadJob is the BasicJob implementation for AzureWorkloadJob.
  7618  func (awj AzureWorkloadJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
  7619  	return &awj, true
  7620  }
  7621  
  7622  // AsDpmJob is the BasicJob implementation for AzureWorkloadJob.
  7623  func (awj AzureWorkloadJob) AsDpmJob() (*DpmJob, bool) {
  7624  	return nil, false
  7625  }
  7626  
  7627  // AsMabJob is the BasicJob implementation for AzureWorkloadJob.
  7628  func (awj AzureWorkloadJob) AsMabJob() (*MabJob, bool) {
  7629  	return nil, false
  7630  }
  7631  
  7632  // AsJob is the BasicJob implementation for AzureWorkloadJob.
  7633  func (awj AzureWorkloadJob) AsJob() (*Job, bool) {
  7634  	return nil, false
  7635  }
  7636  
  7637  // AsBasicJob is the BasicJob implementation for AzureWorkloadJob.
  7638  func (awj AzureWorkloadJob) AsBasicJob() (BasicJob, bool) {
  7639  	return &awj, true
  7640  }
  7641  
  7642  // AzureWorkloadJobExtendedInfo azure VM workload-specific additional information for job.
  7643  type 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.
  7653  func (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.
  7668  type 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
  7676  type BasicAzureWorkloadPointInTimeRecoveryPoint interface {
  7677  	AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool)
  7678  	AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool)
  7679  }
  7680  
  7681  // AzureWorkloadPointInTimeRecoveryPoint recovery point specific to PointInTime
  7682  type 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  
  7693  func 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  }
  7711  func 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.
  7731  func (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.
  7744  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
  7745  	return nil, false
  7746  }
  7747  
  7748  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7749  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
  7750  	return &awpitrp, true
  7751  }
  7752  
  7753  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7754  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
  7755  	return &awpitrp, true
  7756  }
  7757  
  7758  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7759  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
  7760  	return nil, false
  7761  }
  7762  
  7763  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7764  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
  7765  	return &awpitrp, true
  7766  }
  7767  
  7768  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7769  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
  7770  	return nil, false
  7771  }
  7772  
  7773  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7774  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
  7775  	return nil, false
  7776  }
  7777  
  7778  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7779  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
  7780  	return nil, false
  7781  }
  7782  
  7783  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7784  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
  7785  	return nil, false
  7786  }
  7787  
  7788  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7789  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
  7790  	return nil, false
  7791  }
  7792  
  7793  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7794  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
  7795  	return nil, false
  7796  }
  7797  
  7798  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7799  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
  7800  	return nil, false
  7801  }
  7802  
  7803  // AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7804  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
  7805  	return nil, false
  7806  }
  7807  
  7808  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadPointInTimeRecoveryPoint.
  7809  func (awpitrp AzureWorkloadPointInTimeRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
  7810  	return &awpitrp, true
  7811  }
  7812  
  7813  // AzureWorkloadPointInTimeRestoreRequest azureWorkload SAP Hana -specific restore. Specifically for
  7814  // PointInTime/Log restore
  7815  type 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.
  7833  func (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.
  7861  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
  7862  	return nil, false
  7863  }
  7864  
  7865  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7866  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
  7867  	return &awpitrr, true
  7868  }
  7869  
  7870  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7871  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
  7872  	return nil, false
  7873  }
  7874  
  7875  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7876  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
  7877  	return &awpitrr, true
  7878  }
  7879  
  7880  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7881  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
  7882  	return nil, false
  7883  }
  7884  
  7885  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7886  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
  7887  	return nil, false
  7888  }
  7889  
  7890  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7891  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
  7892  	return nil, false
  7893  }
  7894  
  7895  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7896  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
  7897  	return nil, false
  7898  }
  7899  
  7900  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7901  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
  7902  	return nil, false
  7903  }
  7904  
  7905  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7906  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
  7907  	return nil, false
  7908  }
  7909  
  7910  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7911  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
  7912  	return nil, false
  7913  }
  7914  
  7915  // AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7916  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
  7917  	return nil, false
  7918  }
  7919  
  7920  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadPointInTimeRestoreRequest.
  7921  func (awpitrr AzureWorkloadPointInTimeRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
  7922  	return &awpitrr, true
  7923  }
  7924  
  7925  // BasicAzureWorkloadRecoveryPoint workload specific recovery point, specifically encapsulates full/diff recovery point
  7926  type 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
  7939  type 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  
  7948  func 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  }
  7982  func 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.
  8002  func (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.
  8012  func (awrp AzureWorkloadRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
  8013  	return nil, false
  8014  }
  8015  
  8016  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8017  func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
  8018  	return nil, false
  8019  }
  8020  
  8021  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8022  func (awrp AzureWorkloadRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
  8023  	return nil, false
  8024  }
  8025  
  8026  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8027  func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
  8028  	return &awrp, true
  8029  }
  8030  
  8031  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8032  func (awrp AzureWorkloadRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
  8033  	return &awrp, true
  8034  }
  8035  
  8036  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8037  func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
  8038  	return nil, false
  8039  }
  8040  
  8041  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8042  func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
  8043  	return nil, false
  8044  }
  8045  
  8046  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8047  func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
  8048  	return nil, false
  8049  }
  8050  
  8051  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8052  func (awrp AzureWorkloadRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
  8053  	return nil, false
  8054  }
  8055  
  8056  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8057  func (awrp AzureWorkloadRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
  8058  	return nil, false
  8059  }
  8060  
  8061  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8062  func (awrp AzureWorkloadRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
  8063  	return nil, false
  8064  }
  8065  
  8066  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8067  func (awrp AzureWorkloadRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
  8068  	return nil, false
  8069  }
  8070  
  8071  // AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8072  func (awrp AzureWorkloadRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
  8073  	return nil, false
  8074  }
  8075  
  8076  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadRecoveryPoint.
  8077  func (awrp AzureWorkloadRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
  8078  	return &awrp, true
  8079  }
  8080  
  8081  // BasicAzureWorkloadRestoreRequest azureWorkload-specific restore.
  8082  type 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.
  8094  type 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  
  8109  func 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  }
  8143  func 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.
  8163  func (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.
  8188  func (awrr AzureWorkloadRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
  8189  	return nil, false
  8190  }
  8191  
  8192  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8193  func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
  8194  	return nil, false
  8195  }
  8196  
  8197  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8198  func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
  8199  	return &awrr, true
  8200  }
  8201  
  8202  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8203  func (awrr AzureWorkloadRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
  8204  	return &awrr, true
  8205  }
  8206  
  8207  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8208  func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
  8209  	return nil, false
  8210  }
  8211  
  8212  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8213  func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
  8214  	return nil, false
  8215  }
  8216  
  8217  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8218  func (awrr AzureWorkloadRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
  8219  	return nil, false
  8220  }
  8221  
  8222  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8223  func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
  8224  	return nil, false
  8225  }
  8226  
  8227  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8228  func (awrr AzureWorkloadRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
  8229  	return nil, false
  8230  }
  8231  
  8232  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8233  func (awrr AzureWorkloadRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
  8234  	return nil, false
  8235  }
  8236  
  8237  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8238  func (awrr AzureWorkloadRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
  8239  	return nil, false
  8240  }
  8241  
  8242  // AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8243  func (awrr AzureWorkloadRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
  8244  	return nil, false
  8245  }
  8246  
  8247  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadRestoreRequest.
  8248  func (awrr AzureWorkloadRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
  8249  	return &awrr, true
  8250  }
  8251  
  8252  // AzureWorkloadSAPHanaPointInTimeRecoveryPoint recovery point specific to PointInTime in SAPHana
  8253  type 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.
  8265  func (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.
  8278  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
  8279  	return nil, false
  8280  }
  8281  
  8282  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8283  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
  8284  	return nil, false
  8285  }
  8286  
  8287  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8288  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
  8289  	return &awshpitrp, true
  8290  }
  8291  
  8292  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8293  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
  8294  	return nil, false
  8295  }
  8296  
  8297  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8298  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
  8299  	return &awshpitrp, true
  8300  }
  8301  
  8302  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8303  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
  8304  	return &awshpitrp, true
  8305  }
  8306  
  8307  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8308  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
  8309  	return nil, false
  8310  }
  8311  
  8312  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8313  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
  8314  	return nil, false
  8315  }
  8316  
  8317  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8318  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
  8319  	return nil, false
  8320  }
  8321  
  8322  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8323  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
  8324  	return nil, false
  8325  }
  8326  
  8327  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8328  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
  8329  	return nil, false
  8330  }
  8331  
  8332  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8333  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
  8334  	return nil, false
  8335  }
  8336  
  8337  // AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8338  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
  8339  	return nil, false
  8340  }
  8341  
  8342  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaPointInTimeRecoveryPoint.
  8343  func (awshpitrp AzureWorkloadSAPHanaPointInTimeRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
  8344  	return &awshpitrp, true
  8345  }
  8346  
  8347  // AzureWorkloadSAPHanaPointInTimeRestoreRequest azureWorkload SAP Hana -specific restore. Specifically for
  8348  // PointInTime/Log restore
  8349  type 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.
  8367  func (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.
  8395  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
  8396  	return nil, false
  8397  }
  8398  
  8399  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8400  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
  8401  	return nil, false
  8402  }
  8403  
  8404  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8405  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
  8406  	return nil, false
  8407  }
  8408  
  8409  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8410  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
  8411  	return &awshpitrr, true
  8412  }
  8413  
  8414  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8415  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
  8416  	return &awshpitrr, true
  8417  }
  8418  
  8419  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8420  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
  8421  	return nil, false
  8422  }
  8423  
  8424  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8425  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
  8426  	return &awshpitrr, true
  8427  }
  8428  
  8429  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8430  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
  8431  	return nil, false
  8432  }
  8433  
  8434  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8435  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
  8436  	return nil, false
  8437  }
  8438  
  8439  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8440  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
  8441  	return nil, false
  8442  }
  8443  
  8444  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8445  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
  8446  	return nil, false
  8447  }
  8448  
  8449  // AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8450  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
  8451  	return nil, false
  8452  }
  8453  
  8454  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaPointInTimeRestoreRequest.
  8455  func (awshpitrr AzureWorkloadSAPHanaPointInTimeRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
  8456  	return &awshpitrr, true
  8457  }
  8458  
  8459  // AzureWorkloadSAPHanaRecoveryPoint sAPHana specific recoverypoint, specifically encapsulates full/diff
  8460  // recoverypoints
  8461  type 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.
  8471  func (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.
  8481  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
  8482  	return nil, false
  8483  }
  8484  
  8485  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8486  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
  8487  	return nil, false
  8488  }
  8489  
  8490  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8491  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
  8492  	return nil, false
  8493  }
  8494  
  8495  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8496  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
  8497  	return nil, false
  8498  }
  8499  
  8500  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8501  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
  8502  	return &awshrp, true
  8503  }
  8504  
  8505  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8506  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
  8507  	return nil, false
  8508  }
  8509  
  8510  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8511  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
  8512  	return &awshrp, true
  8513  }
  8514  
  8515  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8516  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
  8517  	return nil, false
  8518  }
  8519  
  8520  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8521  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
  8522  	return nil, false
  8523  }
  8524  
  8525  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8526  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
  8527  	return nil, false
  8528  }
  8529  
  8530  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8531  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
  8532  	return nil, false
  8533  }
  8534  
  8535  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8536  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
  8537  	return nil, false
  8538  }
  8539  
  8540  // AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8541  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
  8542  	return nil, false
  8543  }
  8544  
  8545  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSAPHanaRecoveryPoint.
  8546  func (awshrp AzureWorkloadSAPHanaRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
  8547  	return &awshrp, true
  8548  }
  8549  
  8550  // BasicAzureWorkloadSAPHanaRestoreRequest azureWorkload SAP Hana-specific restore.
  8551  type BasicAzureWorkloadSAPHanaRestoreRequest interface {
  8552  	AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool)
  8553  	AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool)
  8554  }
  8555  
  8556  // AzureWorkloadSAPHanaRestoreRequest azureWorkload SAP Hana-specific restore.
  8557  type 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  
  8572  func 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  }
  8590  func 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.
  8610  func (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.
  8635  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
  8636  	return nil, false
  8637  }
  8638  
  8639  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8640  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
  8641  	return nil, false
  8642  }
  8643  
  8644  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8645  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
  8646  	return nil, false
  8647  }
  8648  
  8649  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8650  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
  8651  	return &awshrr, true
  8652  }
  8653  
  8654  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8655  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
  8656  	return nil, false
  8657  }
  8658  
  8659  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8660  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
  8661  	return &awshrr, true
  8662  }
  8663  
  8664  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8665  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
  8666  	return &awshrr, true
  8667  }
  8668  
  8669  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8670  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
  8671  	return nil, false
  8672  }
  8673  
  8674  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8675  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
  8676  	return nil, false
  8677  }
  8678  
  8679  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8680  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
  8681  	return nil, false
  8682  }
  8683  
  8684  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8685  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
  8686  	return nil, false
  8687  }
  8688  
  8689  // AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8690  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
  8691  	return nil, false
  8692  }
  8693  
  8694  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSAPHanaRestoreRequest.
  8695  func (awshrr AzureWorkloadSAPHanaRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
  8696  	return &awshrr, true
  8697  }
  8698  
  8699  // AzureWorkloadSQLAutoProtectionIntent azure Workload SQL Auto Protection intent item.
  8700  type 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.
  8718  func (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.
  8746  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
  8747  	return nil, false
  8748  }
  8749  
  8750  // AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
  8751  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
  8752  	return &awsapi, true
  8753  }
  8754  
  8755  // AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
  8756  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
  8757  	return nil, false
  8758  }
  8759  
  8760  // AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
  8761  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
  8762  	return nil, false
  8763  }
  8764  
  8765  // AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
  8766  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
  8767  	return &awsapi, true
  8768  }
  8769  
  8770  // AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
  8771  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
  8772  	return &awsapi, true
  8773  }
  8774  
  8775  // AsProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
  8776  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
  8777  	return nil, false
  8778  }
  8779  
  8780  // AsBasicProtectionIntent is the BasicProtectionIntent implementation for AzureWorkloadSQLAutoProtectionIntent.
  8781  func (awsapi AzureWorkloadSQLAutoProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
  8782  	return &awsapi, true
  8783  }
  8784  
  8785  // AzureWorkloadSQLPointInTimeRecoveryPoint recovery point specific to PointInTime
  8786  type 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.
  8802  func (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.
  8818  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
  8819  	return nil, false
  8820  }
  8821  
  8822  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8823  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
  8824  	return nil, false
  8825  }
  8826  
  8827  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8828  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
  8829  	return nil, false
  8830  }
  8831  
  8832  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8833  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
  8834  	return nil, false
  8835  }
  8836  
  8837  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8838  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
  8839  	return &awspitrp, true
  8840  }
  8841  
  8842  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8843  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
  8844  	return nil, false
  8845  }
  8846  
  8847  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8848  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
  8849  	return nil, false
  8850  }
  8851  
  8852  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8853  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
  8854  	return &awspitrp, true
  8855  }
  8856  
  8857  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8858  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
  8859  	return nil, false
  8860  }
  8861  
  8862  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8863  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
  8864  	return &awspitrp, true
  8865  }
  8866  
  8867  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8868  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
  8869  	return nil, false
  8870  }
  8871  
  8872  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8873  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
  8874  	return nil, false
  8875  }
  8876  
  8877  // AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8878  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
  8879  	return nil, false
  8880  }
  8881  
  8882  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLPointInTimeRecoveryPoint.
  8883  func (awspitrp AzureWorkloadSQLPointInTimeRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
  8884  	return &awspitrp, true
  8885  }
  8886  
  8887  // AzureWorkloadSQLPointInTimeRestoreRequest azureWorkload SQL -specific restore. Specifically for
  8888  // PointInTime/Log restore
  8889  type 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.
  8913  func (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.
  8950  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
  8951  	return nil, false
  8952  }
  8953  
  8954  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8955  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
  8956  	return nil, false
  8957  }
  8958  
  8959  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8960  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
  8961  	return nil, false
  8962  }
  8963  
  8964  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8965  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
  8966  	return &awspitrr, true
  8967  }
  8968  
  8969  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8970  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
  8971  	return nil, false
  8972  }
  8973  
  8974  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8975  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
  8976  	return nil, false
  8977  }
  8978  
  8979  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8980  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
  8981  	return nil, false
  8982  }
  8983  
  8984  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8985  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
  8986  	return &awspitrr, true
  8987  }
  8988  
  8989  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8990  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
  8991  	return nil, false
  8992  }
  8993  
  8994  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  8995  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
  8996  	return &awspitrr, true
  8997  }
  8998  
  8999  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  9000  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
  9001  	return nil, false
  9002  }
  9003  
  9004  // AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  9005  func (awspitrr AzureWorkloadSQLPointInTimeRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
  9006  	return nil, false
  9007  }
  9008  
  9009  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLPointInTimeRestoreRequest.
  9010  func (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
  9016  type 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
  9023  type 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  
  9036  func 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  }
  9054  func 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.
  9074  func (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.
  9087  func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
  9088  	return nil, false
  9089  }
  9090  
  9091  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9092  func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
  9093  	return nil, false
  9094  }
  9095  
  9096  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9097  func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
  9098  	return nil, false
  9099  }
  9100  
  9101  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9102  func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
  9103  	return nil, false
  9104  }
  9105  
  9106  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9107  func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
  9108  	return &awsrp, true
  9109  }
  9110  
  9111  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9112  func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
  9113  	return nil, false
  9114  }
  9115  
  9116  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9117  func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
  9118  	return nil, false
  9119  }
  9120  
  9121  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9122  func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
  9123  	return nil, false
  9124  }
  9125  
  9126  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9127  func (awsrp AzureWorkloadSQLRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
  9128  	return &awsrp, true
  9129  }
  9130  
  9131  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9132  func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
  9133  	return &awsrp, true
  9134  }
  9135  
  9136  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9137  func (awsrp AzureWorkloadSQLRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
  9138  	return nil, false
  9139  }
  9140  
  9141  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9142  func (awsrp AzureWorkloadSQLRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
  9143  	return nil, false
  9144  }
  9145  
  9146  // AsRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9147  func (awsrp AzureWorkloadSQLRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
  9148  	return nil, false
  9149  }
  9150  
  9151  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for AzureWorkloadSQLRecoveryPoint.
  9152  func (awsrp AzureWorkloadSQLRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
  9153  	return &awsrp, true
  9154  }
  9155  
  9156  // AzureWorkloadSQLRecoveryPointExtendedInfo extended info class details
  9157  type 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.
  9165  func (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
  9171  type BasicAzureWorkloadSQLRestoreRequest interface {
  9172  	AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool)
  9173  	AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool)
  9174  }
  9175  
  9176  // AzureWorkloadSQLRestoreRequest azureWorkload SQL -specific restore. Specifically for full/diff restore
  9177  type 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  
  9198  func 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  }
  9216  func 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.
  9236  func (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.
  9270  func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
  9271  	return nil, false
  9272  }
  9273  
  9274  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9275  func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
  9276  	return nil, false
  9277  }
  9278  
  9279  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9280  func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
  9281  	return nil, false
  9282  }
  9283  
  9284  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9285  func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
  9286  	return &awsrr, true
  9287  }
  9288  
  9289  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9290  func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
  9291  	return nil, false
  9292  }
  9293  
  9294  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9295  func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
  9296  	return nil, false
  9297  }
  9298  
  9299  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9300  func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
  9301  	return nil, false
  9302  }
  9303  
  9304  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9305  func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
  9306  	return nil, false
  9307  }
  9308  
  9309  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9310  func (awsrr AzureWorkloadSQLRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
  9311  	return &awsrr, true
  9312  }
  9313  
  9314  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9315  func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
  9316  	return &awsrr, true
  9317  }
  9318  
  9319  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9320  func (awsrr AzureWorkloadSQLRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
  9321  	return nil, false
  9322  }
  9323  
  9324  // AsRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9325  func (awsrr AzureWorkloadSQLRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
  9326  	return nil, false
  9327  }
  9328  
  9329  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for AzureWorkloadSQLRestoreRequest.
  9330  func (awsrr AzureWorkloadSQLRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
  9331  	return &awsrr, true
  9332  }
  9333  
  9334  // BEKDetails BEK is bitlocker encryption key.
  9335  type 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.
  9345  type 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.
  9351  type 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.
  9361  type 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.
  9367  type 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.
  9383  type 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.
  9391  type 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.
  9405  type 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.
  9411  type 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.
  9423  type 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.
  9435  type 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.
  9448  type 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.
  9458  type 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.
  9465  type 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.
  9471  type 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.
  9481  type 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.
  9488  func (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.
  9515  func (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.
  9520  func (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.
  9525  func (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.
  9531  func (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.
  9539  func NewClientDiscoveryResponseIterator(page ClientDiscoveryResponsePage) ClientDiscoveryResponseIterator {
  9540  	return ClientDiscoveryResponseIterator{page: page}
  9541  }
  9542  
  9543  // IsEmpty returns true if the ListResult contains no values.
  9544  func (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.
  9549  func (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.
  9555  func (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.
  9566  type 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.
  9573  func (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.
  9600  func (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.
  9605  func (page ClientDiscoveryResponsePage) NotDone() bool {
  9606  	return !page.cdr.IsEmpty()
  9607  }
  9608  
  9609  // Response returns the raw server response from the last page request.
  9610  func (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.
  9615  func (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.
  9623  func 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.
  9631  type 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.
  9643  type 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
  9658  type 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.
  9670  type DailyRetentionFormat struct {
  9671  	// DaysOfTheMonth - List of days of the month.
  9672  	DaysOfTheMonth *[]Day `json:"daysOfTheMonth,omitempty"`
  9673  }
  9674  
  9675  // DailyRetentionSchedule daily retention schedule.
  9676  type 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.
  9684  type 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 ...
  9692  type 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
  9700  type 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.
  9706  type 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.
  9717  type 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.
  9747  func (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.
  9793  func (dbe DpmBackupEngine) AsAzureBackupServerEngine() (*AzureBackupServerEngine, bool) {
  9794  	return nil, false
  9795  }
  9796  
  9797  // AsDpmBackupEngine is the BasicEngineBase implementation for DpmBackupEngine.
  9798  func (dbe DpmBackupEngine) AsDpmBackupEngine() (*DpmBackupEngine, bool) {
  9799  	return &dbe, true
  9800  }
  9801  
  9802  // AsEngineBase is the BasicEngineBase implementation for DpmBackupEngine.
  9803  func (dbe DpmBackupEngine) AsEngineBase() (*EngineBase, bool) {
  9804  	return nil, false
  9805  }
  9806  
  9807  // AsBasicEngineBase is the BasicEngineBase implementation for DpmBackupEngine.
  9808  func (dbe DpmBackupEngine) AsBasicEngineBase() (BasicEngineBase, bool) {
  9809  	return &dbe, true
  9810  }
  9811  
  9812  // BasicDpmContainer DPM workload-specific protection container.
  9813  type BasicDpmContainer interface {
  9814  	AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool)
  9815  	AsDpmContainer() (*DpmContainer, bool)
  9816  }
  9817  
  9818  // DpmContainer DPM workload-specific protection container.
  9819  type 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  
  9848  func 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  }
  9866  func 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.
  9886  func (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.
  9932  func (dc DpmContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
  9933  	return nil, false
  9934  }
  9935  
  9936  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for DpmContainer.
  9937  func (dc DpmContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
  9938  	return nil, false
  9939  }
  9940  
  9941  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for DpmContainer.
  9942  func (dc DpmContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
  9943  	return nil, false
  9944  }
  9945  
  9946  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
  9947  func (dc DpmContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
  9948  	return nil, false
  9949  }
  9950  
  9951  // AsAzureSQLContainer is the BasicProtectionContainer implementation for DpmContainer.
  9952  func (dc DpmContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
  9953  	return nil, false
  9954  }
  9955  
  9956  // AsAzureStorageContainer is the BasicProtectionContainer implementation for DpmContainer.
  9957  func (dc DpmContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
  9958  	return nil, false
  9959  }
  9960  
  9961  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
  9962  func (dc DpmContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
  9963  	return nil, false
  9964  }
  9965  
  9966  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for DpmContainer.
  9967  func (dc DpmContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
  9968  	return nil, false
  9969  }
  9970  
  9971  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for DpmContainer.
  9972  func (dc DpmContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
  9973  	return nil, false
  9974  }
  9975  
  9976  // AsDpmContainer is the BasicProtectionContainer implementation for DpmContainer.
  9977  func (dc DpmContainer) AsDpmContainer() (*DpmContainer, bool) {
  9978  	return &dc, true
  9979  }
  9980  
  9981  // AsBasicDpmContainer is the BasicProtectionContainer implementation for DpmContainer.
  9982  func (dc DpmContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
  9983  	return &dc, true
  9984  }
  9985  
  9986  // AsGenericContainer is the BasicProtectionContainer implementation for DpmContainer.
  9987  func (dc DpmContainer) AsGenericContainer() (*GenericContainer, bool) {
  9988  	return nil, false
  9989  }
  9990  
  9991  // AsIaaSVMContainer is the BasicProtectionContainer implementation for DpmContainer.
  9992  func (dc DpmContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
  9993  	return nil, false
  9994  }
  9995  
  9996  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for DpmContainer.
  9997  func (dc DpmContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
  9998  	return nil, false
  9999  }
 10000  
 10001  // AsMabContainer is the BasicProtectionContainer implementation for DpmContainer.
 10002  func (dc DpmContainer) AsMabContainer() (*MabContainer, bool) {
 10003  	return nil, false
 10004  }
 10005  
 10006  // AsProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
 10007  func (dc DpmContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
 10008  	return nil, false
 10009  }
 10010  
 10011  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for DpmContainer.
 10012  func (dc DpmContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
 10013  	return &dc, true
 10014  }
 10015  
 10016  // DPMContainerExtendedInfo additional information of the DPMContainer.
 10017  type 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.
 10023  type 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.
 10031  type 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.
 10067  func (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.
 10122  func (dj DpmJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
 10123  	return nil, false
 10124  }
 10125  
 10126  // AsAzureStorageJob is the BasicJob implementation for DpmJob.
 10127  func (dj DpmJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
 10128  	return nil, false
 10129  }
 10130  
 10131  // AsAzureWorkloadJob is the BasicJob implementation for DpmJob.
 10132  func (dj DpmJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
 10133  	return nil, false
 10134  }
 10135  
 10136  // AsDpmJob is the BasicJob implementation for DpmJob.
 10137  func (dj DpmJob) AsDpmJob() (*DpmJob, bool) {
 10138  	return &dj, true
 10139  }
 10140  
 10141  // AsMabJob is the BasicJob implementation for DpmJob.
 10142  func (dj DpmJob) AsMabJob() (*MabJob, bool) {
 10143  	return nil, false
 10144  }
 10145  
 10146  // AsJob is the BasicJob implementation for DpmJob.
 10147  func (dj DpmJob) AsJob() (*Job, bool) {
 10148  	return nil, false
 10149  }
 10150  
 10151  // AsBasicJob is the BasicJob implementation for DpmJob.
 10152  func (dj DpmJob) AsBasicJob() (BasicJob, bool) {
 10153  	return &dj, true
 10154  }
 10155  
 10156  // DpmJobExtendedInfo additional information on the DPM workload-specific job.
 10157  type 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.
 10167  func (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.
 10182  type 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.
 10196  type 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.
 10236  func (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.
 10297  func (dpi DPMProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
 10298  	return nil, false
 10299  }
 10300  
 10301  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10302  func (dpi DPMProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
 10303  	return nil, false
 10304  }
 10305  
 10306  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10307  func (dpi DPMProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
 10308  	return nil, false
 10309  }
 10310  
 10311  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10312  func (dpi DPMProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
 10313  	return nil, false
 10314  }
 10315  
 10316  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10317  func (dpi DPMProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
 10318  	return nil, false
 10319  }
 10320  
 10321  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10322  func (dpi DPMProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
 10323  	return nil, false
 10324  }
 10325  
 10326  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10327  func (dpi DPMProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
 10328  	return nil, false
 10329  }
 10330  
 10331  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10332  func (dpi DPMProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
 10333  	return nil, false
 10334  }
 10335  
 10336  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10337  func (dpi DPMProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
 10338  	return nil, false
 10339  }
 10340  
 10341  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10342  func (dpi DPMProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
 10343  	return nil, false
 10344  }
 10345  
 10346  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10347  func (dpi DPMProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
 10348  	return nil, false
 10349  }
 10350  
 10351  // AsDPMProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10352  func (dpi DPMProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
 10353  	return &dpi, true
 10354  }
 10355  
 10356  // AsGenericProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10357  func (dpi DPMProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
 10358  	return nil, false
 10359  }
 10360  
 10361  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10362  func (dpi DPMProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
 10363  	return nil, false
 10364  }
 10365  
 10366  // AsProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10367  func (dpi DPMProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
 10368  	return nil, false
 10369  }
 10370  
 10371  // AsBasicProtectedItem is the BasicProtectedItem implementation for DPMProtectedItem.
 10372  func (dpi DPMProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
 10373  	return &dpi, true
 10374  }
 10375  
 10376  // DPMProtectedItemExtendedInfo additional information of DPM Protected item.
 10377  type 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.
 10409  func (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.
 10457  type 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.
 10471  type 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.
 10478  type 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  
 10507  func 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  }
 10529  func 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.
 10549  func (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.
 10595  func (eb EngineBase) AsAzureBackupServerEngine() (*AzureBackupServerEngine, bool) {
 10596  	return nil, false
 10597  }
 10598  
 10599  // AsDpmBackupEngine is the BasicEngineBase implementation for EngineBase.
 10600  func (eb EngineBase) AsDpmBackupEngine() (*DpmBackupEngine, bool) {
 10601  	return nil, false
 10602  }
 10603  
 10604  // AsEngineBase is the BasicEngineBase implementation for EngineBase.
 10605  func (eb EngineBase) AsEngineBase() (*EngineBase, bool) {
 10606  	return &eb, true
 10607  }
 10608  
 10609  // AsBasicEngineBase is the BasicEngineBase implementation for EngineBase.
 10610  func (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.
 10616  type 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.
 10635  func (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.
 10651  func (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
 10728  type 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.
 10737  type 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.
 10744  func (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.
 10771  func (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.
 10776  func (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.
 10781  func (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.
 10787  func (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.
 10795  func NewEngineBaseResourceListIterator(page EngineBaseResourceListPage) EngineBaseResourceListIterator {
 10796  	return EngineBaseResourceListIterator{page: page}
 10797  }
 10798  
 10799  // IsEmpty returns true if the ListResult contains no values.
 10800  func (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.
 10805  func (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.
 10811  func (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.
 10822  type 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.
 10829  func (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.
 10856  func (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.
 10861  func (page EngineBaseResourceListPage) NotDone() bool {
 10862  	return !page.ebrl.IsEmpty()
 10863  }
 10864  
 10865  // Response returns the raw server response from the last page request.
 10866  func (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.
 10871  func (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.
 10879  func 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.
 10887  type 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.
 10907  type 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.
 10915  func (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.
 10921  type 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.
 10931  func (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.)
 10938  type 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.
 10952  func (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.
 10958  type 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.
 10972  func (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.
 10994  func (ejori ExportJobsOperationResultInfo) AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool) {
 10995  	return &ejori, true
 10996  }
 10997  
 10998  // AsOperationResultInfo is the BasicOperationResultInfoBase implementation for ExportJobsOperationResultInfo.
 10999  func (ejori ExportJobsOperationResultInfo) AsOperationResultInfo() (*OperationResultInfo, bool) {
 11000  	return nil, false
 11001  }
 11002  
 11003  // AsOperationResultInfoBase is the BasicOperationResultInfoBase implementation for ExportJobsOperationResultInfo.
 11004  func (ejori ExportJobsOperationResultInfo) AsOperationResultInfoBase() (*OperationResultInfoBase, bool) {
 11005  	return nil, false
 11006  }
 11007  
 11008  // AsBasicOperationResultInfoBase is the BasicOperationResultInfoBase implementation for ExportJobsOperationResultInfo.
 11009  func (ejori ExportJobsOperationResultInfo) AsBasicOperationResultInfoBase() (BasicOperationResultInfoBase, bool) {
 11010  	return &ejori, true
 11011  }
 11012  
 11013  // ExtendedProperties extended Properties for Azure IaasVM Backup.
 11014  type ExtendedProperties struct {
 11015  	// DiskExclusionProperties - Extended Properties for Disk Exclusion.
 11016  	DiskExclusionProperties *DiskExclusionProperties `json:"diskExclusionProperties,omitempty"`
 11017  }
 11018  
 11019  // BasicFeatureSupportRequest base class for feature request
 11020  type BasicFeatureSupportRequest interface {
 11021  	AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool)
 11022  	AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool)
 11023  	AsFeatureSupportRequest() (*FeatureSupportRequest, bool)
 11024  }
 11025  
 11026  // FeatureSupportRequest base class for feature request
 11027  type FeatureSupportRequest struct {
 11028  	// FeatureType - Possible values include: 'FeatureTypeFeatureSupportRequest', 'FeatureTypeAzureBackupGoals', 'FeatureTypeAzureVMResourceBackup'
 11029  	FeatureType FeatureType `json:"featureType,omitempty"`
 11030  }
 11031  
 11032  func 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  }
 11054  func 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.
 11074  func (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.
 11084  func (fsr FeatureSupportRequest) AsAzureBackupGoalFeatureSupportRequest() (*AzureBackupGoalFeatureSupportRequest, bool) {
 11085  	return nil, false
 11086  }
 11087  
 11088  // AsAzureVMResourceFeatureSupportRequest is the BasicFeatureSupportRequest implementation for FeatureSupportRequest.
 11089  func (fsr FeatureSupportRequest) AsAzureVMResourceFeatureSupportRequest() (*AzureVMResourceFeatureSupportRequest, bool) {
 11090  	return nil, false
 11091  }
 11092  
 11093  // AsFeatureSupportRequest is the BasicFeatureSupportRequest implementation for FeatureSupportRequest.
 11094  func (fsr FeatureSupportRequest) AsFeatureSupportRequest() (*FeatureSupportRequest, bool) {
 11095  	return &fsr, true
 11096  }
 11097  
 11098  // AsBasicFeatureSupportRequest is the BasicFeatureSupportRequest implementation for FeatureSupportRequest.
 11099  func (fsr FeatureSupportRequest) AsBasicFeatureSupportRequest() (BasicFeatureSupportRequest, bool) {
 11100  	return &fsr, true
 11101  }
 11102  
 11103  // GenericContainer base class for generic container of backup items
 11104  type 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.
 11122  func (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.
 11150  func (gc GenericContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
 11151  	return nil, false
 11152  }
 11153  
 11154  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for GenericContainer.
 11155  func (gc GenericContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
 11156  	return nil, false
 11157  }
 11158  
 11159  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for GenericContainer.
 11160  func (gc GenericContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
 11161  	return nil, false
 11162  }
 11163  
 11164  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
 11165  func (gc GenericContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
 11166  	return nil, false
 11167  }
 11168  
 11169  // AsAzureSQLContainer is the BasicProtectionContainer implementation for GenericContainer.
 11170  func (gc GenericContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
 11171  	return nil, false
 11172  }
 11173  
 11174  // AsAzureStorageContainer is the BasicProtectionContainer implementation for GenericContainer.
 11175  func (gc GenericContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
 11176  	return nil, false
 11177  }
 11178  
 11179  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
 11180  func (gc GenericContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
 11181  	return nil, false
 11182  }
 11183  
 11184  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for GenericContainer.
 11185  func (gc GenericContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
 11186  	return nil, false
 11187  }
 11188  
 11189  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for GenericContainer.
 11190  func (gc GenericContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
 11191  	return nil, false
 11192  }
 11193  
 11194  // AsDpmContainer is the BasicProtectionContainer implementation for GenericContainer.
 11195  func (gc GenericContainer) AsDpmContainer() (*DpmContainer, bool) {
 11196  	return nil, false
 11197  }
 11198  
 11199  // AsBasicDpmContainer is the BasicProtectionContainer implementation for GenericContainer.
 11200  func (gc GenericContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
 11201  	return nil, false
 11202  }
 11203  
 11204  // AsGenericContainer is the BasicProtectionContainer implementation for GenericContainer.
 11205  func (gc GenericContainer) AsGenericContainer() (*GenericContainer, bool) {
 11206  	return &gc, true
 11207  }
 11208  
 11209  // AsIaaSVMContainer is the BasicProtectionContainer implementation for GenericContainer.
 11210  func (gc GenericContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
 11211  	return nil, false
 11212  }
 11213  
 11214  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for GenericContainer.
 11215  func (gc GenericContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
 11216  	return nil, false
 11217  }
 11218  
 11219  // AsMabContainer is the BasicProtectionContainer implementation for GenericContainer.
 11220  func (gc GenericContainer) AsMabContainer() (*MabContainer, bool) {
 11221  	return nil, false
 11222  }
 11223  
 11224  // AsProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
 11225  func (gc GenericContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
 11226  	return nil, false
 11227  }
 11228  
 11229  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for GenericContainer.
 11230  func (gc GenericContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
 11231  	return &gc, true
 11232  }
 11233  
 11234  // GenericContainerExtendedInfo container extended information
 11235  type 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.
 11245  func (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.
 11260  type 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.
 11304  func (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.
 11371  func (gpi GenericProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
 11372  	return nil, false
 11373  }
 11374  
 11375  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11376  func (gpi GenericProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
 11377  	return nil, false
 11378  }
 11379  
 11380  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11381  func (gpi GenericProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
 11382  	return nil, false
 11383  }
 11384  
 11385  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11386  func (gpi GenericProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
 11387  	return nil, false
 11388  }
 11389  
 11390  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11391  func (gpi GenericProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
 11392  	return nil, false
 11393  }
 11394  
 11395  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11396  func (gpi GenericProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
 11397  	return nil, false
 11398  }
 11399  
 11400  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11401  func (gpi GenericProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
 11402  	return nil, false
 11403  }
 11404  
 11405  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11406  func (gpi GenericProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
 11407  	return nil, false
 11408  }
 11409  
 11410  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11411  func (gpi GenericProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
 11412  	return nil, false
 11413  }
 11414  
 11415  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11416  func (gpi GenericProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
 11417  	return nil, false
 11418  }
 11419  
 11420  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11421  func (gpi GenericProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
 11422  	return nil, false
 11423  }
 11424  
 11425  // AsDPMProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11426  func (gpi GenericProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
 11427  	return nil, false
 11428  }
 11429  
 11430  // AsGenericProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11431  func (gpi GenericProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
 11432  	return &gpi, true
 11433  }
 11434  
 11435  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11436  func (gpi GenericProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
 11437  	return nil, false
 11438  }
 11439  
 11440  // AsProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11441  func (gpi GenericProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
 11442  	return nil, false
 11443  }
 11444  
 11445  // AsBasicProtectedItem is the BasicProtectedItem implementation for GenericProtectedItem.
 11446  func (gpi GenericProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
 11447  	return &gpi, true
 11448  }
 11449  
 11450  // GenericProtectionPolicy azure VM (Mercury) workload-specific backup policy.
 11451  type 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.
 11465  func (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.
 11487  func (gpp GenericProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
 11488  	return nil, false
 11489  }
 11490  
 11491  // AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
 11492  func (gpp GenericProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
 11493  	return nil, false
 11494  }
 11495  
 11496  // AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
 11497  func (gpp GenericProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
 11498  	return nil, false
 11499  }
 11500  
 11501  // AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
 11502  func (gpp GenericProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
 11503  	return nil, false
 11504  }
 11505  
 11506  // AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
 11507  func (gpp GenericProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
 11508  	return &gpp, true
 11509  }
 11510  
 11511  // AsMabProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
 11512  func (gpp GenericProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
 11513  	return nil, false
 11514  }
 11515  
 11516  // AsProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
 11517  func (gpp GenericProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
 11518  	return nil, false
 11519  }
 11520  
 11521  // AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for GenericProtectionPolicy.
 11522  func (gpp GenericProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
 11523  	return &gpp, true
 11524  }
 11525  
 11526  // GenericRecoveryPoint generic backup copy.
 11527  type 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.
 11541  func (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.
 11563  func (grp GenericRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
 11564  	return nil, false
 11565  }
 11566  
 11567  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11568  func (grp GenericRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
 11569  	return nil, false
 11570  }
 11571  
 11572  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11573  func (grp GenericRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
 11574  	return nil, false
 11575  }
 11576  
 11577  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11578  func (grp GenericRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
 11579  	return nil, false
 11580  }
 11581  
 11582  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11583  func (grp GenericRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
 11584  	return nil, false
 11585  }
 11586  
 11587  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11588  func (grp GenericRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
 11589  	return nil, false
 11590  }
 11591  
 11592  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11593  func (grp GenericRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
 11594  	return nil, false
 11595  }
 11596  
 11597  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11598  func (grp GenericRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
 11599  	return nil, false
 11600  }
 11601  
 11602  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11603  func (grp GenericRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
 11604  	return nil, false
 11605  }
 11606  
 11607  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11608  func (grp GenericRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
 11609  	return nil, false
 11610  }
 11611  
 11612  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11613  func (grp GenericRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
 11614  	return &grp, true
 11615  }
 11616  
 11617  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11618  func (grp GenericRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
 11619  	return nil, false
 11620  }
 11621  
 11622  // AsRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11623  func (grp GenericRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
 11624  	return nil, false
 11625  }
 11626  
 11627  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for GenericRecoveryPoint.
 11628  func (grp GenericRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
 11629  	return &grp, true
 11630  }
 11631  
 11632  // GetProtectedItemQueryObject filters to list backup items.
 11633  type 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.
 11639  type 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.
 11647  func (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.
 11660  func (ivbr IaasVMBackupRequest) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
 11661  	return nil, false
 11662  }
 11663  
 11664  // AsAzureWorkloadBackupRequest is the BasicRequest implementation for IaasVMBackupRequest.
 11665  func (ivbr IaasVMBackupRequest) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
 11666  	return nil, false
 11667  }
 11668  
 11669  // AsIaasVMBackupRequest is the BasicRequest implementation for IaasVMBackupRequest.
 11670  func (ivbr IaasVMBackupRequest) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
 11671  	return &ivbr, true
 11672  }
 11673  
 11674  // AsRequest is the BasicRequest implementation for IaasVMBackupRequest.
 11675  func (ivbr IaasVMBackupRequest) AsRequest() (*Request, bool) {
 11676  	return nil, false
 11677  }
 11678  
 11679  // AsBasicRequest is the BasicRequest implementation for IaasVMBackupRequest.
 11680  func (ivbr IaasVMBackupRequest) AsBasicRequest() (BasicRequest, bool) {
 11681  	return &ivbr, true
 11682  }
 11683  
 11684  // BasicIaaSVMContainer iaaS VM workload-specific container.
 11685  type BasicIaaSVMContainer interface {
 11686  	AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool)
 11687  	AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool)
 11688  	AsIaaSVMContainer() (*IaaSVMContainer, bool)
 11689  }
 11690  
 11691  // IaaSVMContainer iaaS VM workload-specific container.
 11692  type 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  
 11711  func 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  }
 11733  func 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.
 11753  func (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.
 11784  func (isc IaaSVMContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
 11785  	return nil, false
 11786  }
 11787  
 11788  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11789  func (isc IaaSVMContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
 11790  	return nil, false
 11791  }
 11792  
 11793  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11794  func (isc IaaSVMContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
 11795  	return nil, false
 11796  }
 11797  
 11798  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11799  func (isc IaaSVMContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
 11800  	return nil, false
 11801  }
 11802  
 11803  // AsAzureSQLContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11804  func (isc IaaSVMContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
 11805  	return nil, false
 11806  }
 11807  
 11808  // AsAzureStorageContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11809  func (isc IaaSVMContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
 11810  	return nil, false
 11811  }
 11812  
 11813  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11814  func (isc IaaSVMContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
 11815  	return nil, false
 11816  }
 11817  
 11818  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11819  func (isc IaaSVMContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
 11820  	return nil, false
 11821  }
 11822  
 11823  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11824  func (isc IaaSVMContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
 11825  	return nil, false
 11826  }
 11827  
 11828  // AsDpmContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11829  func (isc IaaSVMContainer) AsDpmContainer() (*DpmContainer, bool) {
 11830  	return nil, false
 11831  }
 11832  
 11833  // AsBasicDpmContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11834  func (isc IaaSVMContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
 11835  	return nil, false
 11836  }
 11837  
 11838  // AsGenericContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11839  func (isc IaaSVMContainer) AsGenericContainer() (*GenericContainer, bool) {
 11840  	return nil, false
 11841  }
 11842  
 11843  // AsIaaSVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11844  func (isc IaaSVMContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
 11845  	return &isc, true
 11846  }
 11847  
 11848  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11849  func (isc IaaSVMContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
 11850  	return &isc, true
 11851  }
 11852  
 11853  // AsMabContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11854  func (isc IaaSVMContainer) AsMabContainer() (*MabContainer, bool) {
 11855  	return nil, false
 11856  }
 11857  
 11858  // AsProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11859  func (isc IaaSVMContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
 11860  	return nil, false
 11861  }
 11862  
 11863  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for IaaSVMContainer.
 11864  func (isc IaaSVMContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
 11865  	return &isc, true
 11866  }
 11867  
 11868  // IaasVMILRRegistrationRequest restore files/folders from a backup copy of IaaS VM.
 11869  type 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.
 11883  func (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.
 11905  func (ivrr IaasVMILRRegistrationRequest) AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool) {
 11906  	return nil, false
 11907  }
 11908  
 11909  // AsIaasVMILRRegistrationRequest is the BasicILRRequest implementation for IaasVMILRRegistrationRequest.
 11910  func (ivrr IaasVMILRRegistrationRequest) AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool) {
 11911  	return &ivrr, true
 11912  }
 11913  
 11914  // AsILRRequest is the BasicILRRequest implementation for IaasVMILRRegistrationRequest.
 11915  func (ivrr IaasVMILRRegistrationRequest) AsILRRequest() (*ILRRequest, bool) {
 11916  	return nil, false
 11917  }
 11918  
 11919  // AsBasicILRRequest is the BasicILRRequest implementation for IaasVMILRRegistrationRequest.
 11920  func (ivrr IaasVMILRRegistrationRequest) AsBasicILRRequest() (BasicILRRequest, bool) {
 11921  	return &ivrr, true
 11922  }
 11923  
 11924  // BasicIaaSVMProtectableItem iaaS VM workload-specific backup item.
 11925  type BasicIaaSVMProtectableItem interface {
 11926  	AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool)
 11927  	AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool)
 11928  	AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool)
 11929  }
 11930  
 11931  // IaaSVMProtectableItem iaaS VM workload-specific backup item.
 11932  type 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  
 11947  func 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  }
 11969  func 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.
 11989  func (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.
 12014  func (ispi IaaSVMProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
 12015  	return nil, false
 12016  }
 12017  
 12018  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12019  func (ispi IaaSVMProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
 12020  	return nil, false
 12021  }
 12022  
 12023  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12024  func (ispi IaaSVMProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
 12025  	return nil, false
 12026  }
 12027  
 12028  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12029  func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
 12030  	return nil, false
 12031  }
 12032  
 12033  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12034  func (ispi IaaSVMProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
 12035  	return nil, false
 12036  }
 12037  
 12038  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12039  func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
 12040  	return nil, false
 12041  }
 12042  
 12043  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12044  func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
 12045  	return nil, false
 12046  }
 12047  
 12048  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12049  func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
 12050  	return nil, false
 12051  }
 12052  
 12053  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12054  func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
 12055  	return nil, false
 12056  }
 12057  
 12058  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12059  func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
 12060  	return nil, false
 12061  }
 12062  
 12063  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12064  func (ispi IaaSVMProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
 12065  	return nil, false
 12066  }
 12067  
 12068  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12069  func (ispi IaaSVMProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
 12070  	return &ispi, true
 12071  }
 12072  
 12073  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12074  func (ispi IaaSVMProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
 12075  	return &ispi, true
 12076  }
 12077  
 12078  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12079  func (ispi IaaSVMProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
 12080  	return nil, false
 12081  }
 12082  
 12083  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for IaaSVMProtectableItem.
 12084  func (ispi IaaSVMProtectableItem) AsBasicWorkloadProtectableItem() (BasicWorkloadProtectableItem, bool) {
 12085  	return &ispi, true
 12086  }
 12087  
 12088  // IaasVMRecoveryPoint iaaS VM workload specific backup copy.
 12089  type 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.
 12121  func (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.
 12155  func (ivrp IaasVMRecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
 12156  	return nil, false
 12157  }
 12158  
 12159  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12160  func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
 12161  	return nil, false
 12162  }
 12163  
 12164  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12165  func (ivrp IaasVMRecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
 12166  	return nil, false
 12167  }
 12168  
 12169  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12170  func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
 12171  	return nil, false
 12172  }
 12173  
 12174  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12175  func (ivrp IaasVMRecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
 12176  	return nil, false
 12177  }
 12178  
 12179  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12180  func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
 12181  	return nil, false
 12182  }
 12183  
 12184  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12185  func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
 12186  	return nil, false
 12187  }
 12188  
 12189  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12190  func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
 12191  	return nil, false
 12192  }
 12193  
 12194  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12195  func (ivrp IaasVMRecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
 12196  	return nil, false
 12197  }
 12198  
 12199  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12200  func (ivrp IaasVMRecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
 12201  	return nil, false
 12202  }
 12203  
 12204  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12205  func (ivrp IaasVMRecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
 12206  	return nil, false
 12207  }
 12208  
 12209  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12210  func (ivrp IaasVMRecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
 12211  	return &ivrp, true
 12212  }
 12213  
 12214  // AsRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12215  func (ivrp IaasVMRecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
 12216  	return nil, false
 12217  }
 12218  
 12219  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for IaasVMRecoveryPoint.
 12220  func (ivrp IaasVMRecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
 12221  	return &ivrp, true
 12222  }
 12223  
 12224  // IaasVMRestoreRequest iaaS VM workload-specific restore.
 12225  type 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.
 12268  func (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.
 12323  func (ivrr IaasVMRestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
 12324  	return nil, false
 12325  }
 12326  
 12327  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12328  func (ivrr IaasVMRestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
 12329  	return nil, false
 12330  }
 12331  
 12332  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12333  func (ivrr IaasVMRestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
 12334  	return nil, false
 12335  }
 12336  
 12337  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12338  func (ivrr IaasVMRestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
 12339  	return nil, false
 12340  }
 12341  
 12342  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12343  func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
 12344  	return nil, false
 12345  }
 12346  
 12347  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12348  func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
 12349  	return nil, false
 12350  }
 12351  
 12352  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12353  func (ivrr IaasVMRestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
 12354  	return nil, false
 12355  }
 12356  
 12357  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12358  func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
 12359  	return nil, false
 12360  }
 12361  
 12362  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12363  func (ivrr IaasVMRestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
 12364  	return nil, false
 12365  }
 12366  
 12367  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12368  func (ivrr IaasVMRestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
 12369  	return nil, false
 12370  }
 12371  
 12372  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12373  func (ivrr IaasVMRestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
 12374  	return &ivrr, true
 12375  }
 12376  
 12377  // AsRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12378  func (ivrr IaasVMRestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
 12379  	return nil, false
 12380  }
 12381  
 12382  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for IaasVMRestoreRequest.
 12383  func (ivrr IaasVMRestoreRequest) AsBasicRestoreRequest() (BasicRestoreRequest, bool) {
 12384  	return &ivrr, true
 12385  }
 12386  
 12387  // BasicILRRequest parameters to Provision ILR API.
 12388  type BasicILRRequest interface {
 12389  	AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool)
 12390  	AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool)
 12391  	AsILRRequest() (*ILRRequest, bool)
 12392  }
 12393  
 12394  // ILRRequest parameters to Provision ILR API.
 12395  type ILRRequest struct {
 12396  	// ObjectType - Possible values include: 'ObjectTypeILRRequest', 'ObjectTypeAzureFileShareProvisionILRRequest', 'ObjectTypeIaasVMILRRegistrationRequest'
 12397  	ObjectType ObjectTypeBasicILRRequest `json:"objectType,omitempty"`
 12398  }
 12399  
 12400  func 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  }
 12422  func 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.
 12442  func (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.
 12452  func (ir ILRRequest) AsAzureFileShareProvisionILRRequest() (*AzureFileShareProvisionILRRequest, bool) {
 12453  	return nil, false
 12454  }
 12455  
 12456  // AsIaasVMILRRegistrationRequest is the BasicILRRequest implementation for ILRRequest.
 12457  func (ir ILRRequest) AsIaasVMILRRegistrationRequest() (*IaasVMILRRegistrationRequest, bool) {
 12458  	return nil, false
 12459  }
 12460  
 12461  // AsILRRequest is the BasicILRRequest implementation for ILRRequest.
 12462  func (ir ILRRequest) AsILRRequest() (*ILRRequest, bool) {
 12463  	return &ir, true
 12464  }
 12465  
 12466  // AsBasicILRRequest is the BasicILRRequest implementation for ILRRequest.
 12467  func (ir ILRRequest) AsBasicILRRequest() (BasicILRRequest, bool) {
 12468  	return &ir, true
 12469  }
 12470  
 12471  // ILRRequestResource parameters to Provision ILR API.
 12472  type 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.
 12490  func (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.
 12506  func (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.
 12583  type 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.
 12595  type 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.
 12605  func (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.
 12617  type InstantItemRecoveryTarget struct {
 12618  	// ClientScripts - List of client scripts.
 12619  	ClientScripts *[]ClientScriptForConnect `json:"clientScripts,omitempty"`
 12620  }
 12621  
 12622  // InstantRPAdditionalDetails ...
 12623  type 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.
 12629  type 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.
 12639  type 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  
 12658  func 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  }
 12692  func 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.
 12712  func (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.
 12743  func (j Job) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
 12744  	return nil, false
 12745  }
 12746  
 12747  // AsAzureStorageJob is the BasicJob implementation for Job.
 12748  func (j Job) AsAzureStorageJob() (*AzureStorageJob, bool) {
 12749  	return nil, false
 12750  }
 12751  
 12752  // AsAzureWorkloadJob is the BasicJob implementation for Job.
 12753  func (j Job) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
 12754  	return nil, false
 12755  }
 12756  
 12757  // AsDpmJob is the BasicJob implementation for Job.
 12758  func (j Job) AsDpmJob() (*DpmJob, bool) {
 12759  	return nil, false
 12760  }
 12761  
 12762  // AsMabJob is the BasicJob implementation for Job.
 12763  func (j Job) AsMabJob() (*MabJob, bool) {
 12764  	return nil, false
 12765  }
 12766  
 12767  // AsJob is the BasicJob implementation for Job.
 12768  func (j Job) AsJob() (*Job, bool) {
 12769  	return &j, true
 12770  }
 12771  
 12772  // AsBasicJob is the BasicJob implementation for Job.
 12773  func (j Job) AsBasicJob() (BasicJob, bool) {
 12774  	return &j, true
 12775  }
 12776  
 12777  // JobQueryObject filters to list the jobs.
 12778  type 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.
 12794  type 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.
 12813  func (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.
 12829  func (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
 12906  type 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.
 12915  type 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.
 12922  func (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.
 12949  func (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.
 12954  func (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.
 12959  func (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.
 12965  func (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.
 12973  func NewJobResourceListIterator(page JobResourceListPage) JobResourceListIterator {
 12974  	return JobResourceListIterator{page: page}
 12975  }
 12976  
 12977  // IsEmpty returns true if the ListResult contains no values.
 12978  func (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.
 12983  func (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.
 12989  func (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.
 13000  type 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.
 13007  func (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.
 13034  func (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.
 13039  func (page JobResourceListPage) NotDone() bool {
 13040  	return !page.jrl.IsEmpty()
 13041  }
 13042  
 13043  // Response returns the raw server response from the last page request.
 13044  func (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.
 13049  func (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.
 13057  func 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.
 13065  type 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.
 13081  type 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
 13091  type 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.
 13099  type 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.
 13107  func (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.
 13120  func (lsp LogSchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
 13121  	return &lsp, true
 13122  }
 13123  
 13124  // AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
 13125  func (lsp LogSchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
 13126  	return nil, false
 13127  }
 13128  
 13129  // AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
 13130  func (lsp LogSchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
 13131  	return nil, false
 13132  }
 13133  
 13134  // AsSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
 13135  func (lsp LogSchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
 13136  	return nil, false
 13137  }
 13138  
 13139  // AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for LogSchedulePolicy.
 13140  func (lsp LogSchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
 13141  	return &lsp, true
 13142  }
 13143  
 13144  // LongTermRetentionPolicy long term retention policy.
 13145  type 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.
 13159  func (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.
 13181  func (ltrp LongTermRetentionPolicy) AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool) {
 13182  	return &ltrp, true
 13183  }
 13184  
 13185  // AsSimpleRetentionPolicy is the BasicRetentionPolicy implementation for LongTermRetentionPolicy.
 13186  func (ltrp LongTermRetentionPolicy) AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool) {
 13187  	return nil, false
 13188  }
 13189  
 13190  // AsRetentionPolicy is the BasicRetentionPolicy implementation for LongTermRetentionPolicy.
 13191  func (ltrp LongTermRetentionPolicy) AsRetentionPolicy() (*RetentionPolicy, bool) {
 13192  	return nil, false
 13193  }
 13194  
 13195  // AsBasicRetentionPolicy is the BasicRetentionPolicy implementation for LongTermRetentionPolicy.
 13196  func (ltrp LongTermRetentionPolicy) AsBasicRetentionPolicy() (BasicRetentionPolicy, bool) {
 13197  	return &ltrp, true
 13198  }
 13199  
 13200  // LongTermSchedulePolicy long term policy schedule.
 13201  type 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.
 13207  func (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.
 13217  func (ltsp LongTermSchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
 13218  	return nil, false
 13219  }
 13220  
 13221  // AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
 13222  func (ltsp LongTermSchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
 13223  	return &ltsp, true
 13224  }
 13225  
 13226  // AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
 13227  func (ltsp LongTermSchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
 13228  	return nil, false
 13229  }
 13230  
 13231  // AsSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
 13232  func (ltsp LongTermSchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
 13233  	return nil, false
 13234  }
 13235  
 13236  // AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for LongTermSchedulePolicy.
 13237  func (ltsp LongTermSchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
 13238  	return &ltsp, true
 13239  }
 13240  
 13241  // MabContainer container with items backed up using MAB backup engine.
 13242  type 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.
 13270  func (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.
 13313  func (mc MabContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
 13314  	return nil, false
 13315  }
 13316  
 13317  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for MabContainer.
 13318  func (mc MabContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
 13319  	return nil, false
 13320  }
 13321  
 13322  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for MabContainer.
 13323  func (mc MabContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
 13324  	return nil, false
 13325  }
 13326  
 13327  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
 13328  func (mc MabContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
 13329  	return nil, false
 13330  }
 13331  
 13332  // AsAzureSQLContainer is the BasicProtectionContainer implementation for MabContainer.
 13333  func (mc MabContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
 13334  	return nil, false
 13335  }
 13336  
 13337  // AsAzureStorageContainer is the BasicProtectionContainer implementation for MabContainer.
 13338  func (mc MabContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
 13339  	return nil, false
 13340  }
 13341  
 13342  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
 13343  func (mc MabContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
 13344  	return nil, false
 13345  }
 13346  
 13347  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for MabContainer.
 13348  func (mc MabContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
 13349  	return nil, false
 13350  }
 13351  
 13352  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for MabContainer.
 13353  func (mc MabContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
 13354  	return nil, false
 13355  }
 13356  
 13357  // AsDpmContainer is the BasicProtectionContainer implementation for MabContainer.
 13358  func (mc MabContainer) AsDpmContainer() (*DpmContainer, bool) {
 13359  	return nil, false
 13360  }
 13361  
 13362  // AsBasicDpmContainer is the BasicProtectionContainer implementation for MabContainer.
 13363  func (mc MabContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
 13364  	return nil, false
 13365  }
 13366  
 13367  // AsGenericContainer is the BasicProtectionContainer implementation for MabContainer.
 13368  func (mc MabContainer) AsGenericContainer() (*GenericContainer, bool) {
 13369  	return nil, false
 13370  }
 13371  
 13372  // AsIaaSVMContainer is the BasicProtectionContainer implementation for MabContainer.
 13373  func (mc MabContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
 13374  	return nil, false
 13375  }
 13376  
 13377  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for MabContainer.
 13378  func (mc MabContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
 13379  	return nil, false
 13380  }
 13381  
 13382  // AsMabContainer is the BasicProtectionContainer implementation for MabContainer.
 13383  func (mc MabContainer) AsMabContainer() (*MabContainer, bool) {
 13384  	return &mc, true
 13385  }
 13386  
 13387  // AsProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
 13388  func (mc MabContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
 13389  	return nil, false
 13390  }
 13391  
 13392  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for MabContainer.
 13393  func (mc MabContainer) AsBasicProtectionContainer() (BasicProtectionContainer, bool) {
 13394  	return &mc, true
 13395  }
 13396  
 13397  // MabContainerExtendedInfo additional information of the container.
 13398  type 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.
 13412  type 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.
 13424  type 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.
 13432  func (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.
 13438  type 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.
 13484  func (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.
 13554  func (mffpi MabFileFolderProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
 13555  	return nil, false
 13556  }
 13557  
 13558  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13559  func (mffpi MabFileFolderProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
 13560  	return nil, false
 13561  }
 13562  
 13563  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13564  func (mffpi MabFileFolderProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
 13565  	return nil, false
 13566  }
 13567  
 13568  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13569  func (mffpi MabFileFolderProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
 13570  	return nil, false
 13571  }
 13572  
 13573  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13574  func (mffpi MabFileFolderProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
 13575  	return nil, false
 13576  }
 13577  
 13578  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13579  func (mffpi MabFileFolderProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
 13580  	return nil, false
 13581  }
 13582  
 13583  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13584  func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
 13585  	return nil, false
 13586  }
 13587  
 13588  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13589  func (mffpi MabFileFolderProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
 13590  	return nil, false
 13591  }
 13592  
 13593  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13594  func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
 13595  	return nil, false
 13596  }
 13597  
 13598  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13599  func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
 13600  	return nil, false
 13601  }
 13602  
 13603  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13604  func (mffpi MabFileFolderProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
 13605  	return nil, false
 13606  }
 13607  
 13608  // AsDPMProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13609  func (mffpi MabFileFolderProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
 13610  	return nil, false
 13611  }
 13612  
 13613  // AsGenericProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13614  func (mffpi MabFileFolderProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
 13615  	return nil, false
 13616  }
 13617  
 13618  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13619  func (mffpi MabFileFolderProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
 13620  	return &mffpi, true
 13621  }
 13622  
 13623  // AsProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13624  func (mffpi MabFileFolderProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
 13625  	return nil, false
 13626  }
 13627  
 13628  // AsBasicProtectedItem is the BasicProtectedItem implementation for MabFileFolderProtectedItem.
 13629  func (mffpi MabFileFolderProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
 13630  	return &mffpi, true
 13631  }
 13632  
 13633  // MabFileFolderProtectedItemExtendedInfo additional information on the backed up item.
 13634  type 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.
 13644  type 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.
 13678  func (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.
 13730  func (mj MabJob) AsAzureIaaSVMJob() (*AzureIaaSVMJob, bool) {
 13731  	return nil, false
 13732  }
 13733  
 13734  // AsAzureStorageJob is the BasicJob implementation for MabJob.
 13735  func (mj MabJob) AsAzureStorageJob() (*AzureStorageJob, bool) {
 13736  	return nil, false
 13737  }
 13738  
 13739  // AsAzureWorkloadJob is the BasicJob implementation for MabJob.
 13740  func (mj MabJob) AsAzureWorkloadJob() (*AzureWorkloadJob, bool) {
 13741  	return nil, false
 13742  }
 13743  
 13744  // AsDpmJob is the BasicJob implementation for MabJob.
 13745  func (mj MabJob) AsDpmJob() (*DpmJob, bool) {
 13746  	return nil, false
 13747  }
 13748  
 13749  // AsMabJob is the BasicJob implementation for MabJob.
 13750  func (mj MabJob) AsMabJob() (*MabJob, bool) {
 13751  	return &mj, true
 13752  }
 13753  
 13754  // AsJob is the BasicJob implementation for MabJob.
 13755  func (mj MabJob) AsJob() (*Job, bool) {
 13756  	return nil, false
 13757  }
 13758  
 13759  // AsBasicJob is the BasicJob implementation for MabJob.
 13760  func (mj MabJob) AsBasicJob() (BasicJob, bool) {
 13761  	return &mj, true
 13762  }
 13763  
 13764  // MabJobExtendedInfo additional information for the MAB workload-specific job.
 13765  type 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.
 13775  func (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.
 13790  type 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.
 13804  type 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.
 13816  func (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.
 13831  func (mpp MabProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
 13832  	return nil, false
 13833  }
 13834  
 13835  // AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
 13836  func (mpp MabProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
 13837  	return nil, false
 13838  }
 13839  
 13840  // AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
 13841  func (mpp MabProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
 13842  	return nil, false
 13843  }
 13844  
 13845  // AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
 13846  func (mpp MabProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
 13847  	return nil, false
 13848  }
 13849  
 13850  // AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
 13851  func (mpp MabProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
 13852  	return nil, false
 13853  }
 13854  
 13855  // AsMabProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
 13856  func (mpp MabProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
 13857  	return &mpp, true
 13858  }
 13859  
 13860  // AsProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
 13861  func (mpp MabProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
 13862  	return nil, false
 13863  }
 13864  
 13865  // AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for MabProtectionPolicy.
 13866  func (mpp MabProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
 13867  	return &mpp, true
 13868  }
 13869  
 13870  // UnmarshalJSON is the custom unmarshaler for MabProtectionPolicy struct.
 13871  func (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.
 13920  type 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.
 13936  type 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.
 13943  type 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.
 13957  type 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.
 13965  type 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.
 13973  func (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.
 13986  func (ori OperationResultInfo) AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool) {
 13987  	return nil, false
 13988  }
 13989  
 13990  // AsOperationResultInfo is the BasicOperationResultInfoBase implementation for OperationResultInfo.
 13991  func (ori OperationResultInfo) AsOperationResultInfo() (*OperationResultInfo, bool) {
 13992  	return &ori, true
 13993  }
 13994  
 13995  // AsOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfo.
 13996  func (ori OperationResultInfo) AsOperationResultInfoBase() (*OperationResultInfoBase, bool) {
 13997  	return nil, false
 13998  }
 13999  
 14000  // AsBasicOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfo.
 14001  func (ori OperationResultInfo) AsBasicOperationResultInfoBase() (BasicOperationResultInfoBase, bool) {
 14002  	return &ori, true
 14003  }
 14004  
 14005  // BasicOperationResultInfoBase base class for operation result info.
 14006  type BasicOperationResultInfoBase interface {
 14007  	AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool)
 14008  	AsOperationResultInfo() (*OperationResultInfo, bool)
 14009  	AsOperationResultInfoBase() (*OperationResultInfoBase, bool)
 14010  }
 14011  
 14012  // OperationResultInfoBase base class for operation result info.
 14013  type OperationResultInfoBase struct {
 14014  	// ObjectType - Possible values include: 'ObjectTypeOperationResultInfoBase', 'ObjectTypeExportJobsOperationResultInfo', 'ObjectTypeOperationResultInfo'
 14015  	ObjectType ObjectTypeBasicOperationResultInfoBase `json:"objectType,omitempty"`
 14016  }
 14017  
 14018  func 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  }
 14040  func 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.
 14060  func (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.
 14070  func (orib OperationResultInfoBase) AsExportJobsOperationResultInfo() (*ExportJobsOperationResultInfo, bool) {
 14071  	return nil, false
 14072  }
 14073  
 14074  // AsOperationResultInfo is the BasicOperationResultInfoBase implementation for OperationResultInfoBase.
 14075  func (orib OperationResultInfoBase) AsOperationResultInfo() (*OperationResultInfo, bool) {
 14076  	return nil, false
 14077  }
 14078  
 14079  // AsOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfoBase.
 14080  func (orib OperationResultInfoBase) AsOperationResultInfoBase() (*OperationResultInfoBase, bool) {
 14081  	return &orib, true
 14082  }
 14083  
 14084  // AsBasicOperationResultInfoBase is the BasicOperationResultInfoBase implementation for OperationResultInfoBase.
 14085  func (orib OperationResultInfoBase) AsBasicOperationResultInfoBase() (BasicOperationResultInfoBase, bool) {
 14086  	return &orib, true
 14087  }
 14088  
 14089  // OperationResultInfoBaseResource base class for operation result info.
 14090  type 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.
 14101  func (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.
 14114  func (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.
 14155  type 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.
 14174  func (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.
 14251  type 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.
 14259  type 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.
 14267  type OperationStatusExtendedInfo struct {
 14268  	// ObjectType - Possible values include: 'ObjectTypeOperationStatusExtendedInfo', 'ObjectTypeOperationStatusJobExtendedInfo', 'ObjectTypeOperationStatusJobsExtendedInfo', 'ObjectTypeOperationStatusProvisionILRExtendedInfo'
 14269  	ObjectType ObjectType `json:"objectType,omitempty"`
 14270  }
 14271  
 14272  func 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  }
 14298  func 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.
 14318  func (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.
 14328  func (osei OperationStatusExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
 14329  	return nil, false
 14330  }
 14331  
 14332  // AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
 14333  func (osei OperationStatusExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
 14334  	return nil, false
 14335  }
 14336  
 14337  // AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
 14338  func (osei OperationStatusExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
 14339  	return nil, false
 14340  }
 14341  
 14342  // AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
 14343  func (osei OperationStatusExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
 14344  	return &osei, true
 14345  }
 14346  
 14347  // AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusExtendedInfo.
 14348  func (osei OperationStatusExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
 14349  	return &osei, true
 14350  }
 14351  
 14352  // OperationStatusJobExtendedInfo operation status job extended info.
 14353  type 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.
 14361  func (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.
 14374  func (osjei OperationStatusJobExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
 14375  	return &osjei, true
 14376  }
 14377  
 14378  // AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
 14379  func (osjei OperationStatusJobExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
 14380  	return nil, false
 14381  }
 14382  
 14383  // AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
 14384  func (osjei OperationStatusJobExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
 14385  	return nil, false
 14386  }
 14387  
 14388  // AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
 14389  func (osjei OperationStatusJobExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
 14390  	return nil, false
 14391  }
 14392  
 14393  // AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobExtendedInfo.
 14394  func (osjei OperationStatusJobExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
 14395  	return &osjei, true
 14396  }
 14397  
 14398  // OperationStatusJobsExtendedInfo operation status extended info for list of jobs.
 14399  type 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.
 14409  func (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.
 14425  func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
 14426  	return nil, false
 14427  }
 14428  
 14429  // AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
 14430  func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
 14431  	return &osjei, true
 14432  }
 14433  
 14434  // AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
 14435  func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
 14436  	return nil, false
 14437  }
 14438  
 14439  // AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
 14440  func (osjei OperationStatusJobsExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
 14441  	return nil, false
 14442  }
 14443  
 14444  // AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusJobsExtendedInfo.
 14445  func (osjei OperationStatusJobsExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
 14446  	return &osjei, true
 14447  }
 14448  
 14449  // OperationStatusProvisionILRExtendedInfo operation status extended info for ILR provision action.
 14450  type 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.
 14458  func (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.
 14471  func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusJobExtendedInfo() (*OperationStatusJobExtendedInfo, bool) {
 14472  	return nil, false
 14473  }
 14474  
 14475  // AsOperationStatusJobsExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
 14476  func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusJobsExtendedInfo() (*OperationStatusJobsExtendedInfo, bool) {
 14477  	return nil, false
 14478  }
 14479  
 14480  // AsOperationStatusProvisionILRExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
 14481  func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusProvisionILRExtendedInfo() (*OperationStatusProvisionILRExtendedInfo, bool) {
 14482  	return &ospiei, true
 14483  }
 14484  
 14485  // AsOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
 14486  func (ospiei OperationStatusProvisionILRExtendedInfo) AsOperationStatusExtendedInfo() (*OperationStatusExtendedInfo, bool) {
 14487  	return nil, false
 14488  }
 14489  
 14490  // AsBasicOperationStatusExtendedInfo is the BasicOperationStatusExtendedInfo implementation for OperationStatusProvisionILRExtendedInfo.
 14491  func (ospiei OperationStatusProvisionILRExtendedInfo) AsBasicOperationStatusExtendedInfo() (BasicOperationStatusExtendedInfo, bool) {
 14492  	return &ospiei, true
 14493  }
 14494  
 14495  // OperationWorkerResponse this is the base class for operation result responses.
 14496  type 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.
 14504  func (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
 14516  type 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.
 14524  type 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.
 14539  type 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
 14551  type 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
 14569  type PrivateEndpoint struct {
 14570  	// ID - Gets or sets id
 14571  	ID *string `json:"id,omitempty"`
 14572  }
 14573  
 14574  // PrivateEndpointConnection private Endpoint Connection Response Properties
 14575  type 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.
 14586  type 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.
 14594  func (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.
 14605  func (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.
 14623  type 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.
 14631  func (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.
 14642  func (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
 14665  type 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.
 14684  func (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
 14702  type 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.
 14712  type BasicProtectableContainer interface {
 14713  	AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool)
 14714  	AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool)
 14715  	AsProtectableContainer() (*ProtectableContainer, bool)
 14716  }
 14717  
 14718  // ProtectableContainer protectable Container Class.
 14719  type 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  
 14732  func 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  }
 14754  func 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.
 14774  func (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.
 14796  func (pc ProtectableContainer) AsAzureStorageProtectableContainer() (*AzureStorageProtectableContainer, bool) {
 14797  	return nil, false
 14798  }
 14799  
 14800  // AsAzureVMAppContainerProtectableContainer is the BasicProtectableContainer implementation for ProtectableContainer.
 14801  func (pc ProtectableContainer) AsAzureVMAppContainerProtectableContainer() (*AzureVMAppContainerProtectableContainer, bool) {
 14802  	return nil, false
 14803  }
 14804  
 14805  // AsProtectableContainer is the BasicProtectableContainer implementation for ProtectableContainer.
 14806  func (pc ProtectableContainer) AsProtectableContainer() (*ProtectableContainer, bool) {
 14807  	return &pc, true
 14808  }
 14809  
 14810  // AsBasicProtectableContainer is the BasicProtectableContainer implementation for ProtectableContainer.
 14811  func (pc ProtectableContainer) AsBasicProtectableContainer() (BasicProtectableContainer, bool) {
 14812  	return &pc, true
 14813  }
 14814  
 14815  // ProtectableContainerResource protectable Container Class.
 14816  type 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.
 14834  func (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.
 14850  func (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
 14927  type 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.
 14937  type 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.
 14944  func (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.
 14971  func (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.
 14976  func (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.
 14981  func (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.
 14987  func (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.
 14995  func NewProtectableContainerResourceListIterator(page ProtectableContainerResourceListPage) ProtectableContainerResourceListIterator {
 14996  	return ProtectableContainerResourceListIterator{page: page}
 14997  }
 14998  
 14999  // IsEmpty returns true if the ListResult contains no values.
 15000  func (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.
 15005  func (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.
 15011  func (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.
 15022  type 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.
 15029  func (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.
 15056  func (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.
 15061  func (page ProtectableContainerResourceListPage) NotDone() bool {
 15062  	return !page.pcrl.IsEmpty()
 15063  }
 15064  
 15065  // Response returns the raw server response from the last page request.
 15066  func (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.
 15071  func (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.
 15079  func 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.
 15087  type 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.
 15106  type 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  
 15137  func 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  }
 15199  func 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.
 15219  func (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.
 15268  func (pi ProtectedItem) AsAzureFileshareProtectedItem() (*AzureFileshareProtectedItem, bool) {
 15269  	return nil, false
 15270  }
 15271  
 15272  // AsAzureIaaSClassicComputeVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15273  func (pi ProtectedItem) AsAzureIaaSClassicComputeVMProtectedItem() (*AzureIaaSClassicComputeVMProtectedItem, bool) {
 15274  	return nil, false
 15275  }
 15276  
 15277  // AsAzureIaaSComputeVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15278  func (pi ProtectedItem) AsAzureIaaSComputeVMProtectedItem() (*AzureIaaSComputeVMProtectedItem, bool) {
 15279  	return nil, false
 15280  }
 15281  
 15282  // AsAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15283  func (pi ProtectedItem) AsAzureIaaSVMProtectedItem() (*AzureIaaSVMProtectedItem, bool) {
 15284  	return nil, false
 15285  }
 15286  
 15287  // AsBasicAzureIaaSVMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15288  func (pi ProtectedItem) AsBasicAzureIaaSVMProtectedItem() (BasicAzureIaaSVMProtectedItem, bool) {
 15289  	return nil, false
 15290  }
 15291  
 15292  // AsAzureSQLProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15293  func (pi ProtectedItem) AsAzureSQLProtectedItem() (*AzureSQLProtectedItem, bool) {
 15294  	return nil, false
 15295  }
 15296  
 15297  // AsAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15298  func (pi ProtectedItem) AsAzureVMWorkloadProtectedItem() (*AzureVMWorkloadProtectedItem, bool) {
 15299  	return nil, false
 15300  }
 15301  
 15302  // AsBasicAzureVMWorkloadProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15303  func (pi ProtectedItem) AsBasicAzureVMWorkloadProtectedItem() (BasicAzureVMWorkloadProtectedItem, bool) {
 15304  	return nil, false
 15305  }
 15306  
 15307  // AsAzureVMWorkloadSAPAseDatabaseProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15308  func (pi ProtectedItem) AsAzureVMWorkloadSAPAseDatabaseProtectedItem() (*AzureVMWorkloadSAPAseDatabaseProtectedItem, bool) {
 15309  	return nil, false
 15310  }
 15311  
 15312  // AsAzureVMWorkloadSAPHanaDatabaseProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15313  func (pi ProtectedItem) AsAzureVMWorkloadSAPHanaDatabaseProtectedItem() (*AzureVMWorkloadSAPHanaDatabaseProtectedItem, bool) {
 15314  	return nil, false
 15315  }
 15316  
 15317  // AsAzureVMWorkloadSQLDatabaseProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15318  func (pi ProtectedItem) AsAzureVMWorkloadSQLDatabaseProtectedItem() (*AzureVMWorkloadSQLDatabaseProtectedItem, bool) {
 15319  	return nil, false
 15320  }
 15321  
 15322  // AsDPMProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15323  func (pi ProtectedItem) AsDPMProtectedItem() (*DPMProtectedItem, bool) {
 15324  	return nil, false
 15325  }
 15326  
 15327  // AsGenericProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15328  func (pi ProtectedItem) AsGenericProtectedItem() (*GenericProtectedItem, bool) {
 15329  	return nil, false
 15330  }
 15331  
 15332  // AsMabFileFolderProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15333  func (pi ProtectedItem) AsMabFileFolderProtectedItem() (*MabFileFolderProtectedItem, bool) {
 15334  	return nil, false
 15335  }
 15336  
 15337  // AsProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15338  func (pi ProtectedItem) AsProtectedItem() (*ProtectedItem, bool) {
 15339  	return &pi, true
 15340  }
 15341  
 15342  // AsBasicProtectedItem is the BasicProtectedItem implementation for ProtectedItem.
 15343  func (pi ProtectedItem) AsBasicProtectedItem() (BasicProtectedItem, bool) {
 15344  	return &pi, true
 15345  }
 15346  
 15347  // ProtectedItemQueryObject filters to list backup items.
 15348  type 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.
 15370  type 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.
 15389  func (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.
 15405  func (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
 15482  type 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.
 15491  type 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.
 15498  func (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.
 15525  func (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.
 15530  func (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.
 15535  func (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.
 15541  func (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.
 15549  func NewProtectedItemResourceListIterator(page ProtectedItemResourceListPage) ProtectedItemResourceListIterator {
 15550  	return ProtectedItemResourceListIterator{page: page}
 15551  }
 15552  
 15553  // IsEmpty returns true if the ListResult contains no values.
 15554  func (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.
 15559  func (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.
 15565  func (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.
 15576  type 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.
 15583  func (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.
 15610  func (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.
 15615  func (page ProtectedItemResourceListPage) NotDone() bool {
 15616  	return !page.pirl.IsEmpty()
 15617  }
 15618  
 15619  // Response returns the raw server response from the last page request.
 15620  func (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.
 15625  func (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.
 15633  func 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.
 15642  type 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.
 15663  type 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  
 15676  func 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  }
 15738  func 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.
 15758  func (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.
 15780  func (pc ProtectionContainer) AsAzureBackupServerContainer() (*AzureBackupServerContainer, bool) {
 15781  	return nil, false
 15782  }
 15783  
 15784  // AsAzureIaaSClassicComputeVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15785  func (pc ProtectionContainer) AsAzureIaaSClassicComputeVMContainer() (*AzureIaaSClassicComputeVMContainer, bool) {
 15786  	return nil, false
 15787  }
 15788  
 15789  // AsAzureIaaSComputeVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15790  func (pc ProtectionContainer) AsAzureIaaSComputeVMContainer() (*AzureIaaSComputeVMContainer, bool) {
 15791  	return nil, false
 15792  }
 15793  
 15794  // AsAzureSQLAGWorkloadContainerProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15795  func (pc ProtectionContainer) AsAzureSQLAGWorkloadContainerProtectionContainer() (*AzureSQLAGWorkloadContainerProtectionContainer, bool) {
 15796  	return nil, false
 15797  }
 15798  
 15799  // AsAzureSQLContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15800  func (pc ProtectionContainer) AsAzureSQLContainer() (*AzureSQLContainer, bool) {
 15801  	return nil, false
 15802  }
 15803  
 15804  // AsAzureStorageContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15805  func (pc ProtectionContainer) AsAzureStorageContainer() (*AzureStorageContainer, bool) {
 15806  	return nil, false
 15807  }
 15808  
 15809  // AsAzureVMAppContainerProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15810  func (pc ProtectionContainer) AsAzureVMAppContainerProtectionContainer() (*AzureVMAppContainerProtectionContainer, bool) {
 15811  	return nil, false
 15812  }
 15813  
 15814  // AsAzureWorkloadContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15815  func (pc ProtectionContainer) AsAzureWorkloadContainer() (*AzureWorkloadContainer, bool) {
 15816  	return nil, false
 15817  }
 15818  
 15819  // AsBasicAzureWorkloadContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15820  func (pc ProtectionContainer) AsBasicAzureWorkloadContainer() (BasicAzureWorkloadContainer, bool) {
 15821  	return nil, false
 15822  }
 15823  
 15824  // AsDpmContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15825  func (pc ProtectionContainer) AsDpmContainer() (*DpmContainer, bool) {
 15826  	return nil, false
 15827  }
 15828  
 15829  // AsBasicDpmContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15830  func (pc ProtectionContainer) AsBasicDpmContainer() (BasicDpmContainer, bool) {
 15831  	return nil, false
 15832  }
 15833  
 15834  // AsGenericContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15835  func (pc ProtectionContainer) AsGenericContainer() (*GenericContainer, bool) {
 15836  	return nil, false
 15837  }
 15838  
 15839  // AsIaaSVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15840  func (pc ProtectionContainer) AsIaaSVMContainer() (*IaaSVMContainer, bool) {
 15841  	return nil, false
 15842  }
 15843  
 15844  // AsBasicIaaSVMContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15845  func (pc ProtectionContainer) AsBasicIaaSVMContainer() (BasicIaaSVMContainer, bool) {
 15846  	return nil, false
 15847  }
 15848  
 15849  // AsMabContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15850  func (pc ProtectionContainer) AsMabContainer() (*MabContainer, bool) {
 15851  	return nil, false
 15852  }
 15853  
 15854  // AsProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15855  func (pc ProtectionContainer) AsProtectionContainer() (*ProtectionContainer, bool) {
 15856  	return &pc, true
 15857  }
 15858  
 15859  // AsBasicProtectionContainer is the BasicProtectionContainer implementation for ProtectionContainer.
 15860  func (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.
 15866  type 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.
 15885  func (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.
 15901  func (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
 15978  type 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.
 15988  type 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.
 15995  func (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.
 16022  func (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.
 16027  func (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.
 16032  func (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.
 16038  func (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.
 16046  func NewProtectionContainerResourceListIterator(page ProtectionContainerResourceListPage) ProtectionContainerResourceListIterator {
 16047  	return ProtectionContainerResourceListIterator{page: page}
 16048  }
 16049  
 16050  // IsEmpty returns true if the ListResult contains no values.
 16051  func (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.
 16056  func (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.
 16062  func (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.
 16073  type 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.
 16080  func (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.
 16107  func (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.
 16112  func (page ProtectionContainerResourceListPage) NotDone() bool {
 16113  	return !page.pcrl.IsEmpty()
 16114  }
 16115  
 16116  // Response returns the raw server response from the last page request.
 16117  func (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.
 16122  func (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.
 16130  func 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.
 16138  type 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.
 16149  type 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  
 16164  func 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  }
 16194  func 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.
 16214  func (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.
 16239  func (pi ProtectionIntent) AsAzureRecoveryServiceVaultProtectionIntent() (*AzureRecoveryServiceVaultProtectionIntent, bool) {
 16240  	return nil, false
 16241  }
 16242  
 16243  // AsBasicAzureRecoveryServiceVaultProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
 16244  func (pi ProtectionIntent) AsBasicAzureRecoveryServiceVaultProtectionIntent() (BasicAzureRecoveryServiceVaultProtectionIntent, bool) {
 16245  	return nil, false
 16246  }
 16247  
 16248  // AsAzureResourceProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
 16249  func (pi ProtectionIntent) AsAzureResourceProtectionIntent() (*AzureResourceProtectionIntent, bool) {
 16250  	return nil, false
 16251  }
 16252  
 16253  // AsAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
 16254  func (pi ProtectionIntent) AsAzureWorkloadAutoProtectionIntent() (*AzureWorkloadAutoProtectionIntent, bool) {
 16255  	return nil, false
 16256  }
 16257  
 16258  // AsBasicAzureWorkloadAutoProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
 16259  func (pi ProtectionIntent) AsBasicAzureWorkloadAutoProtectionIntent() (BasicAzureWorkloadAutoProtectionIntent, bool) {
 16260  	return nil, false
 16261  }
 16262  
 16263  // AsAzureWorkloadSQLAutoProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
 16264  func (pi ProtectionIntent) AsAzureWorkloadSQLAutoProtectionIntent() (*AzureWorkloadSQLAutoProtectionIntent, bool) {
 16265  	return nil, false
 16266  }
 16267  
 16268  // AsProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
 16269  func (pi ProtectionIntent) AsProtectionIntent() (*ProtectionIntent, bool) {
 16270  	return &pi, true
 16271  }
 16272  
 16273  // AsBasicProtectionIntent is the BasicProtectionIntent implementation for ProtectionIntent.
 16274  func (pi ProtectionIntent) AsBasicProtectionIntent() (BasicProtectionIntent, bool) {
 16275  	return &pi, true
 16276  }
 16277  
 16278  // ProtectionIntentQueryObject filters to list protection intent.
 16279  type 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.
 16291  type 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.
 16310  func (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.
 16326  func (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
 16403  type 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.
 16413  type 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.
 16420  func (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.
 16447  func (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.
 16452  func (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.
 16457  func (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.
 16463  func (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.
 16471  func NewProtectionIntentResourceListIterator(page ProtectionIntentResourceListPage) ProtectionIntentResourceListIterator {
 16472  	return ProtectionIntentResourceListIterator{page: page}
 16473  }
 16474  
 16475  // IsEmpty returns true if the ListResult contains no values.
 16476  func (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.
 16481  func (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.
 16487  func (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.
 16498  type 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.
 16505  func (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.
 16532  func (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.
 16537  func (page ProtectionIntentResourceListPage) NotDone() bool {
 16538  	return !page.pirl.IsEmpty()
 16539  }
 16540  
 16541  // Response returns the raw server response from the last page request.
 16542  func (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.
 16547  func (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.
 16555  func 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.
 16563  type 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.
 16575  type 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  
 16582  func 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  }
 16620  func 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.
 16640  func (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.
 16653  func (pp ProtectionPolicy) AsAzureVMWorkloadProtectionPolicy() (*AzureVMWorkloadProtectionPolicy, bool) {
 16654  	return nil, false
 16655  }
 16656  
 16657  // AsAzureFileShareProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
 16658  func (pp ProtectionPolicy) AsAzureFileShareProtectionPolicy() (*AzureFileShareProtectionPolicy, bool) {
 16659  	return nil, false
 16660  }
 16661  
 16662  // AsAzureIaaSVMProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
 16663  func (pp ProtectionPolicy) AsAzureIaaSVMProtectionPolicy() (*AzureIaaSVMProtectionPolicy, bool) {
 16664  	return nil, false
 16665  }
 16666  
 16667  // AsAzureSQLProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
 16668  func (pp ProtectionPolicy) AsAzureSQLProtectionPolicy() (*AzureSQLProtectionPolicy, bool) {
 16669  	return nil, false
 16670  }
 16671  
 16672  // AsGenericProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
 16673  func (pp ProtectionPolicy) AsGenericProtectionPolicy() (*GenericProtectionPolicy, bool) {
 16674  	return nil, false
 16675  }
 16676  
 16677  // AsMabProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
 16678  func (pp ProtectionPolicy) AsMabProtectionPolicy() (*MabProtectionPolicy, bool) {
 16679  	return nil, false
 16680  }
 16681  
 16682  // AsProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
 16683  func (pp ProtectionPolicy) AsProtectionPolicy() (*ProtectionPolicy, bool) {
 16684  	return &pp, true
 16685  }
 16686  
 16687  // AsBasicProtectionPolicy is the BasicProtectionPolicy implementation for ProtectionPolicy.
 16688  func (pp ProtectionPolicy) AsBasicProtectionPolicy() (BasicProtectionPolicy, bool) {
 16689  	return &pp, true
 16690  }
 16691  
 16692  // ProtectionPolicyQueryObject filters the list backup policies API.
 16693  type 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.
 16704  type 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.
 16723  func (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.
 16739  func (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
 16816  type 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.
 16826  type 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.
 16833  func (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.
 16860  func (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.
 16865  func (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.
 16870  func (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.
 16876  func (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.
 16884  func NewProtectionPolicyResourceListIterator(page ProtectionPolicyResourceListPage) ProtectionPolicyResourceListIterator {
 16885  	return ProtectionPolicyResourceListIterator{page: page}
 16886  }
 16887  
 16888  // IsEmpty returns true if the ListResult contains no values.
 16889  func (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.
 16894  func (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.
 16900  func (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.
 16911  type 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.
 16918  func (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.
 16945  func (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.
 16950  func (page ProtectionPolicyResourceListPage) NotDone() bool {
 16951  	return !page.pprl.IsEmpty()
 16952  }
 16953  
 16954  // Response returns the raw server response from the last page request.
 16955  func (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.
 16960  func (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.
 16968  func 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.
 16976  type 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.
 16993  type 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  
 16998  func 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  }
 17048  func 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.
 17068  func (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.
 17078  func (rp RecoveryPoint) AsAzureFileShareRecoveryPoint() (*AzureFileShareRecoveryPoint, bool) {
 17079  	return nil, false
 17080  }
 17081  
 17082  // AsAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17083  func (rp RecoveryPoint) AsAzureWorkloadPointInTimeRecoveryPoint() (*AzureWorkloadPointInTimeRecoveryPoint, bool) {
 17084  	return nil, false
 17085  }
 17086  
 17087  // AsBasicAzureWorkloadPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17088  func (rp RecoveryPoint) AsBasicAzureWorkloadPointInTimeRecoveryPoint() (BasicAzureWorkloadPointInTimeRecoveryPoint, bool) {
 17089  	return nil, false
 17090  }
 17091  
 17092  // AsAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17093  func (rp RecoveryPoint) AsAzureWorkloadRecoveryPoint() (*AzureWorkloadRecoveryPoint, bool) {
 17094  	return nil, false
 17095  }
 17096  
 17097  // AsBasicAzureWorkloadRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17098  func (rp RecoveryPoint) AsBasicAzureWorkloadRecoveryPoint() (BasicAzureWorkloadRecoveryPoint, bool) {
 17099  	return nil, false
 17100  }
 17101  
 17102  // AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17103  func (rp RecoveryPoint) AsAzureWorkloadSAPHanaPointInTimeRecoveryPoint() (*AzureWorkloadSAPHanaPointInTimeRecoveryPoint, bool) {
 17104  	return nil, false
 17105  }
 17106  
 17107  // AsAzureWorkloadSAPHanaRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17108  func (rp RecoveryPoint) AsAzureWorkloadSAPHanaRecoveryPoint() (*AzureWorkloadSAPHanaRecoveryPoint, bool) {
 17109  	return nil, false
 17110  }
 17111  
 17112  // AsAzureWorkloadSQLPointInTimeRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17113  func (rp RecoveryPoint) AsAzureWorkloadSQLPointInTimeRecoveryPoint() (*AzureWorkloadSQLPointInTimeRecoveryPoint, bool) {
 17114  	return nil, false
 17115  }
 17116  
 17117  // AsAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17118  func (rp RecoveryPoint) AsAzureWorkloadSQLRecoveryPoint() (*AzureWorkloadSQLRecoveryPoint, bool) {
 17119  	return nil, false
 17120  }
 17121  
 17122  // AsBasicAzureWorkloadSQLRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17123  func (rp RecoveryPoint) AsBasicAzureWorkloadSQLRecoveryPoint() (BasicAzureWorkloadSQLRecoveryPoint, bool) {
 17124  	return nil, false
 17125  }
 17126  
 17127  // AsGenericRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17128  func (rp RecoveryPoint) AsGenericRecoveryPoint() (*GenericRecoveryPoint, bool) {
 17129  	return nil, false
 17130  }
 17131  
 17132  // AsIaasVMRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17133  func (rp RecoveryPoint) AsIaasVMRecoveryPoint() (*IaasVMRecoveryPoint, bool) {
 17134  	return nil, false
 17135  }
 17136  
 17137  // AsRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17138  func (rp RecoveryPoint) AsRecoveryPoint() (*RecoveryPoint, bool) {
 17139  	return &rp, true
 17140  }
 17141  
 17142  // AsBasicRecoveryPoint is the BasicRecoveryPoint implementation for RecoveryPoint.
 17143  func (rp RecoveryPoint) AsBasicRecoveryPoint() (BasicRecoveryPoint, bool) {
 17144  	return &rp, true
 17145  }
 17146  
 17147  // RecoveryPointDiskConfiguration disk configuration
 17148  type 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.
 17161  type 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.
 17180  func (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.
 17196  func (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
 17273  type 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.
 17282  type 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.
 17289  func (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.
 17316  func (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.
 17321  func (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.
 17326  func (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.
 17332  func (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.
 17340  func NewRecoveryPointResourceListIterator(page RecoveryPointResourceListPage) RecoveryPointResourceListIterator {
 17341  	return RecoveryPointResourceListIterator{page: page}
 17342  }
 17343  
 17344  // IsEmpty returns true if the ListResult contains no values.
 17345  func (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.
 17350  func (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.
 17356  func (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.
 17367  type 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.
 17374  func (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.
 17401  func (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.
 17406  func (page RecoveryPointResourceListPage) NotDone() bool {
 17407  	return !page.rprl.IsEmpty()
 17408  }
 17409  
 17410  // Response returns the raw server response from the last page request.
 17411  func (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.
 17416  func (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.
 17424  func 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.
 17432  type 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.
 17440  type 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.
 17448  type Request struct {
 17449  	// ObjectType - Possible values include: 'ObjectTypeBackupRequest', 'ObjectTypeAzureFileShareBackupRequest', 'ObjectTypeAzureWorkloadBackupRequest', 'ObjectTypeIaasVMBackupRequest'
 17450  	ObjectType ObjectTypeBasicRequest `json:"objectType,omitempty"`
 17451  }
 17452  
 17453  func 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  }
 17479  func 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.
 17499  func (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.
 17509  func (r Request) AsAzureFileShareBackupRequest() (*AzureFileShareBackupRequest, bool) {
 17510  	return nil, false
 17511  }
 17512  
 17513  // AsAzureWorkloadBackupRequest is the BasicRequest implementation for Request.
 17514  func (r Request) AsAzureWorkloadBackupRequest() (*AzureWorkloadBackupRequest, bool) {
 17515  	return nil, false
 17516  }
 17517  
 17518  // AsIaasVMBackupRequest is the BasicRequest implementation for Request.
 17519  func (r Request) AsIaasVMBackupRequest() (*IaasVMBackupRequest, bool) {
 17520  	return nil, false
 17521  }
 17522  
 17523  // AsRequest is the BasicRequest implementation for Request.
 17524  func (r Request) AsRequest() (*Request, bool) {
 17525  	return &r, true
 17526  }
 17527  
 17528  // AsBasicRequest is the BasicRequest implementation for Request.
 17529  func (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.
 17535  type 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.
 17553  func (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.
 17569  func (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.
 17646  type 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.
 17662  func (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.
 17677  type 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.
 17687  type 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.
 17706  func (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.
 17724  type 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.
 17736  func (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.
 17742  type 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.
 17748  type 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.
 17762  type 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.
 17781  func (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.
 17799  type 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.
 17809  type 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.
 17826  type RestoreRequest struct {
 17827  	// ObjectType - Possible values include: 'ObjectTypeRestoreRequest', 'ObjectTypeAzureFileShareRestoreRequest', 'ObjectTypeAzureWorkloadPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSAPHanaRestoreRequest', 'ObjectTypeAzureWorkloadSQLPointInTimeRestoreRequest', 'ObjectTypeAzureWorkloadSQLRestoreRequest', 'ObjectTypeIaasVMRestoreRequest'
 17828  	ObjectType ObjectTypeBasicRestoreRequest `json:"objectType,omitempty"`
 17829  }
 17830  
 17831  func 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  }
 17877  func 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.
 17897  func (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.
 17907  func (rr RestoreRequest) AsAzureFileShareRestoreRequest() (*AzureFileShareRestoreRequest, bool) {
 17908  	return nil, false
 17909  }
 17910  
 17911  // AsAzureWorkloadPointInTimeRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17912  func (rr RestoreRequest) AsAzureWorkloadPointInTimeRestoreRequest() (*AzureWorkloadPointInTimeRestoreRequest, bool) {
 17913  	return nil, false
 17914  }
 17915  
 17916  // AsAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17917  func (rr RestoreRequest) AsAzureWorkloadRestoreRequest() (*AzureWorkloadRestoreRequest, bool) {
 17918  	return nil, false
 17919  }
 17920  
 17921  // AsBasicAzureWorkloadRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17922  func (rr RestoreRequest) AsBasicAzureWorkloadRestoreRequest() (BasicAzureWorkloadRestoreRequest, bool) {
 17923  	return nil, false
 17924  }
 17925  
 17926  // AsAzureWorkloadSAPHanaPointInTimeRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17927  func (rr RestoreRequest) AsAzureWorkloadSAPHanaPointInTimeRestoreRequest() (*AzureWorkloadSAPHanaPointInTimeRestoreRequest, bool) {
 17928  	return nil, false
 17929  }
 17930  
 17931  // AsAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17932  func (rr RestoreRequest) AsAzureWorkloadSAPHanaRestoreRequest() (*AzureWorkloadSAPHanaRestoreRequest, bool) {
 17933  	return nil, false
 17934  }
 17935  
 17936  // AsBasicAzureWorkloadSAPHanaRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17937  func (rr RestoreRequest) AsBasicAzureWorkloadSAPHanaRestoreRequest() (BasicAzureWorkloadSAPHanaRestoreRequest, bool) {
 17938  	return nil, false
 17939  }
 17940  
 17941  // AsAzureWorkloadSQLPointInTimeRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17942  func (rr RestoreRequest) AsAzureWorkloadSQLPointInTimeRestoreRequest() (*AzureWorkloadSQLPointInTimeRestoreRequest, bool) {
 17943  	return nil, false
 17944  }
 17945  
 17946  // AsAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17947  func (rr RestoreRequest) AsAzureWorkloadSQLRestoreRequest() (*AzureWorkloadSQLRestoreRequest, bool) {
 17948  	return nil, false
 17949  }
 17950  
 17951  // AsBasicAzureWorkloadSQLRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17952  func (rr RestoreRequest) AsBasicAzureWorkloadSQLRestoreRequest() (BasicAzureWorkloadSQLRestoreRequest, bool) {
 17953  	return nil, false
 17954  }
 17955  
 17956  // AsIaasVMRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17957  func (rr RestoreRequest) AsIaasVMRestoreRequest() (*IaasVMRestoreRequest, bool) {
 17958  	return nil, false
 17959  }
 17960  
 17961  // AsRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17962  func (rr RestoreRequest) AsRestoreRequest() (*RestoreRequest, bool) {
 17963  	return &rr, true
 17964  }
 17965  
 17966  // AsBasicRestoreRequest is the BasicRestoreRequest implementation for RestoreRequest.
 17967  func (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.
 17973  type 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.
 17991  func (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.
 18007  func (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.
 18084  type 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.
 18093  type BasicRetentionPolicy interface {
 18094  	AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool)
 18095  	AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool)
 18096  	AsRetentionPolicy() (*RetentionPolicy, bool)
 18097  }
 18098  
 18099  // RetentionPolicy base class for retention policy.
 18100  type RetentionPolicy struct {
 18101  	// RetentionPolicyType - Possible values include: 'RetentionPolicyTypeRetentionPolicy', 'RetentionPolicyTypeLongTermRetentionPolicy', 'RetentionPolicyTypeSimpleRetentionPolicy'
 18102  	RetentionPolicyType RetentionPolicyType `json:"retentionPolicyType,omitempty"`
 18103  }
 18104  
 18105  func 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  }
 18127  func 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.
 18147  func (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.
 18157  func (rp RetentionPolicy) AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool) {
 18158  	return nil, false
 18159  }
 18160  
 18161  // AsSimpleRetentionPolicy is the BasicRetentionPolicy implementation for RetentionPolicy.
 18162  func (rp RetentionPolicy) AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool) {
 18163  	return nil, false
 18164  }
 18165  
 18166  // AsRetentionPolicy is the BasicRetentionPolicy implementation for RetentionPolicy.
 18167  func (rp RetentionPolicy) AsRetentionPolicy() (*RetentionPolicy, bool) {
 18168  	return &rp, true
 18169  }
 18170  
 18171  // AsBasicRetentionPolicy is the BasicRetentionPolicy implementation for RetentionPolicy.
 18172  func (rp RetentionPolicy) AsBasicRetentionPolicy() (BasicRetentionPolicy, bool) {
 18173  	return &rp, true
 18174  }
 18175  
 18176  // BasicSchedulePolicy base class for backup schedule.
 18177  type 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.
 18185  type SchedulePolicy struct {
 18186  	// SchedulePolicyType - Possible values include: 'SchedulePolicyTypeSchedulePolicy', 'SchedulePolicyTypeLogSchedulePolicy', 'SchedulePolicyTypeLongTermSchedulePolicy', 'SchedulePolicyTypeSimpleSchedulePolicy'
 18187  	SchedulePolicyType SchedulePolicyType `json:"schedulePolicyType,omitempty"`
 18188  }
 18189  
 18190  func 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  }
 18216  func 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.
 18236  func (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.
 18246  func (sp SchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
 18247  	return nil, false
 18248  }
 18249  
 18250  // AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
 18251  func (sp SchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
 18252  	return nil, false
 18253  }
 18254  
 18255  // AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
 18256  func (sp SchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
 18257  	return nil, false
 18258  }
 18259  
 18260  // AsSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
 18261  func (sp SchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
 18262  	return &sp, true
 18263  }
 18264  
 18265  // AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for SchedulePolicy.
 18266  func (sp SchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
 18267  	return &sp, true
 18268  }
 18269  
 18270  // Settings common settings field for backup management
 18271  type 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.
 18282  type 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.
 18290  func (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.
 18303  func (srp SimpleRetentionPolicy) AsLongTermRetentionPolicy() (*LongTermRetentionPolicy, bool) {
 18304  	return nil, false
 18305  }
 18306  
 18307  // AsSimpleRetentionPolicy is the BasicRetentionPolicy implementation for SimpleRetentionPolicy.
 18308  func (srp SimpleRetentionPolicy) AsSimpleRetentionPolicy() (*SimpleRetentionPolicy, bool) {
 18309  	return &srp, true
 18310  }
 18311  
 18312  // AsRetentionPolicy is the BasicRetentionPolicy implementation for SimpleRetentionPolicy.
 18313  func (srp SimpleRetentionPolicy) AsRetentionPolicy() (*RetentionPolicy, bool) {
 18314  	return nil, false
 18315  }
 18316  
 18317  // AsBasicRetentionPolicy is the BasicRetentionPolicy implementation for SimpleRetentionPolicy.
 18318  func (srp SimpleRetentionPolicy) AsBasicRetentionPolicy() (BasicRetentionPolicy, bool) {
 18319  	return &srp, true
 18320  }
 18321  
 18322  // SimpleSchedulePolicy simple policy schedule.
 18323  type 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.
 18337  func (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.
 18359  func (ssp SimpleSchedulePolicy) AsLogSchedulePolicy() (*LogSchedulePolicy, bool) {
 18360  	return nil, false
 18361  }
 18362  
 18363  // AsLongTermSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
 18364  func (ssp SimpleSchedulePolicy) AsLongTermSchedulePolicy() (*LongTermSchedulePolicy, bool) {
 18365  	return nil, false
 18366  }
 18367  
 18368  // AsSimpleSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
 18369  func (ssp SimpleSchedulePolicy) AsSimpleSchedulePolicy() (*SimpleSchedulePolicy, bool) {
 18370  	return &ssp, true
 18371  }
 18372  
 18373  // AsSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
 18374  func (ssp SimpleSchedulePolicy) AsSchedulePolicy() (*SchedulePolicy, bool) {
 18375  	return nil, false
 18376  }
 18377  
 18378  // AsBasicSchedulePolicy is the BasicSchedulePolicy implementation for SimpleSchedulePolicy.
 18379  func (ssp SimpleSchedulePolicy) AsBasicSchedulePolicy() (BasicSchedulePolicy, bool) {
 18380  	return &ssp, true
 18381  }
 18382  
 18383  // SQLDataDirectory sQLDataDirectory info
 18384  type 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
 18394  type 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.
 18406  type 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.
 18416  type 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
 18439  type 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.
 18449  func (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.
 18489  type 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.
 18497  type 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.
 18509  type 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.
 18520  type 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.
 18528  func (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.
 18539  func (vivror ValidateIaasVMRestoreOperationRequest) AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool) {
 18540  	return &vivror, true
 18541  }
 18542  
 18543  // AsValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
 18544  func (vivror ValidateIaasVMRestoreOperationRequest) AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool) {
 18545  	return nil, false
 18546  }
 18547  
 18548  // AsBasicValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
 18549  func (vivror ValidateIaasVMRestoreOperationRequest) AsBasicValidateRestoreOperationRequest() (BasicValidateRestoreOperationRequest, bool) {
 18550  	return &vivror, true
 18551  }
 18552  
 18553  // AsValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
 18554  func (vivror ValidateIaasVMRestoreOperationRequest) AsValidateOperationRequest() (*ValidateOperationRequest, bool) {
 18555  	return nil, false
 18556  }
 18557  
 18558  // AsBasicValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateIaasVMRestoreOperationRequest.
 18559  func (vivror ValidateIaasVMRestoreOperationRequest) AsBasicValidateOperationRequest() (BasicValidateOperationRequest, bool) {
 18560  	return &vivror, true
 18561  }
 18562  
 18563  // UnmarshalJSON is the custom unmarshaler for ValidateIaasVMRestoreOperationRequest struct.
 18564  func (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.
 18596  type 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.
 18604  type ValidateOperationRequest struct {
 18605  	// ObjectType - Possible values include: 'ObjectTypeValidateOperationRequest', 'ObjectTypeValidateIaasVMRestoreOperationRequest', 'ObjectTypeValidateRestoreOperationRequest'
 18606  	ObjectType ObjectTypeBasicValidateOperationRequest `json:"objectType,omitempty"`
 18607  }
 18608  
 18609  func 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  }
 18631  func 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.
 18651  func (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.
 18661  func (vor ValidateOperationRequest) AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool) {
 18662  	return nil, false
 18663  }
 18664  
 18665  // AsValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
 18666  func (vor ValidateOperationRequest) AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool) {
 18667  	return nil, false
 18668  }
 18669  
 18670  // AsBasicValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
 18671  func (vor ValidateOperationRequest) AsBasicValidateRestoreOperationRequest() (BasicValidateRestoreOperationRequest, bool) {
 18672  	return nil, false
 18673  }
 18674  
 18675  // AsValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
 18676  func (vor ValidateOperationRequest) AsValidateOperationRequest() (*ValidateOperationRequest, bool) {
 18677  	return &vor, true
 18678  }
 18679  
 18680  // AsBasicValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateOperationRequest.
 18681  func (vor ValidateOperationRequest) AsBasicValidateOperationRequest() (BasicValidateOperationRequest, bool) {
 18682  	return &vor, true
 18683  }
 18684  
 18685  // ValidateOperationResponse base class for validate operation response.
 18686  type ValidateOperationResponse struct {
 18687  	// ValidationResults - Gets the validation result
 18688  	ValidationResults *[]ErrorDetail `json:"validationResults,omitempty"`
 18689  }
 18690  
 18691  // ValidateOperationsResponse ...
 18692  type ValidateOperationsResponse struct {
 18693  	autorest.Response         `json:"-"`
 18694  	ValidateOperationResponse *ValidateOperationResponse `json:"validateOperationResponse,omitempty"`
 18695  }
 18696  
 18697  // BasicValidateRestoreOperationRequest azureRestoreValidation request.
 18698  type BasicValidateRestoreOperationRequest interface {
 18699  	AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool)
 18700  	AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool)
 18701  }
 18702  
 18703  // ValidateRestoreOperationRequest azureRestoreValidation request.
 18704  type 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  
 18711  func 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  }
 18729  func 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.
 18749  func (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.
 18760  func (vror ValidateRestoreOperationRequest) AsValidateIaasVMRestoreOperationRequest() (*ValidateIaasVMRestoreOperationRequest, bool) {
 18761  	return nil, false
 18762  }
 18763  
 18764  // AsValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
 18765  func (vror ValidateRestoreOperationRequest) AsValidateRestoreOperationRequest() (*ValidateRestoreOperationRequest, bool) {
 18766  	return &vror, true
 18767  }
 18768  
 18769  // AsBasicValidateRestoreOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
 18770  func (vror ValidateRestoreOperationRequest) AsBasicValidateRestoreOperationRequest() (BasicValidateRestoreOperationRequest, bool) {
 18771  	return &vror, true
 18772  }
 18773  
 18774  // AsValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
 18775  func (vror ValidateRestoreOperationRequest) AsValidateOperationRequest() (*ValidateOperationRequest, bool) {
 18776  	return nil, false
 18777  }
 18778  
 18779  // AsBasicValidateOperationRequest is the BasicValidateOperationRequest implementation for ValidateRestoreOperationRequest.
 18780  func (vror ValidateRestoreOperationRequest) AsBasicValidateOperationRequest() (BasicValidateOperationRequest, bool) {
 18781  	return &vror, true
 18782  }
 18783  
 18784  // UnmarshalJSON is the custom unmarshaler for ValidateRestoreOperationRequest struct.
 18785  func (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.
 18817  type 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.
 18825  type 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.
 18835  type 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.
 18845  type 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.
 18858  type 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  
 18871  func 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  }
 18913  func 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.
 18933  func (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.
 18955  func (wi WorkloadItem) AsAzureVMWorkloadItem() (*AzureVMWorkloadItem, bool) {
 18956  	return nil, false
 18957  }
 18958  
 18959  // AsBasicAzureVMWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18960  func (wi WorkloadItem) AsBasicAzureVMWorkloadItem() (BasicAzureVMWorkloadItem, bool) {
 18961  	return nil, false
 18962  }
 18963  
 18964  // AsAzureVMWorkloadSAPAseDatabaseWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18965  func (wi WorkloadItem) AsAzureVMWorkloadSAPAseDatabaseWorkloadItem() (*AzureVMWorkloadSAPAseDatabaseWorkloadItem, bool) {
 18966  	return nil, false
 18967  }
 18968  
 18969  // AsAzureVMWorkloadSAPAseSystemWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18970  func (wi WorkloadItem) AsAzureVMWorkloadSAPAseSystemWorkloadItem() (*AzureVMWorkloadSAPAseSystemWorkloadItem, bool) {
 18971  	return nil, false
 18972  }
 18973  
 18974  // AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18975  func (wi WorkloadItem) AsAzureVMWorkloadSAPHanaDatabaseWorkloadItem() (*AzureVMWorkloadSAPHanaDatabaseWorkloadItem, bool) {
 18976  	return nil, false
 18977  }
 18978  
 18979  // AsAzureVMWorkloadSAPHanaSystemWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18980  func (wi WorkloadItem) AsAzureVMWorkloadSAPHanaSystemWorkloadItem() (*AzureVMWorkloadSAPHanaSystemWorkloadItem, bool) {
 18981  	return nil, false
 18982  }
 18983  
 18984  // AsAzureVMWorkloadSQLDatabaseWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18985  func (wi WorkloadItem) AsAzureVMWorkloadSQLDatabaseWorkloadItem() (*AzureVMWorkloadSQLDatabaseWorkloadItem, bool) {
 18986  	return nil, false
 18987  }
 18988  
 18989  // AsAzureVMWorkloadSQLInstanceWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18990  func (wi WorkloadItem) AsAzureVMWorkloadSQLInstanceWorkloadItem() (*AzureVMWorkloadSQLInstanceWorkloadItem, bool) {
 18991  	return nil, false
 18992  }
 18993  
 18994  // AsWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 18995  func (wi WorkloadItem) AsWorkloadItem() (*WorkloadItem, bool) {
 18996  	return &wi, true
 18997  }
 18998  
 18999  // AsBasicWorkloadItem is the BasicWorkloadItem implementation for WorkloadItem.
 19000  func (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.
 19006  type 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.
 19024  func (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.
 19040  func (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
 19117  type 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.
 19126  type 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.
 19133  func (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.
 19160  func (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.
 19165  func (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.
 19170  func (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.
 19176  func (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.
 19184  func NewWorkloadItemResourceListIterator(page WorkloadItemResourceListPage) WorkloadItemResourceListIterator {
 19185  	return WorkloadItemResourceListIterator{page: page}
 19186  }
 19187  
 19188  // IsEmpty returns true if the ListResult contains no values.
 19189  func (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.
 19194  func (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.
 19200  func (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.
 19211  type 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.
 19218  func (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.
 19245  func (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.
 19250  func (page WorkloadItemResourceListPage) NotDone() bool {
 19251  	return !page.wirl.IsEmpty()
 19252  }
 19253  
 19254  // Response returns the raw server response from the last page request.
 19255  func (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.
 19260  func (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.
 19268  func 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.
 19276  type 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.
 19295  type 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  
 19308  func 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  }
 19366  func 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.
 19386  func (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.
 19408  func (wpi WorkloadProtectableItem) AsAzureFileShareProtectableItem() (*AzureFileShareProtectableItem, bool) {
 19409  	return nil, false
 19410  }
 19411  
 19412  // AsAzureIaaSClassicComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19413  func (wpi WorkloadProtectableItem) AsAzureIaaSClassicComputeVMProtectableItem() (*AzureIaaSClassicComputeVMProtectableItem, bool) {
 19414  	return nil, false
 19415  }
 19416  
 19417  // AsAzureIaaSComputeVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19418  func (wpi WorkloadProtectableItem) AsAzureIaaSComputeVMProtectableItem() (*AzureIaaSComputeVMProtectableItem, bool) {
 19419  	return nil, false
 19420  }
 19421  
 19422  // AsAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19423  func (wpi WorkloadProtectableItem) AsAzureVMWorkloadProtectableItem() (*AzureVMWorkloadProtectableItem, bool) {
 19424  	return nil, false
 19425  }
 19426  
 19427  // AsBasicAzureVMWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19428  func (wpi WorkloadProtectableItem) AsBasicAzureVMWorkloadProtectableItem() (BasicAzureVMWorkloadProtectableItem, bool) {
 19429  	return nil, false
 19430  }
 19431  
 19432  // AsAzureVMWorkloadSAPAseSystemProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19433  func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSAPAseSystemProtectableItem() (*AzureVMWorkloadSAPAseSystemProtectableItem, bool) {
 19434  	return nil, false
 19435  }
 19436  
 19437  // AsAzureVMWorkloadSAPHanaDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19438  func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSAPHanaDatabaseProtectableItem() (*AzureVMWorkloadSAPHanaDatabaseProtectableItem, bool) {
 19439  	return nil, false
 19440  }
 19441  
 19442  // AsAzureVMWorkloadSAPHanaSystemProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19443  func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSAPHanaSystemProtectableItem() (*AzureVMWorkloadSAPHanaSystemProtectableItem, bool) {
 19444  	return nil, false
 19445  }
 19446  
 19447  // AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19448  func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSQLAvailabilityGroupProtectableItem() (*AzureVMWorkloadSQLAvailabilityGroupProtectableItem, bool) {
 19449  	return nil, false
 19450  }
 19451  
 19452  // AsAzureVMWorkloadSQLDatabaseProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19453  func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSQLDatabaseProtectableItem() (*AzureVMWorkloadSQLDatabaseProtectableItem, bool) {
 19454  	return nil, false
 19455  }
 19456  
 19457  // AsAzureVMWorkloadSQLInstanceProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19458  func (wpi WorkloadProtectableItem) AsAzureVMWorkloadSQLInstanceProtectableItem() (*AzureVMWorkloadSQLInstanceProtectableItem, bool) {
 19459  	return nil, false
 19460  }
 19461  
 19462  // AsIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19463  func (wpi WorkloadProtectableItem) AsIaaSVMProtectableItem() (*IaaSVMProtectableItem, bool) {
 19464  	return nil, false
 19465  }
 19466  
 19467  // AsBasicIaaSVMProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19468  func (wpi WorkloadProtectableItem) AsBasicIaaSVMProtectableItem() (BasicIaaSVMProtectableItem, bool) {
 19469  	return nil, false
 19470  }
 19471  
 19472  // AsWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19473  func (wpi WorkloadProtectableItem) AsWorkloadProtectableItem() (*WorkloadProtectableItem, bool) {
 19474  	return &wpi, true
 19475  }
 19476  
 19477  // AsBasicWorkloadProtectableItem is the BasicWorkloadProtectableItem implementation for WorkloadProtectableItem.
 19478  func (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.
 19484  type 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.
 19502  func (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.
 19518  func (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
 19595  type 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.
 19605  type 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.
 19612  func (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.
 19639  func (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.
 19644  func (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.
 19649  func (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.
 19655  func (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.
 19663  func NewWorkloadProtectableItemResourceListIterator(page WorkloadProtectableItemResourceListPage) WorkloadProtectableItemResourceListIterator {
 19664  	return WorkloadProtectableItemResourceListIterator{page: page}
 19665  }
 19666  
 19667  // IsEmpty returns true if the ListResult contains no values.
 19668  func (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.
 19673  func (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.
 19679  func (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.
 19690  type 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.
 19697  func (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.
 19724  func (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.
 19729  func (page WorkloadProtectableItemResourceListPage) NotDone() bool {
 19730  	return !page.wpirl.IsEmpty()
 19731  }
 19732  
 19733  // Response returns the raw server response from the last page request.
 19734  func (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.
 19739  func (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.
 19747  func 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.
 19755  type 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  

View as plain text