text: /*
   * 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.
   * Changes may cause incorrect behavior and will be lost if the code is
   * regenerated.
   */
  
  'use strict';
  
  const models = require('./index');
  
  /**
   * Replication protected item custom data details.
   *
   */
  class ReplicationProtectedItemProperties {
    /**
     * Create a ReplicationProtectedItemProperties.
     * @member {string} [friendlyName] The name.
     * @member {string} [protectedItemType] The type of protected item type.
     * @member {string} [protectableItemId] The protected item ARM Id.
     * @member {string} [recoveryServicesProviderId] The recovery provider ARM
     * Id.
     * @member {string} [primaryFabricFriendlyName] The friendly name of the
     * primary fabric.
     * @member {string} [recoveryFabricFriendlyName] The friendly name of
     * recovery fabric.
     * @member {string} [recoveryFabricId] The Arm Id of recovery fabric.
     * @member {string} [primaryProtectionContainerFriendlyName] The name of
     * primary protection container friendly name.
     * @member {string} [recoveryProtectionContainerFriendlyName] The name of
     * recovery container friendly name.
     * @member {string} [protectionState] The protection status.
     * @member {string} [protectionStateDescription] The protection state
     * description.
     * @member {string} [activeLocation] The Current active location of the PE.
     * @member {string} [testFailoverState] The Test failover state.
     * @member {string} [testFailoverStateDescription] The Test failover state
     * description.
     * @member {array} [allowedOperations] The allowed operations on the
     * Replication protected item.
     * @member {string} [replicationHealth] The consolidated protection health
     * for the VM taking any issues with SRS as well as all the replication units
     * associated with the VM's replication group into account. This is a string
     * representation of the ProtectionHealth enumeration.
     * @member {string} [failoverHealth] The consolidated failover health for the
     * VM.
     * @member {array} [replicationHealthErrors] List of replication health
     * errors.
     * @member {array} [failoverHealthErrors] List of failover health errors.
     * @member {string} [policyId] The ID of Policy governing this PE.
     * @member {string} [policyFriendlyName] The name of Policy governing this
     * PE.
     * @member {date} [lastSuccessfulFailoverTime] The Last successful failover
     * time.
     * @member {date} [lastSuccessfulTestFailoverTime] The Last successful test
     * failover time.
     * @member {object} [currentScenario] The current scenario.
     * @member {string} [currentScenario.scenarioName] Scenario name.
     * @member {string} [currentScenario.jobId] ARM Id of the job being executed.
     * @member {date} [currentScenario.startTime] Start time of the workflow.
     * @member {string} [failoverRecoveryPointId] The recovery point ARM Id to
     * which the Vm was failed over.
     * @member {object} [providerSpecificDetails] The Replication provider custom
     * settings.
     * @member {string} [providerSpecificDetails.instanceType] Polymorphic
     * Discriminator
     * @member {string} [recoveryContainerId] The recovery container Id.
     */
    constructor() {
    }
  
    /**
     * Defines the metadata of ReplicationProtectedItemProperties
     *
     * @returns {object} metadata of ReplicationProtectedItemProperties
     *
     */
    mapper() {
      return {
        required: false,
        serializedName: 'ReplicationProtectedItemProperties',
        type: {
          name: 'Composite',
          className: 'ReplicationProtectedItemProperties',
          modelProperties: {
            friendlyName: {
              required: false,
              serializedName: 'friendlyName',
              type: {
                name: 'String'
              }
            },
            protectedItemType: {
              required: false,
              serializedName: 'protectedItemType',
              type: {
                name: 'String'
              }
            },
            protectableItemId: {
              required: false,
              serializedName: 'protectableItemId',
              type: {
                name: 'String'
              }
            },
            recoveryServicesProviderId: {
              required: false,
              serializedName: 'recoveryServicesProviderId',
              type: {
                name: 'String'
              }
            },
            primaryFabricFriendlyName: {
              required: false,
              serializedName: 'primaryFabricFriendlyName',
              type: {
                name: 'String'
              }
            },
            recoveryFabricFriendlyName: {
              required: false,
              serializedName: 'recoveryFabricFriendlyName',
              type: {
                name: 'String'
              }
            },
            recoveryFabricId: {
              required: false,
              serializedName: 'recoveryFabricId',
              type: {
                name: 'String'
              }
            },
            primaryProtectionContainerFriendlyName: {
              required: false,
              serializedName: 'primaryProtectionContainerFriendlyName',
              type: {
                name: 'String'
              }
            },
            recoveryProtectionContainerFriendlyName: {
              required: false,
              serializedName: 'recoveryProtectionContainerFriendlyName',
              type: {
                name: 'String'
              }
            },
            protectionState: {
              required: false,
              serializedName: 'protectionState',
              type: {
                name: 'String'
              }
            },
            protectionStateDescription: {
              required: false,
              serializedName: 'protectionStateDescription',
              type: {
                name: 'String'
              }
            },
            activeLocation: {
              required: false,
              serializedName: 'activeLocation',
              type: {
                name: 'String'
              }
            },
            testFailoverState: {
              required: false,
              serializedName: 'testFailoverState',
              type: {
                name: 'String'
              }
            },
            testFailoverStateDescription: {
              required: false,
              serializedName: 'testFailoverStateDescription',
              type: {
                name: 'String'
              }
            },
            allowedOperations: {
              required: false,
              serializedName: 'allowedOperations',
              type: {
                name: 'Sequence',
                element: {
                    required: false,
                    serializedName: 'StringElementType',
                    type: {
                      name: 'String'
                    }
                }
              }
            },
            replicationHealth: {
              required: false,
              serializedName: 'replicationHealth',
              type: {
                name: 'String'
              }
            },
            failoverHealth: {
              required: false,
              serializedName: 'failoverHealth',
              type: {
                name: 'String'
              }
            },
            replicationHealthErrors: {
              required: false,
              serializedName: 'replicationHealthErrors',
              type: {
                name: 'Sequence',
                element: {
                    required: false,
                    serializedName: 'HealthErrorElementType',
                    type: {
                      name: 'Composite',
                      className: 'HealthError'
                    }
                }
              }
            },
            failoverHealthErrors: {
              required: false,
              serializedName: 'failoverHealthErrors',
              type: {
                name: 'Sequence',
                element: {
                    required: false,
                    serializedName: 'HealthErrorElementType',
                    type: {
                      name: 'Composite',
                      className: 'HealthError'
                    }
                }
              }
            },
            policyId: {
              required: false,
              serializedName: 'policyId',
              type: {
                name: 'String'
              }
            },
            policyFriendlyName: {
              required: false,
              serializedName: 'policyFriendlyName',
              type: {
                name: 'String'
              }
            },
            lastSuccessfulFailoverTime: {
              required: false,
              serializedName: 'lastSuccessfulFailoverTime',
              type: {
                name: 'DateTime'
              }
            },
            lastSuccessfulTestFailoverTime: {
              required: false,
              serializedName: 'lastSuccessfulTestFailoverTime',
              type: {
                name: 'DateTime'
              }
            },
            currentScenario: {
              required: false,
              serializedName: 'currentScenario',
              type: {
                name: 'Composite',
                className: 'CurrentScenarioDetails'
              }
            },
            failoverRecoveryPointId: {
              required: false,
              serializedName: 'failoverRecoveryPointId',
              type: {
                name: 'String'
              }
            },
            providerSpecificDetails: {
              required: false,
              serializedName: 'providerSpecificDetails',
              type: {
                name: 'Composite',
                polymorphicDiscriminator: {
                  serializedName: 'instanceType',
                  clientName: 'instanceType'
                },
                uberParent: 'ReplicationProviderSpecificSettings',
                className: 'ReplicationProviderSpecificSettings'
              }
            },
            recoveryContainerId: {
              required: false,
              serializedName: 'recoveryContainerId',
              type: {
                name: 'String'
              }
            }
          }
        }
      };
    }
  }
  
  module.exports = ReplicationProtectedItemProperties;
  