/*
 * 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 0.16.0.0
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
 */

'use strict';

var models = require('./index');

var util = require('util');

/**
 * @class
 * Initializes a new instance of the PolicyDefinition class.
 * @constructor
 * The policy definition.
 * @member {string} [policyType] Gets or sets policy definition policy type.
 * Possible values include: 'NotSpecified', 'BuiltIn', 'Custom'
 * 
 * @member {string} [displayName] Gets or sets the policy definition display
 * name.
 * 
 * @member {string} [description] Gets or sets the policy definition
 * description.
 * 
 * @member {object} [policyRule] Gets or sets the policy rule.
 * 
 * @member {string} [id] Gets or sets the Id of the policy definition.
 * 
 * @member {string} [name] Gets or sets the name of the policy definition.
 * 
 */
function PolicyDefinition() {
  PolicyDefinition['super_'].call(this);
}

util.inherits(PolicyDefinition, models['BaseResource']);

/**
 * Defines the metadata of PolicyDefinition
 *
 * @returns {object} metadata of PolicyDefinition
 *
 */
PolicyDefinition.prototype.mapper = function () {
  return {
    required: false,
    serializedName: 'PolicyDefinition',
    type: {
      name: 'Composite',
      className: 'PolicyDefinition',
      modelProperties: {
        policyType: {
          required: false,
          serializedName: 'properties.policyType',
          type: {
            name: 'String'
          }
        },
        displayName: {
          required: false,
          serializedName: 'properties.displayName',
          type: {
            name: 'String'
          }
        },
        description: {
          required: false,
          serializedName: 'properties.description',
          type: {
            name: 'String'
          }
        },
        policyRule: {
          required: false,
          serializedName: 'properties.policyRule',
          type: {
            name: 'Object'
          }
        },
        id: {
          required: false,
          serializedName: 'id',
          type: {
            name: 'String'
          }
        },
        name: {
          required: false,
          serializedName: 'name',
          type: {
            name: 'String'
          }
        }
      }
    }
  };
};

module.exports = PolicyDefinition;
