/*
 * 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');

/**
 * The Get Capabilities operation response.
 *
 */
class CapabilitiesResult {
  /**
   * Create a CapabilitiesResult.
   * @member {object} [versions] The version capability.
   * @member {object} [regions] The virtual machine size compatibilty features.
   * @member {object} [vmSizes] The virtual machine sizes.
   * @member {array} [vmSizeFilters] The virtual machine size compatibilty
   * filters.
   * @member {array} [features] The capabilty features.
   * @member {object} [quota] The quota capability.
   * @member {array} [quota.regionalQuotas] The list of region quota
   * capabilities.
   */
  constructor() {
  }

  /**
   * Defines the metadata of CapabilitiesResult
   *
   * @returns {object} metadata of CapabilitiesResult
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'capabilitiesResult',
      type: {
        name: 'Composite',
        className: 'CapabilitiesResult',
        modelProperties: {
          versions: {
            required: false,
            serializedName: 'versions',
            type: {
              name: 'Dictionary',
              value: {
                  required: false,
                  serializedName: 'VersionsCapabilityElementType',
                  type: {
                    name: 'Composite',
                    className: 'VersionsCapability'
                  }
              }
            }
          },
          regions: {
            required: false,
            serializedName: 'regions',
            type: {
              name: 'Dictionary',
              value: {
                  required: false,
                  serializedName: 'RegionsCapabilityElementType',
                  type: {
                    name: 'Composite',
                    className: 'RegionsCapability'
                  }
              }
            }
          },
          vmSizes: {
            required: false,
            serializedName: 'vmSizes',
            type: {
              name: 'Dictionary',
              value: {
                  required: false,
                  serializedName: 'VmSizesCapabilityElementType',
                  type: {
                    name: 'Composite',
                    className: 'VmSizesCapability'
                  }
              }
            }
          },
          vmSizeFilters: {
            required: false,
            serializedName: 'vmSize_filters',
            type: {
              name: 'Sequence',
              element: {
                  required: false,
                  serializedName: 'VmSizeCompatibilityFilterElementType',
                  type: {
                    name: 'Composite',
                    className: 'VmSizeCompatibilityFilter'
                  }
              }
            }
          },
          features: {
            required: false,
            serializedName: 'features',
            type: {
              name: 'Sequence',
              element: {
                  required: false,
                  serializedName: 'StringElementType',
                  type: {
                    name: 'String'
                  }
              }
            }
          },
          quota: {
            required: false,
            serializedName: 'quota',
            type: {
              name: 'Composite',
              className: 'QuotaCapability'
            }
          }
        }
      }
    };
  }
}

module.exports = CapabilitiesResult;
