// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
import azureSwiftRuntime
internal struct VMwareDetailsData : VMwareDetailsProtocol, FabricSpecificDetailsProtocol {
    public var processServers: [ProcessServerProtocol?]?
    public var masterTargetServers: [MasterTargetServerProtocol?]?
    public var runAsAccounts: [RunAsAccountProtocol?]?
    public var replicationPairCount: String?
    public var processServerCount: String?
    public var agentCount: String?
    public var protectedServers: String?
    public var systemLoad: String?
    public var systemLoadStatus: String?
    public var cpuLoad: String?
    public var cpuLoadStatus: String?
    public var totalMemoryInBytes: Int64?
    public var availableMemoryInBytes: Int64?
    public var memoryUsageStatus: String?
    public var totalSpaceInBytes: Int64?
    public var availableSpaceInBytes: Int64?
    public var spaceUsageStatus: String?
    public var webLoad: String?
    public var webLoadStatus: String?
    public var databaseServerLoad: String?
    public var databaseServerLoadStatus: String?
    public var csServiceStatus: String?
    public var ipAddress: String?
    public var agentVersion: String?
    public var hostName: String?
    public var lastHeartbeat: Date?
    public var versionStatus: String?
    public var sslCertExpiryDate: Date?
    public var sslCertExpiryRemainingDays: Int32?
    public var psTemplateVersion: String?
    public var agentExpiryDate: Date?
    public var agentVersionDetails: VersionDetailsProtocol?

        enum CodingKeys: String, CodingKey {case processServers = "processServers"
        case masterTargetServers = "masterTargetServers"
        case runAsAccounts = "runAsAccounts"
        case replicationPairCount = "replicationPairCount"
        case processServerCount = "processServerCount"
        case agentCount = "agentCount"
        case protectedServers = "protectedServers"
        case systemLoad = "systemLoad"
        case systemLoadStatus = "systemLoadStatus"
        case cpuLoad = "cpuLoad"
        case cpuLoadStatus = "cpuLoadStatus"
        case totalMemoryInBytes = "totalMemoryInBytes"
        case availableMemoryInBytes = "availableMemoryInBytes"
        case memoryUsageStatus = "memoryUsageStatus"
        case totalSpaceInBytes = "totalSpaceInBytes"
        case availableSpaceInBytes = "availableSpaceInBytes"
        case spaceUsageStatus = "spaceUsageStatus"
        case webLoad = "webLoad"
        case webLoadStatus = "webLoadStatus"
        case databaseServerLoad = "databaseServerLoad"
        case databaseServerLoadStatus = "databaseServerLoadStatus"
        case csServiceStatus = "csServiceStatus"
        case ipAddress = "ipAddress"
        case agentVersion = "agentVersion"
        case hostName = "hostName"
        case lastHeartbeat = "lastHeartbeat"
        case versionStatus = "versionStatus"
        case sslCertExpiryDate = "sslCertExpiryDate"
        case sslCertExpiryRemainingDays = "sslCertExpiryRemainingDays"
        case psTemplateVersion = "psTemplateVersion"
        case agentExpiryDate = "agentExpiryDate"
        case agentVersionDetails = "agentVersionDetails"
        }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
      if container.contains(.processServers) {
        self.processServers = try container.decode([ProcessServerData?]?.self, forKey: .processServers)
    }
    if container.contains(.masterTargetServers) {
        self.masterTargetServers = try container.decode([MasterTargetServerData?]?.self, forKey: .masterTargetServers)
    }
    if container.contains(.runAsAccounts) {
        self.runAsAccounts = try container.decode([RunAsAccountData?]?.self, forKey: .runAsAccounts)
    }
    if container.contains(.replicationPairCount) {
        self.replicationPairCount = try container.decode(String?.self, forKey: .replicationPairCount)
    }
    if container.contains(.processServerCount) {
        self.processServerCount = try container.decode(String?.self, forKey: .processServerCount)
    }
    if container.contains(.agentCount) {
        self.agentCount = try container.decode(String?.self, forKey: .agentCount)
    }
    if container.contains(.protectedServers) {
        self.protectedServers = try container.decode(String?.self, forKey: .protectedServers)
    }
    if container.contains(.systemLoad) {
        self.systemLoad = try container.decode(String?.self, forKey: .systemLoad)
    }
    if container.contains(.systemLoadStatus) {
        self.systemLoadStatus = try container.decode(String?.self, forKey: .systemLoadStatus)
    }
    if container.contains(.cpuLoad) {
        self.cpuLoad = try container.decode(String?.self, forKey: .cpuLoad)
    }
    if container.contains(.cpuLoadStatus) {
        self.cpuLoadStatus = try container.decode(String?.self, forKey: .cpuLoadStatus)
    }
    if container.contains(.totalMemoryInBytes) {
        self.totalMemoryInBytes = try container.decode(Int64?.self, forKey: .totalMemoryInBytes)
    }
    if container.contains(.availableMemoryInBytes) {
        self.availableMemoryInBytes = try container.decode(Int64?.self, forKey: .availableMemoryInBytes)
    }
    if container.contains(.memoryUsageStatus) {
        self.memoryUsageStatus = try container.decode(String?.self, forKey: .memoryUsageStatus)
    }
    if container.contains(.totalSpaceInBytes) {
        self.totalSpaceInBytes = try container.decode(Int64?.self, forKey: .totalSpaceInBytes)
    }
    if container.contains(.availableSpaceInBytes) {
        self.availableSpaceInBytes = try container.decode(Int64?.self, forKey: .availableSpaceInBytes)
    }
    if container.contains(.spaceUsageStatus) {
        self.spaceUsageStatus = try container.decode(String?.self, forKey: .spaceUsageStatus)
    }
    if container.contains(.webLoad) {
        self.webLoad = try container.decode(String?.self, forKey: .webLoad)
    }
    if container.contains(.webLoadStatus) {
        self.webLoadStatus = try container.decode(String?.self, forKey: .webLoadStatus)
    }
    if container.contains(.databaseServerLoad) {
        self.databaseServerLoad = try container.decode(String?.self, forKey: .databaseServerLoad)
    }
    if container.contains(.databaseServerLoadStatus) {
        self.databaseServerLoadStatus = try container.decode(String?.self, forKey: .databaseServerLoadStatus)
    }
    if container.contains(.csServiceStatus) {
        self.csServiceStatus = try container.decode(String?.self, forKey: .csServiceStatus)
    }
    if container.contains(.ipAddress) {
        self.ipAddress = try container.decode(String?.self, forKey: .ipAddress)
    }
    if container.contains(.agentVersion) {
        self.agentVersion = try container.decode(String?.self, forKey: .agentVersion)
    }
    if container.contains(.hostName) {
        self.hostName = try container.decode(String?.self, forKey: .hostName)
    }
    if container.contains(.lastHeartbeat) {
        self.lastHeartbeat = DateConverter.fromString(dateStr: (try container.decode(String?.self, forKey: .lastHeartbeat)), format: .dateTime)
    }
    if container.contains(.versionStatus) {
        self.versionStatus = try container.decode(String?.self, forKey: .versionStatus)
    }
    if container.contains(.sslCertExpiryDate) {
        self.sslCertExpiryDate = DateConverter.fromString(dateStr: (try container.decode(String?.self, forKey: .sslCertExpiryDate)), format: .dateTime)
    }
    if container.contains(.sslCertExpiryRemainingDays) {
        self.sslCertExpiryRemainingDays = try container.decode(Int32?.self, forKey: .sslCertExpiryRemainingDays)
    }
    if container.contains(.psTemplateVersion) {
        self.psTemplateVersion = try container.decode(String?.self, forKey: .psTemplateVersion)
    }
    if container.contains(.agentExpiryDate) {
        self.agentExpiryDate = DateConverter.fromString(dateStr: (try container.decode(String?.self, forKey: .agentExpiryDate)), format: .dateTime)
    }
    if container.contains(.agentVersionDetails) {
        self.agentVersionDetails = try container.decode(VersionDetailsData?.self, forKey: .agentVersionDetails)
    }
    if var pageDecoder = decoder as? PageDecoder  {
      if pageDecoder.isPagedData,
        let nextLinkName = pageDecoder.nextLinkName {
          pageDecoder.nextLink = try UnknownCodingKey.decodeStringForKey(decoder: decoder, keyForDecode: nextLinkName)
      }
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.processServers != nil {try container.encode(self.processServers as! [ProcessServerData?]?, forKey: .processServers)}
    if self.masterTargetServers != nil {try container.encode(self.masterTargetServers as! [MasterTargetServerData?]?, forKey: .masterTargetServers)}
    if self.runAsAccounts != nil {try container.encode(self.runAsAccounts as! [RunAsAccountData?]?, forKey: .runAsAccounts)}
    if self.replicationPairCount != nil {try container.encode(self.replicationPairCount, forKey: .replicationPairCount)}
    if self.processServerCount != nil {try container.encode(self.processServerCount, forKey: .processServerCount)}
    if self.agentCount != nil {try container.encode(self.agentCount, forKey: .agentCount)}
    if self.protectedServers != nil {try container.encode(self.protectedServers, forKey: .protectedServers)}
    if self.systemLoad != nil {try container.encode(self.systemLoad, forKey: .systemLoad)}
    if self.systemLoadStatus != nil {try container.encode(self.systemLoadStatus, forKey: .systemLoadStatus)}
    if self.cpuLoad != nil {try container.encode(self.cpuLoad, forKey: .cpuLoad)}
    if self.cpuLoadStatus != nil {try container.encode(self.cpuLoadStatus, forKey: .cpuLoadStatus)}
    if self.totalMemoryInBytes != nil {try container.encode(self.totalMemoryInBytes, forKey: .totalMemoryInBytes)}
    if self.availableMemoryInBytes != nil {try container.encode(self.availableMemoryInBytes, forKey: .availableMemoryInBytes)}
    if self.memoryUsageStatus != nil {try container.encode(self.memoryUsageStatus, forKey: .memoryUsageStatus)}
    if self.totalSpaceInBytes != nil {try container.encode(self.totalSpaceInBytes, forKey: .totalSpaceInBytes)}
    if self.availableSpaceInBytes != nil {try container.encode(self.availableSpaceInBytes, forKey: .availableSpaceInBytes)}
    if self.spaceUsageStatus != nil {try container.encode(self.spaceUsageStatus, forKey: .spaceUsageStatus)}
    if self.webLoad != nil {try container.encode(self.webLoad, forKey: .webLoad)}
    if self.webLoadStatus != nil {try container.encode(self.webLoadStatus, forKey: .webLoadStatus)}
    if self.databaseServerLoad != nil {try container.encode(self.databaseServerLoad, forKey: .databaseServerLoad)}
    if self.databaseServerLoadStatus != nil {try container.encode(self.databaseServerLoadStatus, forKey: .databaseServerLoadStatus)}
    if self.csServiceStatus != nil {try container.encode(self.csServiceStatus, forKey: .csServiceStatus)}
    if self.ipAddress != nil {try container.encode(self.ipAddress, forKey: .ipAddress)}
    if self.agentVersion != nil {try container.encode(self.agentVersion, forKey: .agentVersion)}
    if self.hostName != nil {try container.encode(self.hostName, forKey: .hostName)}
    if self.lastHeartbeat != nil {
        try container.encode(DateConverter.toString(date: self.lastHeartbeat!, format: .dateTime), forKey: .lastHeartbeat)
    }
    if self.versionStatus != nil {try container.encode(self.versionStatus, forKey: .versionStatus)}
    if self.sslCertExpiryDate != nil {
        try container.encode(DateConverter.toString(date: self.sslCertExpiryDate!, format: .dateTime), forKey: .sslCertExpiryDate)
    }
    if self.sslCertExpiryRemainingDays != nil {try container.encode(self.sslCertExpiryRemainingDays, forKey: .sslCertExpiryRemainingDays)}
    if self.psTemplateVersion != nil {try container.encode(self.psTemplateVersion, forKey: .psTemplateVersion)}
    if self.agentExpiryDate != nil {
        try container.encode(DateConverter.toString(date: self.agentExpiryDate!, format: .dateTime), forKey: .agentExpiryDate)
    }
    if self.agentVersionDetails != nil {try container.encode(self.agentVersionDetails as! VersionDetailsData?, forKey: .agentVersionDetails)}
  }
}

extension DataFactory {
  public static func createVMwareDetailsProtocol() -> VMwareDetailsProtocol {
    return VMwareDetailsData()
  }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
import azureSwiftRuntime
internal struct VMwareV2FabricCreationInputData : VMwareV2FabricCreationInputProtocol, FabricSpecificCreationInputProtocol {
    public var keyVaultUrl: String?
    public var keyVaultResourceArmId: String?

        enum CodingKeys: String, CodingKey {case keyVaultUrl = "keyVaultUrl"
        case keyVaultResourceArmId = "keyVaultResourceArmId"
        }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
      if container.contains(.keyVaultUrl) {
        self.keyVaultUrl = try container.decode(String?.self, forKey: .keyVaultUrl)
    }
    if container.contains(.keyVaultResourceArmId) {
        self.keyVaultResourceArmId = try container.decode(String?.self, forKey: .keyVaultResourceArmId)
    }
    if var pageDecoder = decoder as? PageDecoder  {
      if pageDecoder.isPagedData,
        let nextLinkName = pageDecoder.nextLinkName {
          pageDecoder.nextLink = try UnknownCodingKey.decodeStringForKey(decoder: decoder, keyForDecode: nextLinkName)
      }
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.keyVaultUrl != nil {try container.encode(self.keyVaultUrl, forKey: .keyVaultUrl)}
    if self.keyVaultResourceArmId != nil {try container.encode(self.keyVaultResourceArmId, forKey: .keyVaultResourceArmId)}
  }
}

extension DataFactory {
  public static func createVMwareV2FabricCreationInputProtocol() -> VMwareV2FabricCreationInputProtocol {
    return VMwareV2FabricCreationInputData()
  }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
import azureSwiftRuntime
internal struct VMwareV2FabricSpecificDetailsData : VMwareV2FabricSpecificDetailsProtocol, FabricSpecificDetailsProtocol {
    public var srsServiceEndpoint: String?
    public var rcmServiceEndpoint: String?
    public var keyVaultUrl: String?
    public var keyVaultResourceArmId: String?

        enum CodingKeys: String, CodingKey {case srsServiceEndpoint = "srsServiceEndpoint"
        case rcmServiceEndpoint = "rcmServiceEndpoint"
        case keyVaultUrl = "keyVaultUrl"
        case keyVaultResourceArmId = "keyVaultResourceArmId"
        }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
      if container.contains(.srsServiceEndpoint) {
        self.srsServiceEndpoint = try container.decode(String?.self, forKey: .srsServiceEndpoint)
    }
    if container.contains(.rcmServiceEndpoint) {
        self.rcmServiceEndpoint = try container.decode(String?.self, forKey: .rcmServiceEndpoint)
    }
    if container.contains(.keyVaultUrl) {
        self.keyVaultUrl = try container.decode(String?.self, forKey: .keyVaultUrl)
    }
    if container.contains(.keyVaultResourceArmId) {
        self.keyVaultResourceArmId = try container.decode(String?.self, forKey: .keyVaultResourceArmId)
    }
    if var pageDecoder = decoder as? PageDecoder  {
      if pageDecoder.isPagedData,
        let nextLinkName = pageDecoder.nextLinkName {
          pageDecoder.nextLink = try UnknownCodingKey.decodeStringForKey(decoder: decoder, keyForDecode: nextLinkName)
      }
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.srsServiceEndpoint != nil {try container.encode(self.srsServiceEndpoint, forKey: .srsServiceEndpoint)}
    if self.rcmServiceEndpoint != nil {try container.encode(self.rcmServiceEndpoint, forKey: .rcmServiceEndpoint)}
    if self.keyVaultUrl != nil {try container.encode(self.keyVaultUrl, forKey: .keyVaultUrl)}
    if self.keyVaultResourceArmId != nil {try container.encode(self.keyVaultResourceArmId, forKey: .keyVaultResourceArmId)}
  }
}

extension DataFactory {
  public static func createVMwareV2FabricSpecificDetailsProtocol() -> VMwareV2FabricSpecificDetailsProtocol {
    return VMwareV2FabricSpecificDetailsData()
  }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
import azureSwiftRuntime
internal struct VMwareVirtualMachineDetailsData : VMwareVirtualMachineDetailsProtocol, ConfigurationSettingsProtocol {
    public var agentGeneratedId: String?
    public var agentInstalled: String?
    public var osType: String?
    public var agentVersion: String?
    public var ipAddress: String?
    public var poweredOn: String?
    public var vCenterInfrastructureId: String?
    public var discoveryType: String?
    public var diskDetails: [InMageDiskDetailsProtocol?]?
    public var validationErrors: [HealthErrorProtocol?]?

        enum CodingKeys: String, CodingKey {case agentGeneratedId = "agentGeneratedId"
        case agentInstalled = "agentInstalled"
        case osType = "osType"
        case agentVersion = "agentVersion"
        case ipAddress = "ipAddress"
        case poweredOn = "poweredOn"
        case vCenterInfrastructureId = "vCenterInfrastructureId"
        case discoveryType = "discoveryType"
        case diskDetails = "diskDetails"
        case validationErrors = "validationErrors"
        }

  public init()  {
  }

  public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
      if container.contains(.agentGeneratedId) {
        self.agentGeneratedId = try container.decode(String?.self, forKey: .agentGeneratedId)
    }
    if container.contains(.agentInstalled) {
        self.agentInstalled = try container.decode(String?.self, forKey: .agentInstalled)
    }
    if container.contains(.osType) {
        self.osType = try container.decode(String?.self, forKey: .osType)
    }
    if container.contains(.agentVersion) {
        self.agentVersion = try container.decode(String?.self, forKey: .agentVersion)
    }
    if container.contains(.ipAddress) {
        self.ipAddress = try container.decode(String?.self, forKey: .ipAddress)
    }
    if container.contains(.poweredOn) {
        self.poweredOn = try container.decode(String?.self, forKey: .poweredOn)
    }
    if container.contains(.vCenterInfrastructureId) {
        self.vCenterInfrastructureId = try container.decode(String?.self, forKey: .vCenterInfrastructureId)
    }
    if container.contains(.discoveryType) {
        self.discoveryType = try container.decode(String?.self, forKey: .discoveryType)
    }
    if container.contains(.diskDetails) {
        self.diskDetails = try container.decode([InMageDiskDetailsData?]?.self, forKey: .diskDetails)
    }
    if container.contains(.validationErrors) {
        self.validationErrors = try container.decode([HealthErrorData?]?.self, forKey: .validationErrors)
    }
    if var pageDecoder = decoder as? PageDecoder  {
      if pageDecoder.isPagedData,
        let nextLinkName = pageDecoder.nextLinkName {
          pageDecoder.nextLink = try UnknownCodingKey.decodeStringForKey(decoder: decoder, keyForDecode: nextLinkName)
      }
    }
  }

  public func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)
    if self.agentGeneratedId != nil {try container.encode(self.agentGeneratedId, forKey: .agentGeneratedId)}
    if self.agentInstalled != nil {try container.encode(self.agentInstalled, forKey: .agentInstalled)}
    if self.osType != nil {try container.encode(self.osType, forKey: .osType)}
    if self.agentVersion != nil {try container.encode(self.agentVersion, forKey: .agentVersion)}
    if self.ipAddress != nil {try container.encode(self.ipAddress, forKey: .ipAddress)}
    if self.poweredOn != nil {try container.encode(self.poweredOn, forKey: .poweredOn)}
    if self.vCenterInfrastructureId != nil {try container.encode(self.vCenterInfrastructureId, forKey: .vCenterInfrastructureId)}
    if self.discoveryType != nil {try container.encode(self.discoveryType, forKey: .discoveryType)}
    if self.diskDetails != nil {try container.encode(self.diskDetails as! [InMageDiskDetailsData?]?, forKey: .diskDetails)}
    if self.validationErrors != nil {try container.encode(self.validationErrors as! [HealthErrorData?]?, forKey: .validationErrors)}
  }
}

extension DataFactory {
  public static func createVMwareVirtualMachineDetailsProtocol() -> VMwareVirtualMachineDetailsProtocol {
    return VMwareVirtualMachineDetailsData()
  }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AApplyRecoveryPointInputProtocol is applyRecoveryPoint input specific to A2A provider.
public protocol A2AApplyRecoveryPointInputProtocol : ApplyRecoveryPointProviderSpecificInputProtocol {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AContainerCreationInputProtocol is a2A cloud creation input.
public protocol A2AContainerCreationInputProtocol : ReplicationProviderSpecificContainerCreationInputProtocol {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AEnableProtectionInputProtocol is a2A enable protection input.
public protocol A2AEnableProtectionInputProtocol : EnableProtectionProviderSpecificInputProtocol {
     var fabricObjectId: String? { get set }
     var recoveryContainerId: String? { get set }
     var recoveryResourceGroupId: String? { get set }
     var recoveryCloudServiceId: String? { get set }
     var recoveryAvailabilitySetId: String? { get set }
     var vmDisks: [A2AVmDiskInputDetailsProtocol?]? { get set }
     var vmManagedDisks: [A2AVmManagedDiskInputDetailsProtocol?]? { get set }
     var multiVmGroupName: String? { get set }
     var recoveryBootDiagStorageAccountId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AEventDetailsProtocol is model class for event details of a A2A event.
public protocol A2AEventDetailsProtocol : EventProviderSpecificDetailsProtocol {
     var protectedItemName: String? { get set }
     var fabricObjectId: String? { get set }
     var fabricName: String? { get set }
     var fabricLocation: String? { get set }
     var remoteFabricName: String? { get set }
     var remoteFabricLocation: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AFailoverProviderInputProtocol is a2A provider specific input for failover.
public protocol A2AFailoverProviderInputProtocol : ProviderSpecificFailoverInputProtocol {
     var recoveryPointId: String? { get set }
     var cloudServiceCreationOption: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2APolicyCreationInputProtocol is a2A Policy creation input.
public protocol A2APolicyCreationInputProtocol : PolicyProviderSpecificInputProtocol {
     var recoveryPointHistory: Int32? { get set }
     var crashConsistentFrequencyInMinutes: Int32? { get set }
     var appConsistentFrequencyInMinutes: Int32? { get set }
     var multiVmSyncStatus: SetMultiVmSyncStatusEnum { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2APolicyDetailsProtocol is a2A specific policy details.
public protocol A2APolicyDetailsProtocol : PolicyProviderSpecificDetailsProtocol {
     var recoveryPointThresholdInMinutes: Int32? { get set }
     var recoveryPointHistory: Int32? { get set }
     var appConsistentFrequencyInMinutes: Int32? { get set }
     var multiVmSyncStatus: String? { get set }
     var crashConsistentFrequencyInMinutes: Int32? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AProtectedDiskDetailsProtocol is a2A protected disk details.
public protocol A2AProtectedDiskDetailsProtocol : Codable {
     var diskUri: String? { get set }
     var recoveryAzureStorageAccountId: String? { get set }
     var primaryDiskAzureStorageAccountId: String? { get set }
     var recoveryDiskUri: String? { get set }
     var diskName: String? { get set }
     var diskCapacityInBytes: Int64? { get set }
     var primaryStagingAzureStorageAccountId: String? { get set }
     var diskType: String? { get set }
     var resyncRequired: Bool? { get set }
     var monitoringPercentageCompletion: Int32? { get set }
     var monitoringJobType: String? { get set }
     var dataPendingInStagingStorageAccountInMB: Double? { get set }
     var dataPendingAtSourceAgentInMB: Double? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AProtectedManagedDiskDetailsProtocol is a2A protected managed disk details.
public protocol A2AProtectedManagedDiskDetailsProtocol : Codable {
     var diskId: String? { get set }
     var recoveryResourceGroupId: String? { get set }
     var recoveryTargetDiskId: String? { get set }
     var recoveryReplicaDiskId: String? { get set }
     var recoveryReplicaDiskAccountType: String? { get set }
     var recoveryTargetDiskAccountType: String? { get set }
     var diskName: String? { get set }
     var diskCapacityInBytes: Int64? { get set }
     var primaryStagingAzureStorageAccountId: String? { get set }
     var diskType: String? { get set }
     var resyncRequired: Bool? { get set }
     var monitoringPercentageCompletion: Int32? { get set }
     var monitoringJobType: String? { get set }
     var dataPendingInStagingStorageAccountInMB: Double? { get set }
     var dataPendingAtSourceAgentInMB: Double? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2ARecoveryPointDetailsProtocol is a2A provider specific recovery point details.
public protocol A2ARecoveryPointDetailsProtocol : ProviderSpecificRecoveryPointDetailsProtocol {
     var recoveryPointSyncType: RecoveryPointSyncTypeEnum? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AReplicationDetailsProtocol is a2A provider specific settings.
public protocol A2AReplicationDetailsProtocol : ReplicationProviderSpecificSettingsProtocol {
     var fabricObjectId: String? { get set }
     var multiVmGroupId: String? { get set }
     var multiVmGroupName: String? { get set }
     var multiVmGroupCreateOption: MultiVmGroupCreateOptionEnum? { get set }
     var managementId: String? { get set }
     var protectedDisks: [A2AProtectedDiskDetailsProtocol?]? { get set }
     var protectedManagedDisks: [A2AProtectedManagedDiskDetailsProtocol?]? { get set }
     var recoveryBootDiagStorageAccountId: String? { get set }
     var primaryFabricLocation: String? { get set }
     var recoveryFabricLocation: String? { get set }
     var osType: String? { get set }
     var recoveryAzureVMSize: String? { get set }
     var recoveryAzureVMName: String? { get set }
     var recoveryAzureResourceGroupId: String? { get set }
     var recoveryCloudService: String? { get set }
     var recoveryAvailabilitySet: String? { get set }
     var selectedRecoveryAzureNetworkId: String? { get set }
     var vmNics: [VMNicDetailsProtocol?]? { get set }
     var vmSyncedConfigDetails: AzureToAzureVmSyncedConfigDetailsProtocol? { get set }
     var monitoringPercentageCompletion: Int32? { get set }
     var monitoringJobType: String? { get set }
     var lastHeartbeat: Date? { get set }
     var agentVersion: String? { get set }
     var isReplicationAgentUpdateRequired: Bool? { get set }
     var recoveryFabricObjectId: String? { get set }
     var vmProtectionState: String? { get set }
     var vmProtectionStateDescription: String? { get set }
     var lifecycleId: String? { get set }
     var testFailoverRecoveryFabricObjectId: String? { get set }
     var rpoInSeconds: Int64? { get set }
     var lastRpoCalculatedTime: Date? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AReprotectInputProtocol is azure specific reprotect input.
public protocol A2AReprotectInputProtocol : ReverseReplicationProviderSpecificInputProtocol {
     var recoveryContainerId: String? { get set }
     var vmDisks: [A2AVmDiskInputDetailsProtocol?]? { get set }
     var recoveryResourceGroupId: String? { get set }
     var recoveryCloudServiceId: String? { get set }
     var recoveryAvailabilitySetId: String? { get set }
     var policyId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2ASwitchProtectionInputProtocol is a2A specific switch protection input.
public protocol A2ASwitchProtectionInputProtocol : SwitchProtectionProviderSpecificInputProtocol {
     var recoveryContainerId: String? { get set }
     var vmDisks: [A2AVmDiskInputDetailsProtocol?]? { get set }
     var vmManagedDisks: [A2AVmManagedDiskInputDetailsProtocol?]? { get set }
     var recoveryResourceGroupId: String? { get set }
     var recoveryCloudServiceId: String? { get set }
     var recoveryAvailabilitySetId: String? { get set }
     var policyId: String? { get set }
     var recoveryBootDiagStorageAccountId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AUpdateReplicationProtectedItemInputProtocol is inMage Azure V2 input to update replication protected item.
public protocol A2AUpdateReplicationProtectedItemInputProtocol : UpdateReplicationProtectedItemProviderInputProtocol {
     var recoveryCloudServiceId: String? { get set }
     var recoveryResourceGroupId: String? { get set }
     var managedDiskUpdateDetails: [A2AVmManagedDiskUpdateDetailsProtocol?]? { get set }
     var recoveryBootDiagStorageAccountId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AVmDiskInputDetailsProtocol is azure VM disk input details.
public protocol A2AVmDiskInputDetailsProtocol : Codable {
     var diskUri: String? { get set }
     var recoveryAzureStorageAccountId: String? { get set }
     var primaryStagingAzureStorageAccountId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AVmManagedDiskInputDetailsProtocol is azure VM managed disk input details.
public protocol A2AVmManagedDiskInputDetailsProtocol : Codable {
     var diskId: String? { get set }
     var primaryStagingAzureStorageAccountId: String? { get set }
     var recoveryResourceGroupId: String? { get set }
     var recoveryReplicaDiskAccountType: String? { get set }
     var recoveryTargetDiskAccountType: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// A2AVmManagedDiskUpdateDetailsProtocol is azure VM managed disk update input details.
public protocol A2AVmManagedDiskUpdateDetailsProtocol : Codable {
     var diskId: String? { get set }
     var recoveryTargetDiskAccountType: String? { get set }
     var recoveryReplicaDiskAccountType: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AddVCenterRequestPropertiesProtocol is the properties of an add vCenter request.
public protocol AddVCenterRequestPropertiesProtocol : Codable {
     var friendlyName: String? { get set }
     var ipAddress: String? { get set }
     var processServerId: String? { get set }
     var port: String? { get set }
     var runAsAccountId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AddVCenterRequestProtocol is input required to add vCenter.
public protocol AddVCenterRequestProtocol : Codable {
     var properties: AddVCenterRequestPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AlertCollectionProtocol is collection of alerts.
public protocol AlertCollectionProtocol : Codable {
     var value: [AlertProtocol?]? { get set }
     var _nextLink: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AlertPropertiesProtocol is the proprties of an alert.
public protocol AlertPropertiesProtocol : Codable {
     var sendToOwners: String? { get set }
     var customEmailAddresses: [String]? { get set }
     var locale: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AlertProtocol is implements the Alert class.
public protocol AlertProtocol : ResourceProtocol {
     var properties: AlertPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ApplyRecoveryPointInputPropertiesProtocol is input properties to apply recovery point.
public protocol ApplyRecoveryPointInputPropertiesProtocol : Codable {
     var recoveryPointId: String? { get set }
     var providerSpecificDetails: ApplyRecoveryPointProviderSpecificInputProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ApplyRecoveryPointInputProtocol is input to apply recovery point.
public protocol ApplyRecoveryPointInputProtocol : Codable {
     var properties: ApplyRecoveryPointInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ApplyRecoveryPointProviderSpecificInputProtocol is provider specific input for apply recovery point.
public protocol ApplyRecoveryPointProviderSpecificInputProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AsrJobDetailsProtocol is this class represents job details based on specific job type.
public protocol AsrJobDetailsProtocol : JobDetailsProtocol {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ASRTaskProtocol is task of the Job.
public protocol ASRTaskProtocol : Codable {
     var taskId: String? { get set }
     var name: String? { get set }
     var startTime: Date? { get set }
     var endTime: Date? { get set }
     var allowedActions: [String]? { get set }
     var friendlyName: String? { get set }
     var state: String? { get set }
     var stateDescription: String? { get set }
     var taskType: String? { get set }
     var customDetails: TaskTypeDetailsProtocol? { get set }
     var groupTaskCustomDetails: GroupTaskDetailsProtocol? { get set }
     var errors: [JobErrorDetailsProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AutomationRunbookTaskDetailsProtocol is this class represents the task details for an automation runbook.
public protocol AutomationRunbookTaskDetailsProtocol : TaskTypeDetailsProtocol {
     var name: String? { get set }
     var cloudServiceName: String? { get set }
     var subscriptionId: String? { get set }
     var accountName: String? { get set }
     var runbookId: String? { get set }
     var runbookName: String? { get set }
     var jobId: String? { get set }
     var jobOutput: String? { get set }
     var isPrimarySideScript: Bool? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AzureFabricCreationInputProtocol is fabric provider specific settings.
public protocol AzureFabricCreationInputProtocol : FabricSpecificCreationInputProtocol {
     var location: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AzureFabricSpecificDetailsProtocol is azure Fabric Specific Details.
public protocol AzureFabricSpecificDetailsProtocol : FabricSpecificDetailsProtocol {
     var location: String? { get set }
     var containerIds: [String]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AzureToAzureCreateNetworkMappingInputProtocol is create network mappings input properties/behaviour specific to
// Azure to Azure Network mapping.
public protocol AzureToAzureCreateNetworkMappingInputProtocol : FabricSpecificCreateNetworkMappingInputProtocol {
     var primaryNetworkId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AzureToAzureNetworkMappingSettingsProtocol is a2A Network Mapping fabric specific settings.
public protocol AzureToAzureNetworkMappingSettingsProtocol : NetworkMappingFabricSpecificSettingsProtocol {
     var primaryFabricLocation: String? { get set }
     var recoveryFabricLocation: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AzureToAzureUpdateNetworkMappingInputProtocol is updates network mappings input.
public protocol AzureToAzureUpdateNetworkMappingInputProtocol : FabricSpecificUpdateNetworkMappingInputProtocol {
     var primaryNetworkId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AzureToAzureVmSyncedConfigDetailsProtocol is azure to Azure VM synced configuration details.
public protocol AzureToAzureVmSyncedConfigDetailsProtocol : Codable {
     var tags: [String:String]? { get set }
     var roleAssignments: [RoleAssignmentProtocol?]? { get set }
     var inputEndpoints: [InputEndpointProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// AzureVmDiskDetailsProtocol is disk details for E2A provider.
public protocol AzureVmDiskDetailsProtocol : Codable {
     var vhdType: String? { get set }
     var vhdId: String? { get set }
     var vhdName: String? { get set }
     var maxSizeMB: String? { get set }
     var targetDiskLocation: String? { get set }
     var targetDiskName: String? { get set }
     var lunId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ComputeSizeErrorDetailsProtocol is represents the error used to indicate why the target compute size is not
// applicable.
public protocol ComputeSizeErrorDetailsProtocol : Codable {
     var message: String? { get set }
     var severity: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ConfigurationSettingsProtocol is replication provider specific settings.
public protocol ConfigurationSettingsProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ConfigureAlertRequestPropertiesProtocol is properties of a configure alert request.
public protocol ConfigureAlertRequestPropertiesProtocol : Codable {
     var sendToOwners: String? { get set }
     var customEmailAddresses: [String]? { get set }
     var locale: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ConfigureAlertRequestProtocol is request to configure alerts for the system.
public protocol ConfigureAlertRequestProtocol : Codable {
     var properties: ConfigureAlertRequestPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ConsistencyCheckTaskDetailsProtocol is this class contains monitoring details of all the inconsistent Protected
// Entites in Vmm.
public protocol ConsistencyCheckTaskDetailsProtocol : TaskTypeDetailsProtocol {
     var vmDetails: [InconsistentVmDetailsProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateNetworkMappingInputPropertiesProtocol is common input details for network mapping operation.
public protocol CreateNetworkMappingInputPropertiesProtocol : Codable {
     var recoveryFabricName: String? { get set }
     var recoveryNetworkId: String? { get set }
     var fabricSpecificDetails: FabricSpecificCreateNetworkMappingInputProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateNetworkMappingInputProtocol is create network mappings input.
public protocol CreateNetworkMappingInputProtocol : Codable {
     var properties: CreateNetworkMappingInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreatePolicyInputPropertiesProtocol is policy creation properties.
public protocol CreatePolicyInputPropertiesProtocol : Codable {
     var providerSpecificInput: PolicyProviderSpecificInputProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreatePolicyInputProtocol is protection Policy input.
public protocol CreatePolicyInputProtocol : Codable {
     var properties: CreatePolicyInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateProtectionContainerInputPropertiesProtocol is create protection container input properties.
public protocol CreateProtectionContainerInputPropertiesProtocol : Codable {
     var providerSpecificInput: [ReplicationProviderSpecificContainerCreationInputProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateProtectionContainerInputProtocol is create protection container input.
public protocol CreateProtectionContainerInputProtocol : Codable {
     var properties: CreateProtectionContainerInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateProtectionContainerMappingInputPropertiesProtocol is configure pairing input properties.
public protocol CreateProtectionContainerMappingInputPropertiesProtocol : Codable {
     var targetProtectionContainerId: String? { get set }
     var policyId: String? { get set }
     var providerSpecificInput: ReplicationProviderSpecificContainerMappingInputProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateProtectionContainerMappingInputProtocol is configure pairing input.
public protocol CreateProtectionContainerMappingInputProtocol : Codable {
     var properties: CreateProtectionContainerMappingInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateRecoveryPlanInputPropertiesProtocol is recovery plan creation properties.
public protocol CreateRecoveryPlanInputPropertiesProtocol : Codable {
     var primaryFabricId: String { get set }
     var recoveryFabricId: String { get set }
     var failoverDeploymentModel: FailoverDeploymentModelEnum? { get set }
     var groups: [RecoveryPlanGroupProtocol] { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CreateRecoveryPlanInputProtocol is create recovery plan input class.
public protocol CreateRecoveryPlanInputProtocol : Codable {
     var properties: CreateRecoveryPlanInputPropertiesProtocol { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// CurrentScenarioDetailsProtocol is current scenario details of the protected entity.
public protocol CurrentScenarioDetailsProtocol : Codable {
     var scenarioName: String? { get set }
     var jobId: String? { get set }
     var startTime: Date? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DataStoreProtocol is the datastore details of the MT.
public protocol DataStoreProtocol : Codable {
     var symbolicName: String? { get set }
     var uuid: String? { get set }
     var capacity: String? { get set }
     var freeSpace: String? { get set }
     var type: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DisableProtectionInputPropertiesProtocol is disable protection input properties.
public protocol DisableProtectionInputPropertiesProtocol : Codable {
     var disableProtectionReason: DisableProtectionReasonEnum? { get set }
     var replicationProviderInput: DisableProtectionProviderSpecificInputProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DisableProtectionInputProtocol is disable protection input.
public protocol DisableProtectionInputProtocol : Codable {
     var properties: DisableProtectionInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DisableProtectionProviderSpecificInputProtocol is disable protection provider specific input.
public protocol DisableProtectionProviderSpecificInputProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DiscoverProtectableItemRequestPropertiesProtocol is discover protectable item properties.
public protocol DiscoverProtectableItemRequestPropertiesProtocol : Codable {
     var friendlyName: String? { get set }
     var ipAddress: String? { get set }
     var osType: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DiscoverProtectableItemRequestProtocol is request to add a physical machine as a protectable item in a container.
public protocol DiscoverProtectableItemRequestProtocol : Codable {
     var properties: DiscoverProtectableItemRequestPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DiskDetailsProtocol is onprem disk details data.
public protocol DiskDetailsProtocol : Codable {
     var maxSizeMB: Int64? { get set }
     var vhdType: String? { get set }
     var vhdId: String? { get set }
     var vhdName: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DiskVolumeDetailsProtocol is volume details.
public protocol DiskVolumeDetailsProtocol : Codable {
     var label: String? { get set }
     var name: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// DisplayProtocol is contains the localized display information for this particular operation / action. These value
// will be used by several clients for (1) custom role definitions for RBAC; (2) complex query filters for the event
// service; and (3) audit history / records for management operations.
public protocol DisplayProtocol : Codable {
     var provider: String? { get set }
     var resource: String? { get set }
     var operation: String? { get set }
     var description: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EnableProtectionInputPropertiesProtocol is enable protection input properties.
public protocol EnableProtectionInputPropertiesProtocol : Codable {
     var policyId: String? { get set }
     var protectableItemId: String? { get set }
     var providerSpecificDetails: EnableProtectionProviderSpecificInputProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EnableProtectionInputProtocol is enable protection input.
public protocol EnableProtectionInputProtocol : Codable {
     var properties: EnableProtectionInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EnableProtectionProviderSpecificInputProtocol is enable protection provider specific input.
public protocol EnableProtectionProviderSpecificInputProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EncryptionDetailsProtocol is encryption details for the fabric.
public protocol EncryptionDetailsProtocol : Codable {
     var kekState: String? { get set }
     var kekCertThumbprint: String? { get set }
     var kekCertExpiryDate: Date? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EventCollectionProtocol is collection of fabric details.
public protocol EventCollectionProtocol : Codable {
     var value: [EventProtocol?]? { get set }
     var _nextLink: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EventPropertiesProtocol is the properties of a monitoring event.
public protocol EventPropertiesProtocol : Codable {
     var eventCode: String? { get set }
     var description: String? { get set }
     var eventType: String? { get set }
     var affectedObjectFriendlyName: String? { get set }
     var severity: String? { get set }
     var timeOfOccurrence: Date? { get set }
     var fabricId: String? { get set }
     var providerSpecificDetails: EventProviderSpecificDetailsProtocol? { get set }
     var eventSpecificDetails: EventSpecificDetailsProtocol? { get set }
     var healthErrors: [HealthErrorProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EventProtocol is implements the Event class.
public protocol EventProtocol : ResourceProtocol {
     var properties: EventPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EventProviderSpecificDetailsProtocol is model class for provider specific details for an event.
public protocol EventProviderSpecificDetailsProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EventQueryParameterProtocol is implements the event query parameter.
public protocol EventQueryParameterProtocol : Codable {
     var eventCode: String? { get set }
     var severity: String? { get set }
     var eventType: String? { get set }
     var fabricName: String? { get set }
     var affectedObjectFriendlyName: String? { get set }
     var startTime: Date? { get set }
     var endTime: Date? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// EventSpecificDetailsProtocol is model class for event specific details for an event.
public protocol EventSpecificDetailsProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// ExportJobDetailsProtocol is this class represents details for export jobs workflow.
public protocol ExportJobDetailsProtocol : JobDetailsProtocol {
     var blobUri: String? { get set }
     var sasToken: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricCollectionProtocol is collection of fabric details.
public protocol FabricCollectionProtocol : Codable {
     var value: [FabricProtocol?]? { get set }
     var _nextLink: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricCreationInputPropertiesProtocol is properties of site details provided during the time of site creation
public protocol FabricCreationInputPropertiesProtocol : Codable {
     var customDetails: FabricSpecificCreationInputProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricCreationInputProtocol is site details provided during the time of site creation
public protocol FabricCreationInputProtocol : Codable {
     var properties: FabricCreationInputPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricPropertiesProtocol is fabric properties.
public protocol FabricPropertiesProtocol : Codable {
     var friendlyName: String? { get set }
     var encryptionDetails: EncryptionDetailsProtocol? { get set }
     var rolloverEncryptionDetails: EncryptionDetailsProtocol? { get set }
     var internalIdentifier: String? { get set }
     var bcdrState: String? { get set }
     var customDetails: FabricSpecificDetailsProtocol? { get set }
     var healthErrorDetails: [HealthErrorProtocol?]? { get set }
     var health: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricProtocol is fabric definition.
public protocol FabricProtocol : ResourceProtocol {
     var properties: FabricPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricReplicationGroupTaskDetailsProtocol is this class represents the fabric replication group task details.
public protocol FabricReplicationGroupTaskDetailsProtocol : TaskTypeDetailsProtocol {
     var skippedReason: String? { get set }
     var skippedReasonString: String? { get set }
     var jobTask: JobEntityProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricSpecificCreateNetworkMappingInputProtocol is input details specific to fabrics during Network Mapping.
public protocol FabricSpecificCreateNetworkMappingInputProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricSpecificCreationInputProtocol is fabric provider specific settings.
public protocol FabricSpecificCreationInputProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricSpecificDetailsProtocol is fabric specific details.
public protocol FabricSpecificDetailsProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FabricSpecificUpdateNetworkMappingInputProtocol is input details specific to fabrics during Network Mapping.
public protocol FabricSpecificUpdateNetworkMappingInputProtocol : Codable {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FailoverJobDetailsProtocol is this class represents the details for a failover job.
public protocol FailoverJobDetailsProtocol : JobDetailsProtocol {
     var protectedItemDetails: [FailoverReplicationProtectedItemDetailsProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FailoverProcessServerRequestPropertiesProtocol is the properties of the Failover Process Server request.
public protocol FailoverProcessServerRequestPropertiesProtocol : Codable {
     var containerName: String? { get set }
     var sourceProcessServerId: String? { get set }
     var targetProcessServerId: String? { get set }
     var vmsToMigrate: [String]? { get set }
     var updateType: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FailoverProcessServerRequestProtocol is request to failover a process server.
public protocol FailoverProcessServerRequestProtocol : Codable {
     var properties: FailoverProcessServerRequestPropertiesProtocol? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// FailoverReplicationProtectedItemDetailsProtocol is failover details for a replication protected item.
public protocol FailoverReplicationProtectedItemDetailsProtocol : Codable {
     var name: String? { get set }
     var friendlyName: String? { get set }
     var testVmName: String? { get set }
     var testVmFriendlyName: String? { get set }
     var networkConnectionStatus: String? { get set }
     var networkFriendlyName: String? { get set }
     var subnet: String? { get set }
     var recoveryPointId: String? { get set }
     var recoveryPointTime: Date? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// GroupTaskDetailsProtocol is this class represents the group task details when parent child relationship exists in
// the drill down.
public protocol GroupTaskDetailsProtocol : Codable {
     var childTasks: [ASRTaskProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HealthErrorProtocol is health Error
public protocol HealthErrorProtocol : Codable {
     var innerHealthErrors: [InnerHealthErrorProtocol?]? { get set }
     var errorSource: String? { get set }
     var errorType: String? { get set }
     var errorLevel: String? { get set }
     var errorCategory: String? { get set }
     var errorCode: String? { get set }
     var summaryMessage: String? { get set }
     var errorMessage: String? { get set }
     var possibleCauses: String? { get set }
     var recommendedAction: String? { get set }
     var creationTimeUtc: Date? { get set }
     var recoveryProviderErrorMessage: String? { get set }
     var entityId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HealthErrorSummaryProtocol is class to define the summary of the health error details.
public protocol HealthErrorSummaryProtocol : Codable {
     var summaryCode: String? { get set }
     var category: HealthErrorCategoryEnum? { get set }
     var severity: SeverityEnum? { get set }
     var summaryMessage: String? { get set }
     var affectedResourceType: String? { get set }
     var affectedResourceSubtype: String? { get set }
     var affectedResourceCorrelationIds: [String]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplica2012EventDetailsProtocol is model class for event details of a HyperVReplica E2E event.
public protocol HyperVReplica2012EventDetailsProtocol : EventProviderSpecificDetailsProtocol {
     var containerName: String? { get set }
     var fabricName: String? { get set }
     var remoteContainerName: String? { get set }
     var remoteFabricName: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplica2012R2EventDetailsProtocol is model class for event details of a HyperVReplica blue E2E event.
public protocol HyperVReplica2012R2EventDetailsProtocol : EventProviderSpecificDetailsProtocol {
     var containerName: String? { get set }
     var fabricName: String? { get set }
     var remoteContainerName: String? { get set }
     var remoteFabricName: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureApplyRecoveryPointInputProtocol is applyRecoveryPoint input specific to HyperVReplicaAzure
// provider.
public protocol HyperVReplicaAzureApplyRecoveryPointInputProtocol : ApplyRecoveryPointProviderSpecificInputProtocol {
     var vaultLocation: String? { get set }
     var primaryKekCertificatePfx: String? { get set }
     var secondaryKekCertificatePfx: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureEnableProtectionInputProtocol is azure specific enable protection input.
public protocol HyperVReplicaAzureEnableProtectionInputProtocol : EnableProtectionProviderSpecificInputProtocol {
     var hvHostVmId: String? { get set }
     var vmName: String? { get set }
     var osType: String? { get set }
     var vhdId: String? { get set }
     var targetStorageAccountId: String? { get set }
     var targetAzureNetworkId: String? { get set }
     var targetAzureSubnetId: String? { get set }
     var enableRdpOnTargetOption: String? { get set }
     var targetAzureVmName: String? { get set }
     var logStorageAccountId: String? { get set }
     var disksToInclude: [String]? { get set }
     var targetAzureV1ResourceGroupId: String? { get set }
     var targetAzureV2ResourceGroupId: String? { get set }
     var useManagedDisks: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureEventDetailsProtocol is model class for event details of a HyperVReplica E2A event.
public protocol HyperVReplicaAzureEventDetailsProtocol : EventProviderSpecificDetailsProtocol {
     var containerName: String? { get set }
     var fabricName: String? { get set }
     var remoteContainerName: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureFailbackProviderInputProtocol is hvrA provider specific input for failback.
public protocol HyperVReplicaAzureFailbackProviderInputProtocol : ProviderSpecificFailoverInputProtocol {
     var dataSyncOption: String? { get set }
     var recoveryVmCreationOption: String? { get set }
     var providerIdForAlternateRecovery: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureFailoverProviderInputProtocol is hvrA provider specific input for failover.
public protocol HyperVReplicaAzureFailoverProviderInputProtocol : ProviderSpecificFailoverInputProtocol {
     var vaultLocation: String? { get set }
     var primaryKekCertificatePfx: String? { get set }
     var secondaryKekCertificatePfx: String? { get set }
     var recoveryPointId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzurePolicyDetailsProtocol is hyper-V Replica Azure specific protection profile details.
public protocol HyperVReplicaAzurePolicyDetailsProtocol : PolicyProviderSpecificDetailsProtocol {
     var recoveryPointHistoryDurationInHours: Int32? { get set }
     var applicationConsistentSnapshotFrequencyInHours: Int32? { get set }
     var replicationInterval: Int32? { get set }
     var onlineReplicationStartTime: String? { get set }
     var encryption: String? { get set }
     var activeStorageAccountId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzurePolicyInputProtocol is hyper-V Replica Azure specific input for creating a protection profile.
public protocol HyperVReplicaAzurePolicyInputProtocol : PolicyProviderSpecificInputProtocol {
     var recoveryPointHistoryDuration: Int32? { get set }
     var applicationConsistentSnapshotFrequencyInHours: Int32? { get set }
     var replicationInterval: Int32? { get set }
     var onlineReplicationStartTime: String? { get set }
     var storageAccounts: [String]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureReplicationDetailsProtocol is hyper V Replica Azure provider specific settings.
public protocol HyperVReplicaAzureReplicationDetailsProtocol : ReplicationProviderSpecificSettingsProtocol {
     var azureVmDiskDetails: [AzureVmDiskDetailsProtocol?]? { get set }
     var recoveryAzureVmName: String? { get set }
     var recoveryAzureVMSize: String? { get set }
     var recoveryAzureStorageAccount: String? { get set }
     var recoveryAzureLogStorageAccountId: String? { get set }
     var lastReplicatedTime: Date? { get set }
     var rpoInSeconds: Int64? { get set }
     var lastRpoCalculatedTime: Date? { get set }
     var vmId: String? { get set }
     var vmProtectionState: String? { get set }
     var vmProtectionStateDescription: String? { get set }
     var initialReplicationDetails: InitialReplicationDetailsProtocol? { get set }
     var vmNics: [VMNicDetailsProtocol?]? { get set }
     var selectedRecoveryAzureNetworkId: String? { get set }
     var selectedSourceNicId: String? { get set }
     var encryption: String? { get set }
     var oSDetails: OSDetailsProtocol? { get set }
     var sourceVmRamSizeInMB: Int32? { get set }
     var sourceVmCpuCount: Int32? { get set }
     var enableRdpOnTargetOption: String? { get set }
     var recoveryAzureResourceGroupId: String? { get set }
     var recoveryAvailabilitySetId: String? { get set }
     var useManagedDisks: String? { get set }
     var licenseType: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureReprotectInputProtocol is azure specific reprotect input.
public protocol HyperVReplicaAzureReprotectInputProtocol : ReverseReplicationProviderSpecificInputProtocol {
     var hvHostVmId: String? { get set }
     var vmName: String? { get set }
     var osType: String? { get set }
     var vHDId: String? { get set }
     var storageAccountId: String? { get set }
     var logStorageAccountId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaAzureUpdateReplicationProtectedItemInputProtocol is hyperV replica Azure input to update replication
// protected item.
public protocol HyperVReplicaAzureUpdateReplicationProtectedItemInputProtocol : UpdateReplicationProtectedItemProviderInputProtocol {
     var recoveryAzureV1ResourceGroupId: String? { get set }
     var recoveryAzureV2ResourceGroupId: String? { get set }
     var useManagedDisks: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaBaseEventDetailsProtocol is abstract model class for event details of a HyperVReplica E2E event.
public protocol HyperVReplicaBaseEventDetailsProtocol : EventProviderSpecificDetailsProtocol {
     var containerName: String? { get set }
     var fabricName: String? { get set }
     var remoteContainerName: String? { get set }
     var remoteFabricName: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaBasePolicyDetailsProtocol is base class for HyperVReplica policy details.
public protocol HyperVReplicaBasePolicyDetailsProtocol : PolicyProviderSpecificDetailsProtocol {
     var recoveryPoints: Int32? { get set }
     var applicationConsistentSnapshotFrequencyInHours: Int32? { get set }
     var compression: String? { get set }
     var initialReplicationMethod: String? { get set }
     var onlineReplicationStartTime: String? { get set }
     var offlineReplicationImportPath: String? { get set }
     var offlineReplicationExportPath: String? { get set }
     var replicationPort: Int32? { get set }
     var allowedAuthenticationType: Int32? { get set }
     var replicaDeletionOption: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaBaseReplicationDetailsProtocol is hyper V replica provider specific settings base class.
public protocol HyperVReplicaBaseReplicationDetailsProtocol : ReplicationProviderSpecificSettingsProtocol {
     var lastReplicatedTime: Date? { get set }
     var vmNics: [VMNicDetailsProtocol?]? { get set }
     var vmId: String? { get set }
     var vmProtectionState: String? { get set }
     var vmProtectionStateDescription: String? { get set }
     var initialReplicationDetails: InitialReplicationDetailsProtocol? { get set }
     var vMDiskDetails: [DiskDetailsProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaBluePolicyDetailsProtocol is hyper-V Replica Blue specific protection profile details.
public protocol HyperVReplicaBluePolicyDetailsProtocol : PolicyProviderSpecificDetailsProtocol {
     var replicationFrequencyInSeconds: Int32? { get set }
     var recoveryPoints: Int32? { get set }
     var applicationConsistentSnapshotFrequencyInHours: Int32? { get set }
     var compression: String? { get set }
     var initialReplicationMethod: String? { get set }
     var onlineReplicationStartTime: String? { get set }
     var offlineReplicationImportPath: String? { get set }
     var offlineReplicationExportPath: String? { get set }
     var replicationPort: Int32? { get set }
     var allowedAuthenticationType: Int32? { get set }
     var replicaDeletionOption: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaBluePolicyInputProtocol is hyperV Replica Blue policy input.
public protocol HyperVReplicaBluePolicyInputProtocol : PolicyProviderSpecificInputProtocol {
     var replicationFrequencyInSeconds: Int32? { get set }
     var recoveryPoints: Int32? { get set }
     var applicationConsistentSnapshotFrequencyInHours: Int32? { get set }
     var compression: String? { get set }
     var initialReplicationMethod: String? { get set }
     var onlineReplicationStartTime: String? { get set }
     var offlineReplicationImportPath: String? { get set }
     var offlineReplicationExportPath: String? { get set }
     var replicationPort: Int32? { get set }
     var allowedAuthenticationType: Int32? { get set }
     var replicaDeletion: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaBlueReplicationDetailsProtocol is hyperV replica 2012 R2 (Blue) replication details.
public protocol HyperVReplicaBlueReplicationDetailsProtocol : ReplicationProviderSpecificSettingsProtocol {
     var lastReplicatedTime: Date? { get set }
     var vmNics: [VMNicDetailsProtocol?]? { get set }
     var vmId: String? { get set }
     var vmProtectionState: String? { get set }
     var vmProtectionStateDescription: String? { get set }
     var initialReplicationDetails: InitialReplicationDetailsProtocol? { get set }
     var vMDiskDetails: [DiskDetailsProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaPolicyDetailsProtocol is hyper-V Replica Blue specific protection profile details.
public protocol HyperVReplicaPolicyDetailsProtocol : PolicyProviderSpecificDetailsProtocol {
     var recoveryPoints: Int32? { get set }
     var applicationConsistentSnapshotFrequencyInHours: Int32? { get set }
     var compression: String? { get set }
     var initialReplicationMethod: String? { get set }
     var onlineReplicationStartTime: String? { get set }
     var offlineReplicationImportPath: String? { get set }
     var offlineReplicationExportPath: String? { get set }
     var replicationPort: Int32? { get set }
     var allowedAuthenticationType: Int32? { get set }
     var replicaDeletionOption: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaPolicyInputProtocol is hyper-V Replica specific policy Input.
public protocol HyperVReplicaPolicyInputProtocol : PolicyProviderSpecificInputProtocol {
     var recoveryPoints: Int32? { get set }
     var applicationConsistentSnapshotFrequencyInHours: Int32? { get set }
     var compression: String? { get set }
     var initialReplicationMethod: String? { get set }
     var onlineReplicationStartTime: String? { get set }
     var offlineReplicationImportPath: String? { get set }
     var offlineReplicationExportPath: String? { get set }
     var replicationPort: Int32? { get set }
     var allowedAuthenticationType: Int32? { get set }
     var replicaDeletion: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVReplicaReplicationDetailsProtocol is hyperV replica 2012 replication details.
public protocol HyperVReplicaReplicationDetailsProtocol : ReplicationProviderSpecificSettingsProtocol {
     var lastReplicatedTime: Date? { get set }
     var vmNics: [VMNicDetailsProtocol?]? { get set }
     var vmId: String? { get set }
     var vmProtectionState: String? { get set }
     var vmProtectionStateDescription: String? { get set }
     var initialReplicationDetails: InitialReplicationDetailsProtocol? { get set }
     var vMDiskDetails: [DiskDetailsProtocol?]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVSiteDetailsProtocol is hyperVSite fabric specific details.
public protocol HyperVSiteDetailsProtocol : FabricSpecificDetailsProtocol {
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// HyperVVirtualMachineDetailsProtocol is single Host fabric provider specific VM settings.
public protocol HyperVVirtualMachineDetailsProtocol : ConfigurationSettingsProtocol {
     var sourceItemId: String? { get set }
     var generation: String? { get set }
     var osDetails: OSDetailsProtocol? { get set }
     var diskDetails: [DiskDetailsProtocol?]? { get set }
     var hasPhysicalDisk: Bool? { get set }
     var hasFibreChannelAdapter: Bool? { get set }
     var hasSharedVhd: Bool? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// IdentityInformationProtocol is identity details.
public protocol IdentityInformationProtocol : Codable {
     var identityProviderType: IdentityProviderTypeEnum? { get set }
     var tenantId: String? { get set }
     var applicationId: String? { get set }
     var objectId: String? { get set }
     var audience: String? { get set }
     var aadAuthority: String? { get set }
     var certificateThumbprint: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InconsistentVmDetailsProtocol is this class stores the monitoring details for consistency check of inconsistent
// Protected Entity.
public protocol InconsistentVmDetailsProtocol : Codable {
     var vmName: String? { get set }
     var cloudName: String? { get set }
     var details: [String]? { get set }
     var errorIds: [String]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InitialReplicationDetailsProtocol is initial replication details.
public protocol InitialReplicationDetailsProtocol : Codable {
     var initialReplicationType: String? { get set }
     var initialReplicationProgressPercentage: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InlineWorkflowTaskDetailsProtocol is this class represents the inline workflow task details.
public protocol InlineWorkflowTaskDetailsProtocol : GroupTaskDetailsProtocol {
     var workflowIds: [String]? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAgentDetailsProtocol is the details of the InMage agent.
public protocol InMageAgentDetailsProtocol : Codable {
     var agentVersion: String? { get set }
     var agentUpdateStatus: String? { get set }
     var postUpdateRebootStatus: String? { get set }
     var agentExpiryDate: Date? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAgentVersionDetailsProtocol is inMage agent version details.
public protocol InMageAgentVersionDetailsProtocol : Codable {
     var postUpdateRebootStatus: String? { get set }
     var version: String? { get set }
     var expiryDate: Date? { get set }
     var status: AgentVersionStatusEnum? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2ApplyRecoveryPointInputProtocol is applyRecoveryPoint input specific to InMageAzureV2 provider.
public protocol InMageAzureV2ApplyRecoveryPointInputProtocol : ApplyRecoveryPointProviderSpecificInputProtocol {
     var vaultLocation: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2EnableProtectionInputProtocol is vMware Azure specific enable protection input.
public protocol InMageAzureV2EnableProtectionInputProtocol : EnableProtectionProviderSpecificInputProtocol {
     var masterTargetId: String? { get set }
     var processServerId: String? { get set }
     var storageAccountId: String { get set }
     var runAsAccountId: String? { get set }
     var multiVmGroupId: String? { get set }
     var multiVmGroupName: String? { get set }
     var disksToInclude: [String]? { get set }
     var targetAzureNetworkId: String? { get set }
     var targetAzureSubnetId: String? { get set }
     var enableRdpOnTargetOption: String? { get set }
     var targetAzureVmName: String? { get set }
     var logStorageAccountId: String? { get set }
     var targetAzureV1ResourceGroupId: String? { get set }
     var targetAzureV2ResourceGroupId: String? { get set }
     var useManagedDisks: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2EventDetailsProtocol is model class for event details of a VMwareAzureV2 event.
public protocol InMageAzureV2EventDetailsProtocol : EventProviderSpecificDetailsProtocol {
     var eventType: String? { get set }
     var category: String? { get set }
     var component: String? { get set }
     var correctiveAction: String? { get set }
     var details: String? { get set }
     var summary: String? { get set }
     var siteName: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2FailoverProviderInputProtocol is inMageAzureV2 provider specific input for failover.
public protocol InMageAzureV2FailoverProviderInputProtocol : ProviderSpecificFailoverInputProtocol {
     var vaultLocation: String? { get set }
     var recoveryPointId: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2PolicyDetailsProtocol is inMage Azure v2 specific protection profile details.
public protocol InMageAzureV2PolicyDetailsProtocol : PolicyProviderSpecificDetailsProtocol {
     var crashConsistentFrequencyInMinutes: Int32? { get set }
     var recoveryPointThresholdInMinutes: Int32? { get set }
     var recoveryPointHistory: Int32? { get set }
     var appConsistentFrequencyInMinutes: Int32? { get set }
     var multiVmSyncStatus: String? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2PolicyInputProtocol is vMWare Azure specific policy Input.
public protocol InMageAzureV2PolicyInputProtocol : PolicyProviderSpecificInputProtocol {
     var recoveryPointThresholdInMinutes: Int32? { get set }
     var recoveryPointHistory: Int32? { get set }
     var crashConsistentFrequencyInMinutes: Int32? { get set }
     var appConsistentFrequencyInMinutes: Int32? { get set }
     var multiVmSyncStatus: SetMultiVmSyncStatusEnum { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2ProtectedDiskDetailsProtocol is inMageAzureV2 protected disk details.
public protocol InMageAzureV2ProtectedDiskDetailsProtocol : Codable {
     var diskId: String? { get set }
     var diskName: String? { get set }
     var protectionStage: String? { get set }
     var healthErrorCode: String? { get set }
     var rpoInSeconds: Int64? { get set }
     var resyncRequired: String? { get set }
     var resyncProgressPercentage: Int32? { get set }
     var resyncDurationInSeconds: Int64? { get set }
     var diskCapacityInBytes: Int64? { get set }
     var fileSystemCapacityInBytes: Int64? { get set }
     var sourceDataInMegaBytes: Double? { get set }
     var psDataInMegaBytes: Double? { get set }
     var targetDataInMegaBytes: Double? { get set }
     var diskResized: String? { get set }
     var lastRpoCalculatedTime: Date? { get set }
}


// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
import Foundation
// InMageAzureV2RecoveryPointDetailsProtocol is inMage Azure V2 provider specific recovery point details.
public protocol InMageAzureV2RecoveryPointDetailsProtocol : ProviderSpecificRecoveryPointDetailsProtocol {
     var isMultiVmSyncPoint: String? { get set }
}