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');
  
  /**
   * A ServiceUpdateDescription contains all of the information necessary to
   * update a service.
   *
   */
  class ServiceUpdateDescription {
    /**
     * Create a ServiceUpdateDescription.
     * @member {string} [flags] Flags indicating whether other properties are
     * set. Each of the associated properties corresponds to a flag, specified
     * below, which, if set, indicate that the property is specified.
     * This property can be a combination of those flags obtained using bitwise
     * 'OR' operator.
     * For example, if the provided value is 6 then the flags for
     * ReplicaRestartWaitDuration (2) and QuorumLossWaitDuration (4) are set.
     *
     * - None - Does not indicate any other properties are set. The value is
     * zero.
     * - TargetReplicaSetSize/InstanceCount - Indicates whether the
     * TargetReplicaSetSize property (for Stateful services) or the InstanceCount
     * property (for Stateless services) is set. The value is 1.
     * - ReplicaRestartWaitDuration - Indicates the ReplicaRestartWaitDuration
     * property is set. The value is  2.
     * - QuorumLossWaitDuration - Indicates the QuorumLossWaitDuration property
     * is set. The value is 4.
     * - StandByReplicaKeepDuration - Indicates the StandByReplicaKeepDuration
     * property is set. The value is 8.
     * - MinReplicaSetSize - Indicates the MinReplicaSetSize property is set. The
     * value is 16.
     * - PlacementConstraints - Indicates the PlacementConstraints property is
     * set. The value is 32.
     * - PlacementPolicyList - Indicates the ServicePlacementPolicies property is
     * set. The value is 64.
     * - Correlation - Indicates the CorrelationScheme property is set. The value
     * is 128.
     * - Metrics - Indicates the ServiceLoadMetrics property is set. The value is
     * 256.
     * - DefaultMoveCost - Indicates the DefaultMoveCost property is set. The
     * value is 512.
     * @member {string} [placementConstraints] The placement constraints as a
     * string. Placement constraints are boolean expressions on node properties
     * and allow for restricting a service to particular nodes based on the
     * service requirements. For example, to place a service on nodes where
     * NodeType is blue specify the following: "NodeColor == blue)".
     * @member {array} [correlationScheme]
     * @member {array} [loadMetrics]
     * @member {array} [servicePlacementPolicies]
     * @member {string} [defaultMoveCost] Possible values include: 'Zero', 'Low',
     * 'Medium', 'High'
     * @member {string} serviceKind Polymorphic Discriminator
     */
    constructor() {
    }
  
    /**
     * Defines the metadata of ServiceUpdateDescription
     *
     * @returns {object} metadata of ServiceUpdateDescription
     *
     */
    mapper() {
      return {
        required: false,
        serializedName: 'ServiceUpdateDescription',
        type: {
          name: 'Composite',
          polymorphicDiscriminator: {
            serializedName: 'ServiceKind',
            clientName: 'serviceKind'
          },
          uberParent: 'ServiceUpdateDescription',
          className: 'ServiceUpdateDescription',
          modelProperties: {
            flags: {
              required: false,
              serializedName: 'Flags',
              type: {
                name: 'String'
              }
            },
            placementConstraints: {
              required: false,
              serializedName: 'PlacementConstraints',
              type: {
                name: 'String'
              }
            },
            correlationScheme: {
              required: false,
              serializedName: 'CorrelationScheme',
              type: {
                name: 'Sequence',
                element: {
                    required: false,
                    serializedName: 'ServiceCorrelationDescriptionElementType',
                    type: {
                      name: 'Composite',
                      className: 'ServiceCorrelationDescription'
                    }
                }
              }
            },
            loadMetrics: {
              required: false,
              serializedName: 'LoadMetrics',
              type: {
                name: 'Sequence',
                element: {
                    required: false,
                    serializedName: 'ServiceLoadMetricDescriptionElementType',
                    type: {
                      name: 'Composite',
                      className: 'ServiceLoadMetricDescription'
                    }
                }
              }
            },
            servicePlacementPolicies: {
              required: false,
              serializedName: 'ServicePlacementPolicies',
              type: {
                name: 'Sequence',
                element: {
                    required: false,
                    serializedName: 'ServicePlacementPolicyDescriptionElementType',
                    type: {
                      name: 'Composite',
                      polymorphicDiscriminator: {
                        serializedName: 'Type',
                        clientName: 'type'
                      },
                      uberParent: 'ServicePlacementPolicyDescription',
                      className: 'ServicePlacementPolicyDescription'
                    }
                }
              }
            },
            defaultMoveCost: {
              required: false,
              serializedName: 'DefaultMoveCost',
              type: {
                name: 'String'
              }
            },
            serviceKind: {
              required: true,
              serializedName: 'ServiceKind',
              type: {
                name: 'String'
              }
            }
          }
        }
      };
    }
  }
  
  module.exports = ServiceUpdateDescription;
  