// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/swift-aws/aws-sdk-swift/blob/master/CodeGenerator/Sources/CodeGenerator/main.swift. DO NOT EDIT.

import Foundation
import AWSSDKSwiftCore

extension ServiceQuotas {

    public struct AssociateServiceQuotaTemplateRequest: AWSShape {


        public init() {
        }

    }

    public struct AssociateServiceQuotaTemplateResponse: AWSShape {


        public init() {
        }

    }

    public struct DeleteServiceQuotaIncreaseRequestFromTemplateRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AwsRegion", required: true, type: .string), 
            AWSShapeMember(label: "QuotaCode", required: true, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// Specifies the AWS Region for the quota that you want to delete.
        public let awsRegion: String
        /// Specifies the code for the quota that you want to delete.
        public let quotaCode: String
        /// Specifies the code for the service that you want to delete.
        public let serviceCode: String

        public init(awsRegion: String, quotaCode: String, serviceCode: String) {
            self.awsRegion = awsRegion
            self.quotaCode = quotaCode
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.awsRegion, name:"awsRegion", parent: name, max: 64)
            try validate(self.awsRegion, name:"awsRegion", parent: name, min: 1)
            try validate(self.awsRegion, name:"awsRegion", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.quotaCode, name:"quotaCode", parent: name, max: 128)
            try validate(self.quotaCode, name:"quotaCode", parent: name, min: 1)
            try validate(self.quotaCode, name:"quotaCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case quotaCode = "QuotaCode"
            case serviceCode = "ServiceCode"
        }
    }

    public struct DeleteServiceQuotaIncreaseRequestFromTemplateResponse: AWSShape {


        public init() {
        }

    }

    public struct DisassociateServiceQuotaTemplateRequest: AWSShape {


        public init() {
        }

    }

    public struct DisassociateServiceQuotaTemplateResponse: AWSShape {


        public init() {
        }

    }

    public enum ErrorCode: String, CustomStringConvertible, Codable {
        case dependencyAccessDeniedError = "DEPENDENCY_ACCESS_DENIED_ERROR"
        case dependencyThrottlingError = "DEPENDENCY_THROTTLING_ERROR"
        case dependencyServiceError = "DEPENDENCY_SERVICE_ERROR"
        case serviceQuotaNotAvailableError = "SERVICE_QUOTA_NOT_AVAILABLE_ERROR"
        public var description: String { return self.rawValue }
    }

    public struct ErrorReason: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ErrorCode", required: false, type: .enum), 
            AWSShapeMember(label: "ErrorMessage", required: false, type: .string)
        ]

        /// Service Quotas returns the following error values.   DEPENDENCY_ACCESS_DENIED_ERROR is returned when the caller does not have permission to call the service or service quota. To resolve the error, you need permission to access the service or service quota.  DEPENDENCY_THROTTLING_ERROR is returned when the service being called is throttling Service Quotas.  DEPENDENCY_SERVICE_ERROR is returned when the service being called has availability issues.  SERVICE_QUOTA_NOT_AVAILABLE_ERROR is returned when there was an error in Service Quotas.
        public let errorCode: ErrorCode?
        /// The error message that provides more detail.
        public let errorMessage: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
        }
    }

    public struct GetAWSDefaultServiceQuotaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "QuotaCode", required: true, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// Identifies the service quota you want to select.
        public let quotaCode: String
        /// Specifies the service that you want to use.
        public let serviceCode: String

        public init(quotaCode: String, serviceCode: String) {
            self.quotaCode = quotaCode
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.quotaCode, name:"quotaCode", parent: name, max: 128)
            try validate(self.quotaCode, name:"quotaCode", parent: name, min: 1)
            try validate(self.quotaCode, name:"quotaCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case quotaCode = "QuotaCode"
            case serviceCode = "ServiceCode"
        }
    }

    public struct GetAWSDefaultServiceQuotaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Quota", required: false, type: .structure)
        ]

        /// Returns the ServiceQuota object which contains all values for a quota.
        public let quota: ServiceQuota?

        public init(quota: ServiceQuota? = nil) {
            self.quota = quota
        }

        private enum CodingKeys: String, CodingKey {
            case quota = "Quota"
        }
    }

    public struct GetAssociationForServiceQuotaTemplateRequest: AWSShape {


        public init() {
        }

    }

    public struct GetAssociationForServiceQuotaTemplateResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ServiceQuotaTemplateAssociationStatus", required: false, type: .enum)
        ]

        /// Specifies whether the template is ASSOCIATED or DISASSOCIATED. If the template is ASSOCIATED, then it requests service quota increases for all new accounts created in your organization. 
        public let serviceQuotaTemplateAssociationStatus: ServiceQuotaTemplateAssociationStatus?

        public init(serviceQuotaTemplateAssociationStatus: ServiceQuotaTemplateAssociationStatus? = nil) {
            self.serviceQuotaTemplateAssociationStatus = serviceQuotaTemplateAssociationStatus
        }

        private enum CodingKeys: String, CodingKey {
            case serviceQuotaTemplateAssociationStatus = "ServiceQuotaTemplateAssociationStatus"
        }
    }

    public struct GetRequestedServiceQuotaChangeRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "RequestId", required: true, type: .string)
        ]

        /// Identifies the quota increase request.
        public let requestId: String

        public init(requestId: String) {
            self.requestId = requestId
        }

        public func validate(name: String) throws {
            try validate(self.requestId, name:"requestId", parent: name, max: 128)
            try validate(self.requestId, name:"requestId", parent: name, min: 1)
            try validate(self.requestId, name:"requestId", parent: name, pattern: "[0-9a-zA-Z][a-zA-Z0-9-]{1,128}")
        }

        private enum CodingKeys: String, CodingKey {
            case requestId = "RequestId"
        }
    }

    public struct GetRequestedServiceQuotaChangeResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "RequestedQuota", required: false, type: .structure)
        ]

        /// Returns the RequestedServiceQuotaChange object for the specific increase request.
        public let requestedQuota: RequestedServiceQuotaChange?

        public init(requestedQuota: RequestedServiceQuotaChange? = nil) {
            self.requestedQuota = requestedQuota
        }

        private enum CodingKeys: String, CodingKey {
            case requestedQuota = "RequestedQuota"
        }
    }

    public struct GetServiceQuotaIncreaseRequestFromTemplateRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AwsRegion", required: true, type: .string), 
            AWSShapeMember(label: "QuotaCode", required: true, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// Specifies the AWS Region for the quota that you want to use.
        public let awsRegion: String
        /// Specifies the quota you want.
        public let quotaCode: String
        /// Specifies the service that you want to use.
        public let serviceCode: String

        public init(awsRegion: String, quotaCode: String, serviceCode: String) {
            self.awsRegion = awsRegion
            self.quotaCode = quotaCode
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.awsRegion, name:"awsRegion", parent: name, max: 64)
            try validate(self.awsRegion, name:"awsRegion", parent: name, min: 1)
            try validate(self.awsRegion, name:"awsRegion", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.quotaCode, name:"quotaCode", parent: name, max: 128)
            try validate(self.quotaCode, name:"quotaCode", parent: name, min: 1)
            try validate(self.quotaCode, name:"quotaCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case quotaCode = "QuotaCode"
            case serviceCode = "ServiceCode"
        }
    }

    public struct GetServiceQuotaIncreaseRequestFromTemplateResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ServiceQuotaIncreaseRequestInTemplate", required: false, type: .structure)
        ]

        /// This object contains the details about the quota increase request.
        public let serviceQuotaIncreaseRequestInTemplate: ServiceQuotaIncreaseRequestInTemplate?

        public init(serviceQuotaIncreaseRequestInTemplate: ServiceQuotaIncreaseRequestInTemplate? = nil) {
            self.serviceQuotaIncreaseRequestInTemplate = serviceQuotaIncreaseRequestInTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case serviceQuotaIncreaseRequestInTemplate = "ServiceQuotaIncreaseRequestInTemplate"
        }
    }

    public struct GetServiceQuotaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "QuotaCode", required: true, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// Identifies the service quota you want to select.
        public let quotaCode: String
        /// Specifies the service that you want to use.
        public let serviceCode: String

        public init(quotaCode: String, serviceCode: String) {
            self.quotaCode = quotaCode
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.quotaCode, name:"quotaCode", parent: name, max: 128)
            try validate(self.quotaCode, name:"quotaCode", parent: name, min: 1)
            try validate(self.quotaCode, name:"quotaCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case quotaCode = "QuotaCode"
            case serviceCode = "ServiceCode"
        }
    }

    public struct GetServiceQuotaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Quota", required: false, type: .structure)
        ]

        /// Returns the ServiceQuota object which contains all values for a quota.
        public let quota: ServiceQuota?

        public init(quota: ServiceQuota? = nil) {
            self.quota = quota
        }

        private enum CodingKeys: String, CodingKey {
            case quota = "Quota"
        }
    }

    public struct ListAWSDefaultServiceQuotasRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// (Optional) Limits the number of results that you want to include in the response. If you don't include this parameter, the response defaults to a value that's specific to the operation. If additional items exist beyond the specified maximum, the NextToken element is present and has a value (isn't null). Include that value as the NextToken request parameter in the call to the operation to get the next part of the results. You should check NextToken after every operation to ensure that you receive all of the results.
        public let maxResults: Int?
        /// (Optional) Use this parameter in a request if you receive a NextToken response in a previous request that indicates that there's more output available. In a subsequent call, set it to the value of the previous call's NextToken response to indicate where the output should continue from. If additional items exist beyond the specified maximum, the NextToken element is present and has a value (isn't null). Include that value as the NextToken request parameter in the call to the operation to get the next part of the results. You should check NextToken after every operation to ensure that you receive all of the results.
        public let nextToken: String?
        /// Specifies the service that you want to use.
        public let serviceCode: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, serviceCode: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 100)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
            try validate(self.nextToken, name:"nextToken", parent: name, max: 2048)
            try validate(self.nextToken, name:"nextToken", parent: name, pattern: "^[a-zA-Z0-9/+]*={0,2}$")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case serviceCode = "ServiceCode"
        }
    }

    public struct ListAWSDefaultServiceQuotasResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Quotas", required: false, type: .list)
        ]

        /// (Optional) Use this parameter in a request if you receive a NextToken response in a previous request that indicates that there's more output available. In a subsequent call, set it to the value of the previous call's NextToken response to indicate where the output should continue from.
        public let nextToken: String?
        /// A list of the quotas in the account with the AWS default values. 
        public let quotas: [ServiceQuota]?

        public init(nextToken: String? = nil, quotas: [ServiceQuota]? = nil) {
            self.nextToken = nextToken
            self.quotas = quotas
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case quotas = "Quotas"
        }
    }

    public struct ListRequestedServiceQuotaChangeHistoryByQuotaRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "QuotaCode", required: true, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum)
        ]

        /// (Optional) Limits the number of results that you want to include in the response. If you don't include this parameter, the response defaults to a value that's specific to the operation. If additional items exist beyond the specified maximum, the NextToken element is present and has a value (isn't null). Include that value as the NextToken request parameter in the call to the operation to get the next part of the results. You should check NextToken after every operation to ensure that you receive all of the results.
        public let maxResults: Int?
        /// (Optional) Use this parameter in a request if you receive a NextToken response in a previous request that indicates that there's more output available. In a subsequent call, set it to the value of the previous call's NextToken response to indicate where the output should continue from.
        public let nextToken: String?
        /// Specifies the service quota that you want to use
        public let quotaCode: String
        /// Specifies the service that you want to use.
        public let serviceCode: String
        /// Specifies the status value of the quota increase request.
        public let status: RequestStatus?

        public init(maxResults: Int? = nil, nextToken: String? = nil, quotaCode: String, serviceCode: String, status: RequestStatus? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.quotaCode = quotaCode
            self.serviceCode = serviceCode
            self.status = status
        }

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 100)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
            try validate(self.nextToken, name:"nextToken", parent: name, max: 2048)
            try validate(self.nextToken, name:"nextToken", parent: name, pattern: "^[a-zA-Z0-9/+]*={0,2}$")
            try validate(self.quotaCode, name:"quotaCode", parent: name, max: 128)
            try validate(self.quotaCode, name:"quotaCode", parent: name, min: 1)
            try validate(self.quotaCode, name:"quotaCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case quotaCode = "QuotaCode"
            case serviceCode = "ServiceCode"
            case status = "Status"
        }
    }

    public struct ListRequestedServiceQuotaChangeHistoryByQuotaResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "RequestedQuotas", required: false, type: .list)
        ]

        /// If present in the response, this value indicates there's more output available that what's included in the current response. This can occur even when the response includes no values at all, such as when you ask for a filtered view of a very long list. Use this value in the NextToken request parameter in a subsequent call to the operation to continue processing and get the next part of the output. You should repeat this until the NextToken response element comes back empty (as null).
        public let nextToken: String?
        /// Returns a list of service quota requests.
        public let requestedQuotas: [RequestedServiceQuotaChange]?

        public init(nextToken: String? = nil, requestedQuotas: [RequestedServiceQuotaChange]? = nil) {
            self.nextToken = nextToken
            self.requestedQuotas = requestedQuotas
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case requestedQuotas = "RequestedQuotas"
        }
    }

    public struct ListRequestedServiceQuotaChangeHistoryRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: false, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum)
        ]

        /// (Optional) Limits the number of results that you want to include in the response. If you don't include this parameter, the response defaults to a value that's specific to the operation. If additional items exist beyond the specified maximum, the NextToken element is present and has a value (isn't null). Include that value as the NextToken request parameter in the call to the operation to get the next part of the results. You should check NextToken after every operation to ensure that you receive all of the results.
        public let maxResults: Int?
        /// (Optional) Use this parameter in a request if you receive a NextToken response in a previous request that indicates that there's more output available. In a subsequent call, set it to the value of the previous call's NextToken response to indicate where the output should continue from.
        public let nextToken: String?
        /// Specifies the service that you want to use.
        public let serviceCode: String?
        /// Specifies the status value of the quota increase request.
        public let status: RequestStatus?

        public init(maxResults: Int? = nil, nextToken: String? = nil, serviceCode: String? = nil, status: RequestStatus? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.serviceCode = serviceCode
            self.status = status
        }

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 100)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
            try validate(self.nextToken, name:"nextToken", parent: name, max: 2048)
            try validate(self.nextToken, name:"nextToken", parent: name, pattern: "^[a-zA-Z0-9/+]*={0,2}$")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case serviceCode = "ServiceCode"
            case status = "Status"
        }
    }

    public struct ListRequestedServiceQuotaChangeHistoryResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "RequestedQuotas", required: false, type: .list)
        ]

        /// If present in the response, this value indicates there's more output available that what's included in the current response. This can occur even when the response includes no values at all, such as when you ask for a filtered view of a very long list. Use this value in the NextToken request parameter in a subsequent call to the operation to continue processing and get the next part of the output. You should repeat this until the NextToken response element comes back empty (as null).
        public let nextToken: String?
        /// Returns a list of service quota requests.
        public let requestedQuotas: [RequestedServiceQuotaChange]?

        public init(nextToken: String? = nil, requestedQuotas: [RequestedServiceQuotaChange]? = nil) {
            self.nextToken = nextToken
            self.requestedQuotas = requestedQuotas
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case requestedQuotas = "RequestedQuotas"
        }
    }

    public struct ListServiceQuotaIncreaseRequestsInTemplateRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AwsRegion", required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: false, type: .string)
        ]

        /// Specifies the AWS Region for the quota that you want to use.
        public let awsRegion: String?
        /// (Optional) Limits the number of results that you want to include in the response. If you don't include this parameter, the response defaults to a value that's specific to the operation. If additional items exist beyond the specified maximum, the NextToken element is present and has a value (isn't null). Include that value as the NextToken request parameter in the call to the operation to get the next part of the results. You should check NextToken after every operation to ensure that you receive all of the results.
        public let maxResults: Int?
        /// (Optional) Use this parameter in a request if you receive a NextToken response in a previous request that indicates that there's more output available. In a subsequent call, set it to the value of the previous call's NextToken response to indicate where the output should continue from.
        public let nextToken: String?
        /// The identifier for a service. When performing an operation, use the ServiceCode to specify a particular service. 
        public let serviceCode: String?

        public init(awsRegion: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, serviceCode: String? = nil) {
            self.awsRegion = awsRegion
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.awsRegion, name:"awsRegion", parent: name, max: 64)
            try validate(self.awsRegion, name:"awsRegion", parent: name, min: 1)
            try validate(self.awsRegion, name:"awsRegion", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.maxResults, name:"maxResults", parent: name, max: 100)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
            try validate(self.nextToken, name:"nextToken", parent: name, max: 2048)
            try validate(self.nextToken, name:"nextToken", parent: name, pattern: "^[a-zA-Z0-9/+]*={0,2}$")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case serviceCode = "ServiceCode"
        }
    }

    public struct ListServiceQuotaIncreaseRequestsInTemplateResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ServiceQuotaIncreaseRequestInTemplateList", required: false, type: .list)
        ]

        /// If present in the response, this value indicates there's more output available that what's included in the current response. This can occur even when the response includes no values at all, such as when you ask for a filtered view of a very long list. Use this value in the NextToken request parameter in a subsequent call to the operation to continue processing and get the next part of the output. You should repeat this until the NextToken response element comes back empty (as null).
        public let nextToken: String?
        /// Returns the list of values of the quota increase request in the template.
        public let serviceQuotaIncreaseRequestInTemplateList: [ServiceQuotaIncreaseRequestInTemplate]?

        public init(nextToken: String? = nil, serviceQuotaIncreaseRequestInTemplateList: [ServiceQuotaIncreaseRequestInTemplate]? = nil) {
            self.nextToken = nextToken
            self.serviceQuotaIncreaseRequestInTemplateList = serviceQuotaIncreaseRequestInTemplateList
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case serviceQuotaIncreaseRequestInTemplateList = "ServiceQuotaIncreaseRequestInTemplateList"
        }
    }

    public struct ListServiceQuotasRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// (Optional) Limits the number of results that you want to include in the response. If you don't include this parameter, the response defaults to a value that's specific to the operation. If additional items exist beyond the specified maximum, the NextToken element is present and has a value (isn't null). Include that value as the NextToken request parameter in the call to the operation to get the next part of the results. You should check NextToken after every operation to ensure that you receive all of the results.
        public let maxResults: Int?
        /// (Optional) Use this parameter in a request if you receive a NextToken response in a previous request that indicates that there's more output available. In a subsequent call, set it to the value of the previous call's NextToken response to indicate where the output should continue from.
        public let nextToken: String?
        /// The identifier for a service. When performing an operation, use the ServiceCode to specify a particular service. 
        public let serviceCode: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, serviceCode: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 100)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
            try validate(self.nextToken, name:"nextToken", parent: name, max: 2048)
            try validate(self.nextToken, name:"nextToken", parent: name, pattern: "^[a-zA-Z0-9/+]*={0,2}$")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case serviceCode = "ServiceCode"
        }
    }

    public struct ListServiceQuotasResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Quotas", required: false, type: .list)
        ]

        /// If present in the response, this value indicates there's more output available that what's included in the current response. This can occur even when the response includes no values at all, such as when you ask for a filtered view of a very long list. Use this value in the NextToken request parameter in a subsequent call to the operation to continue processing and get the next part of the output. You should repeat this until the NextToken response element comes back empty (as null).
        public let nextToken: String?
        /// The response information for a quota lists all attribute information for the quota. 
        public let quotas: [ServiceQuota]?

        public init(nextToken: String? = nil, quotas: [ServiceQuota]? = nil) {
            self.nextToken = nextToken
            self.quotas = quotas
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case quotas = "Quotas"
        }
    }

    public struct ListServicesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", required: false, type: .string)
        ]

        /// (Optional) Limits the number of results that you want to include in the response. If you don't include this parameter, the response defaults to a value that's specific to the operation. If additional items exist beyond the specified maximum, the NextToken element is present and has a value (isn't null). Include that value as the NextToken request parameter in the call to the operation to get the next part of the results. You should check NextToken after every operation to ensure that you receive all of the results.
        public let maxResults: Int?
        /// (Optional) Use this parameter in a request if you receive a NextToken response in a previous request that indicates that there's more output available. In a subsequent call, set it to the value of the previous call's NextToken response to indicate where the output should continue from.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 100)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
            try validate(self.nextToken, name:"nextToken", parent: name, max: 2048)
            try validate(self.nextToken, name:"nextToken", parent: name, pattern: "^[a-zA-Z0-9/+]*={0,2}$")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct ListServicesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Services", required: false, type: .list)
        ]

        /// If present in the response, this value indicates there's more output available that what's included in the current response. This can occur even when the response includes no values at all, such as when you ask for a filtered view of a very long list. Use this value in the NextToken request parameter in a subsequent call to the operation to continue processing and get the next part of the output. You should repeat this until the NextToken response element comes back empty (as null).
        public let nextToken: String?
        /// Returns a list of services. 
        public let services: [ServiceInfo]?

        public init(nextToken: String? = nil, services: [ServiceInfo]? = nil) {
            self.nextToken = nextToken
            self.services = services
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case services = "Services"
        }
    }

    public struct MetricInfo: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MetricDimensions", required: false, type: .map), 
            AWSShapeMember(label: "MetricName", required: false, type: .string), 
            AWSShapeMember(label: "MetricNamespace", required: false, type: .string), 
            AWSShapeMember(label: "MetricStatisticRecommendation", required: false, type: .string)
        ]

        /// A dimension is a name/value pair that is part of the identity of a metric. Every metric has specific characteristics that describe it, and you can think of dimensions as categories for those characteristics. These dimensions are part of the CloudWatch Metric Identity that measures usage against a particular service quota.
        public let metricDimensions: [String: String]?
        /// The name of the CloudWatch metric that measures usage of a service quota. This is a required field.
        public let metricName: String?
        /// The namespace of the metric. The namespace is a container for CloudWatch metrics. You can specify a name for the namespace when you create a metric.
        public let metricNamespace: String?
        /// Statistics are metric data aggregations over specified periods of time. This is the recommended statistic to use when comparing usage in the CloudWatch Metric against your Service Quota.
        public let metricStatisticRecommendation: String?

        public init(metricDimensions: [String: String]? = nil, metricName: String? = nil, metricNamespace: String? = nil, metricStatisticRecommendation: String? = nil) {
            self.metricDimensions = metricDimensions
            self.metricName = metricName
            self.metricNamespace = metricNamespace
            self.metricStatisticRecommendation = metricStatisticRecommendation
        }

        private enum CodingKeys: String, CodingKey {
            case metricDimensions = "MetricDimensions"
            case metricName = "MetricName"
            case metricNamespace = "MetricNamespace"
            case metricStatisticRecommendation = "MetricStatisticRecommendation"
        }
    }

    public enum PeriodUnit: String, CustomStringConvertible, Codable {
        case microsecond = "MICROSECOND"
        case millisecond = "MILLISECOND"
        case second = "SECOND"
        case minute = "MINUTE"
        case hour = "HOUR"
        case day = "DAY"
        case week = "WEEK"
        public var description: String { return self.rawValue }
    }

    public struct PutServiceQuotaIncreaseRequestIntoTemplateRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AwsRegion", required: true, type: .string), 
            AWSShapeMember(label: "DesiredValue", required: true, type: .double), 
            AWSShapeMember(label: "QuotaCode", required: true, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// Specifies the AWS Region for the quota. 
        public let awsRegion: String
        /// Specifies the new, increased value for the quota. 
        public let desiredValue: Double
        /// Specifies the service quota that you want to use.
        public let quotaCode: String
        /// Specifies the service that you want to use.
        public let serviceCode: String

        public init(awsRegion: String, desiredValue: Double, quotaCode: String, serviceCode: String) {
            self.awsRegion = awsRegion
            self.desiredValue = desiredValue
            self.quotaCode = quotaCode
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.awsRegion, name:"awsRegion", parent: name, max: 64)
            try validate(self.awsRegion, name:"awsRegion", parent: name, min: 1)
            try validate(self.awsRegion, name:"awsRegion", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.desiredValue, name:"desiredValue", parent: name, max: 10000000000)
            try validate(self.desiredValue, name:"desiredValue", parent: name, min: 0)
            try validate(self.quotaCode, name:"quotaCode", parent: name, max: 128)
            try validate(self.quotaCode, name:"quotaCode", parent: name, min: 1)
            try validate(self.quotaCode, name:"quotaCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case desiredValue = "DesiredValue"
            case quotaCode = "QuotaCode"
            case serviceCode = "ServiceCode"
        }
    }

    public struct PutServiceQuotaIncreaseRequestIntoTemplateResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ServiceQuotaIncreaseRequestInTemplate", required: false, type: .structure)
        ]

        /// A structure that contains information about one service quota increase request.
        public let serviceQuotaIncreaseRequestInTemplate: ServiceQuotaIncreaseRequestInTemplate?

        public init(serviceQuotaIncreaseRequestInTemplate: ServiceQuotaIncreaseRequestInTemplate? = nil) {
            self.serviceQuotaIncreaseRequestInTemplate = serviceQuotaIncreaseRequestInTemplate
        }

        private enum CodingKeys: String, CodingKey {
            case serviceQuotaIncreaseRequestInTemplate = "ServiceQuotaIncreaseRequestInTemplate"
        }
    }

    public struct QuotaPeriod: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "PeriodUnit", required: false, type: .enum), 
            AWSShapeMember(label: "PeriodValue", required: false, type: .integer)
        ]

        /// The time unit of a period.
        public let periodUnit: PeriodUnit?
        /// The value of a period.
        public let periodValue: Int?

        public init(periodUnit: PeriodUnit? = nil, periodValue: Int? = nil) {
            self.periodUnit = periodUnit
            self.periodValue = periodValue
        }

        private enum CodingKeys: String, CodingKey {
            case periodUnit = "PeriodUnit"
            case periodValue = "PeriodValue"
        }
    }

    public struct RequestServiceQuotaIncreaseRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DesiredValue", required: true, type: .double), 
            AWSShapeMember(label: "QuotaCode", required: true, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: true, type: .string)
        ]

        /// Specifies the value submitted in the service quota increase request. 
        public let desiredValue: Double
        /// Specifies the service quota that you want to use.
        public let quotaCode: String
        /// Specifies the service that you want to use.
        public let serviceCode: String

        public init(desiredValue: Double, quotaCode: String, serviceCode: String) {
            self.desiredValue = desiredValue
            self.quotaCode = quotaCode
            self.serviceCode = serviceCode
        }

        public func validate(name: String) throws {
            try validate(self.desiredValue, name:"desiredValue", parent: name, max: 10000000000)
            try validate(self.desiredValue, name:"desiredValue", parent: name, min: 0)
            try validate(self.quotaCode, name:"quotaCode", parent: name, max: 128)
            try validate(self.quotaCode, name:"quotaCode", parent: name, min: 1)
            try validate(self.quotaCode, name:"quotaCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,128}")
            try validate(self.serviceCode, name:"serviceCode", parent: name, max: 63)
            try validate(self.serviceCode, name:"serviceCode", parent: name, min: 1)
            try validate(self.serviceCode, name:"serviceCode", parent: name, pattern: "[a-zA-Z][a-zA-Z0-9-]{1,63}")
        }

        private enum CodingKeys: String, CodingKey {
            case desiredValue = "DesiredValue"
            case quotaCode = "QuotaCode"
            case serviceCode = "ServiceCode"
        }
    }

    public struct RequestServiceQuotaIncreaseResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "RequestedQuota", required: false, type: .structure)
        ]

        /// Returns a list of service quota requests.
        public let requestedQuota: RequestedServiceQuotaChange?

        public init(requestedQuota: RequestedServiceQuotaChange? = nil) {
            self.requestedQuota = requestedQuota
        }

        private enum CodingKeys: String, CodingKey {
            case requestedQuota = "RequestedQuota"
        }
    }

    public enum RequestStatus: String, CustomStringConvertible, Codable {
        case pending = "PENDING"
        case caseOpened = "CASE_OPENED"
        case approved = "APPROVED"
        case denied = "DENIED"
        case caseClosed = "CASE_CLOSED"
        public var description: String { return self.rawValue }
    }

    public struct RequestedServiceQuotaChange: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "CaseId", required: false, type: .string), 
            AWSShapeMember(label: "Created", required: false, type: .timestamp), 
            AWSShapeMember(label: "DesiredValue", required: false, type: .double), 
            AWSShapeMember(label: "GlobalQuota", required: false, type: .boolean), 
            AWSShapeMember(label: "Id", required: false, type: .string), 
            AWSShapeMember(label: "LastUpdated", required: false, type: .timestamp), 
            AWSShapeMember(label: "QuotaArn", required: false, type: .string), 
            AWSShapeMember(label: "QuotaCode", required: false, type: .string), 
            AWSShapeMember(label: "QuotaName", required: false, type: .string), 
            AWSShapeMember(label: "Requester", required: false, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: false, type: .string), 
            AWSShapeMember(label: "ServiceName", required: false, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum), 
            AWSShapeMember(label: "Unit", required: false, type: .string)
        ]

        /// The case Id for the service quota increase request.
        public let caseId: String?
        /// The date and time when the service quota increase request was received and the case Id was created. 
        public let created: TimeStamp?
        /// New increased value for the service quota.
        public let desiredValue: Double?
        /// Identifies if the quota is global.
        public let globalQuota: Bool?
        /// The unique identifier of a requested service quota change.
        public let id: String?
        /// The date and time of the most recent change in the service quota increase request.
        public let lastUpdated: TimeStamp?
        /// The Amazon Resource Name (ARN) of the service quota.
        public let quotaArn: String?
        /// Specifies the service quota that you want to use.
        public let quotaCode: String?
        /// Name of the service quota.
        public let quotaName: String?
        /// The IAM identity who submitted the service quota increase request.
        public let requester: String?
        /// Specifies the service that you want to use.
        public let serviceCode: String?
        /// The name of the AWS service specified in the increase request. 
        public let serviceName: String?
        /// State of the service quota increase request.
        public let status: RequestStatus?
        /// Specifies the unit used for the quota.
        public let unit: String?

        public init(caseId: String? = nil, created: TimeStamp? = nil, desiredValue: Double? = nil, globalQuota: Bool? = nil, id: String? = nil, lastUpdated: TimeStamp? = nil, quotaArn: String? = nil, quotaCode: String? = nil, quotaName: String? = nil, requester: String? = nil, serviceCode: String? = nil, serviceName: String? = nil, status: RequestStatus? = nil, unit: String? = nil) {
            self.caseId = caseId
            self.created = created
            self.desiredValue = desiredValue
            self.globalQuota = globalQuota
            self.id = id
            self.lastUpdated = lastUpdated
            self.quotaArn = quotaArn
            self.quotaCode = quotaCode
            self.quotaName = quotaName
            self.requester = requester
            self.serviceCode = serviceCode
            self.serviceName = serviceName
            self.status = status
            self.unit = unit
        }

        private enum CodingKeys: String, CodingKey {
            case caseId = "CaseId"
            case created = "Created"
            case desiredValue = "DesiredValue"
            case globalQuota = "GlobalQuota"
            case id = "Id"
            case lastUpdated = "LastUpdated"
            case quotaArn = "QuotaArn"
            case quotaCode = "QuotaCode"
            case quotaName = "QuotaName"
            case requester = "Requester"
            case serviceCode = "ServiceCode"
            case serviceName = "ServiceName"
            case status = "Status"
            case unit = "Unit"
        }
    }

    public struct ServiceInfo: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ServiceCode", required: false, type: .string), 
            AWSShapeMember(label: "ServiceName", required: false, type: .string)
        ]

        /// Specifies the service that you want to use.
        public let serviceCode: String?
        /// The name of the AWS service specified in the increase request. 
        public let serviceName: String?

        public init(serviceCode: String? = nil, serviceName: String? = nil) {
            self.serviceCode = serviceCode
            self.serviceName = serviceName
        }

        private enum CodingKeys: String, CodingKey {
            case serviceCode = "ServiceCode"
            case serviceName = "ServiceName"
        }
    }

    public struct ServiceQuota: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Adjustable", required: false, type: .boolean), 
            AWSShapeMember(label: "ErrorReason", required: false, type: .structure), 
            AWSShapeMember(label: "GlobalQuota", required: false, type: .boolean), 
            AWSShapeMember(label: "Period", required: false, type: .structure), 
            AWSShapeMember(label: "QuotaArn", required: false, type: .string), 
            AWSShapeMember(label: "QuotaCode", required: false, type: .string), 
            AWSShapeMember(label: "QuotaName", required: false, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: false, type: .string), 
            AWSShapeMember(label: "ServiceName", required: false, type: .string), 
            AWSShapeMember(label: "Unit", required: false, type: .string), 
            AWSShapeMember(label: "UsageMetric", required: false, type: .structure), 
            AWSShapeMember(label: "Value", required: false, type: .double)
        ]

        /// Specifies if the quota value can be increased.
        public let adjustable: Bool?
        /// Specifies the ErrorCode and ErrorMessage when success isn't achieved.
        public let errorReason: ErrorReason?
        /// Specifies if the quota is global.
        public let globalQuota: Bool?
        /// Identifies the unit and value of how time is measured.
        public let period: QuotaPeriod?
        /// The Amazon Resource Name (ARN) of the service quota.
        public let quotaArn: String?
        /// The code identifier for the service quota specified.
        public let quotaCode: String?
        /// The name identifier of the service quota.
        public let quotaName: String?
        /// Specifies the service that you want to use.
        public let serviceCode: String?
        /// The name of the AWS service specified in the increase request. 
        public let serviceName: String?
        /// The unit of measurement for the value of the service quota.
        public let unit: String?
        /// Specifies the details about the measurement. 
        public let usageMetric: MetricInfo?
        /// The value of service quota.
        public let value: Double?

        public init(adjustable: Bool? = nil, errorReason: ErrorReason? = nil, globalQuota: Bool? = nil, period: QuotaPeriod? = nil, quotaArn: String? = nil, quotaCode: String? = nil, quotaName: String? = nil, serviceCode: String? = nil, serviceName: String? = nil, unit: String? = nil, usageMetric: MetricInfo? = nil, value: Double? = nil) {
            self.adjustable = adjustable
            self.errorReason = errorReason
            self.globalQuota = globalQuota
            self.period = period
            self.quotaArn = quotaArn
            self.quotaCode = quotaCode
            self.quotaName = quotaName
            self.serviceCode = serviceCode
            self.serviceName = serviceName
            self.unit = unit
            self.usageMetric = usageMetric
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case adjustable = "Adjustable"
            case errorReason = "ErrorReason"
            case globalQuota = "GlobalQuota"
            case period = "Period"
            case quotaArn = "QuotaArn"
            case quotaCode = "QuotaCode"
            case quotaName = "QuotaName"
            case serviceCode = "ServiceCode"
            case serviceName = "ServiceName"
            case unit = "Unit"
            case usageMetric = "UsageMetric"
            case value = "Value"
        }
    }

    public struct ServiceQuotaIncreaseRequestInTemplate: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AwsRegion", required: false, type: .string), 
            AWSShapeMember(label: "DesiredValue", required: false, type: .double), 
            AWSShapeMember(label: "GlobalQuota", required: false, type: .boolean), 
            AWSShapeMember(label: "QuotaCode", required: false, type: .string), 
            AWSShapeMember(label: "QuotaName", required: false, type: .string), 
            AWSShapeMember(label: "ServiceCode", required: false, type: .string), 
            AWSShapeMember(label: "ServiceName", required: false, type: .string), 
            AWSShapeMember(label: "Unit", required: false, type: .string)
        ]

        /// The AWS Region where the increase request occurs.
        public let awsRegion: String?
        /// Identifies the new, increased value of the service quota in the increase request. 
        public let desiredValue: Double?
        /// Specifies if the quota is a global quota.
        public let globalQuota: Bool?
        /// The code identifier for the service quota specified in the increase request.
        public let quotaCode: String?
        /// The name of the service quota in the increase request.
        public let quotaName: String?
        /// The code identifier for the AWS service specified in the increase request.
        public let serviceCode: String?
        /// The name of the AWS service specified in the increase request. 
        public let serviceName: String?
        /// The unit of measure for the increase request.
        public let unit: String?

        public init(awsRegion: String? = nil, desiredValue: Double? = nil, globalQuota: Bool? = nil, quotaCode: String? = nil, quotaName: String? = nil, serviceCode: String? = nil, serviceName: String? = nil, unit: String? = nil) {
            self.awsRegion = awsRegion
            self.desiredValue = desiredValue
            self.globalQuota = globalQuota
            self.quotaCode = quotaCode
            self.quotaName = quotaName
            self.serviceCode = serviceCode
            self.serviceName = serviceName
            self.unit = unit
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case desiredValue = "DesiredValue"
            case globalQuota = "GlobalQuota"
            case quotaCode = "QuotaCode"
            case quotaName = "QuotaName"
            case serviceCode = "ServiceCode"
            case serviceName = "ServiceName"
            case unit = "Unit"
        }
    }

    public enum ServiceQuotaTemplateAssociationStatus: String, CustomStringConvertible, Codable {
        case associated = "ASSOCIATED"
        case disassociated = "DISASSOCIATED"
        public var description: String { return self.rawValue }
    }
}
