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

import Foundation
import AWSSDKSwiftCore

extension ServerlessApplicationRepository {

    public struct Application: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: true, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: true, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "LicenseUrl", location: .body(locationName: "licenseUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: true, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SpdxLicenseId", location: .body(locationName: "spdxLicenseId"), required: false, type: .string), 
            AWSShapeMember(label: "Version", location: .body(locationName: "version"), required: false, type: .structure)
        ]
        /// The application Amazon Resource Name (ARN).
        public let applicationId: String
        /// The name of the author publishing the app.Minimum length=1. Maximum length=127.Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";
        public let author: String
        /// The date and time this resource was created.
        public let creationTime: String?
        /// The description of the application.Minimum length=1. Maximum length=256
        public let description: String
        /// A URL with more information about the application, for example the location of your GitHub repository for the application.
        public let homePageUrl: String?
        /// Labels to improve discovery of apps in search results.Minimum length=1. Maximum length=127. Maximum number of labels: 10Pattern: "^[a-zA-Z0-9+\\-_:\\/@]+$";
        public let labels: [String]?
        /// A link to a license file of the app that matches the spdxLicenseID value of your application.Maximum size 5 MB
        public let licenseUrl: String?
        /// The name of the application.Minimum length=1. Maximum length=140Pattern: "[a-zA-Z0-9\\-]+";
        public let name: String
        /// A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.Maximum size 5 MB
        public let readmeUrl: String?
        /// A valid identifier from https://spdx.org/licenses/.
        public let spdxLicenseId: String?
        /// Version information about the application.
        public let version: Version?

        public init(applicationId: String, author: String, creationTime: String? = nil, description: String, homePageUrl: String? = nil, labels: [String]? = nil, licenseUrl: String? = nil, name: String, readmeUrl: String? = nil, spdxLicenseId: String? = nil, version: Version? = nil) {
            self.applicationId = applicationId
            self.author = author
            self.creationTime = creationTime
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.licenseUrl = licenseUrl
            self.name = name
            self.readmeUrl = readmeUrl
            self.spdxLicenseId = spdxLicenseId
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case author = "author"
            case creationTime = "creationTime"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case licenseUrl = "licenseUrl"
            case name = "name"
            case readmeUrl = "readmeUrl"
            case spdxLicenseId = "spdxLicenseId"
            case version = "version"
        }
    }

    public struct ApplicationDependencyPage: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Dependencies", location: .body(locationName: "dependencies"), required: true, type: .list), 
            AWSShapeMember(label: "NextToken", location: .body(locationName: "nextToken"), required: false, type: .string)
        ]
        /// An array of application summaries nested in the application.
        public let dependencies: [ApplicationDependencySummary]
        /// The token to request the next page of results.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case dependencies = "dependencies"
            case nextToken = "nextToken"
        }
    }

    public struct ApplicationDependencySummary: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: true, type: .string)
        ]
        /// The Amazon Resource Name (ARN) of the nested application.
        public let applicationId: String
        /// The semantic version of the nested application.
        public let semanticVersion: String

        public init(applicationId: String, semanticVersion: String) {
            self.applicationId = applicationId
            self.semanticVersion = semanticVersion
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case semanticVersion = "semanticVersion"
        }
    }

    public struct ApplicationPage: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Applications", location: .body(locationName: "applications"), required: true, type: .list), 
            AWSShapeMember(label: "NextToken", location: .body(locationName: "nextToken"), required: false, type: .string)
        ]
        /// An array of application summaries.
        public let applications: [ApplicationSummary]
        /// The token to request the next page of results.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case applications = "applications"
            case nextToken = "nextToken"
        }
    }

    public struct ApplicationPolicy: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Statements", location: .body(locationName: "statements"), required: true, type: .list)
        ]
        /// An array of policy statements applied to the application.
        public let statements: [ApplicationPolicyStatement]

        public init(statements: [ApplicationPolicyStatement]) {
            self.statements = statements
        }

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

    public struct ApplicationPolicyStatement: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Actions", location: .body(locationName: "actions"), required: true, type: .list), 
            AWSShapeMember(label: "Principals", location: .body(locationName: "principals"), required: true, type: .list), 
            AWSShapeMember(label: "StatementId", location: .body(locationName: "statementId"), required: false, type: .string)
        ]
        /// For the list of actions supported for this operation, see Application 
        ///  Permissions.
        public let actions: [String]
        /// An array of AWS account IDs, or * to make the application public.
        public let principals: [String]
        /// A unique ID for the statement.
        public let statementId: String?

        public init(actions: [String], principals: [String], statementId: String? = nil) {
            self.actions = actions
            self.principals = principals
            self.statementId = statementId
        }

        private enum CodingKeys: String, CodingKey {
            case actions = "actions"
            case principals = "principals"
            case statementId = "statementId"
        }
    }

    public struct ApplicationSummary: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: true, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: true, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: true, type: .string), 
            AWSShapeMember(label: "SpdxLicenseId", location: .body(locationName: "spdxLicenseId"), required: false, type: .string)
        ]
        /// The application Amazon Resource Name (ARN).
        public let applicationId: String
        /// The name of the author publishing the app.Minimum length=1. Maximum length=127.Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";
        public let author: String
        /// The date and time this resource was created.
        public let creationTime: String?
        /// The description of the application.Minimum length=1. Maximum length=256
        public let description: String
        /// A URL with more information about the application, for example the location of your GitHub repository for the application.
        public let homePageUrl: String?
        /// Labels to improve discovery of apps in search results.Minimum length=1. Maximum length=127. Maximum number of labels: 10Pattern: "^[a-zA-Z0-9+\\-_:\\/@]+$";
        public let labels: [String]?
        /// The name of the application.Minimum length=1. Maximum length=140Pattern: "[a-zA-Z0-9\\-]+";
        public let name: String
        /// A valid identifier from https://spdx.org/licenses/.
        public let spdxLicenseId: String?

        public init(applicationId: String, author: String, creationTime: String? = nil, description: String, homePageUrl: String? = nil, labels: [String]? = nil, name: String, spdxLicenseId: String? = nil) {
            self.applicationId = applicationId
            self.author = author
            self.creationTime = creationTime
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.name = name
            self.spdxLicenseId = spdxLicenseId
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case author = "author"
            case creationTime = "creationTime"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case name = "name"
            case spdxLicenseId = "spdxLicenseId"
        }
    }

    public struct ApplicationVersionPage: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", location: .body(locationName: "nextToken"), required: false, type: .string), 
            AWSShapeMember(label: "Versions", location: .body(locationName: "versions"), required: true, type: .list)
        ]
        /// The token to request the next page of results.
        public let nextToken: String?
        /// An array of version summaries for the application.
        public let versions: [VersionSummary]

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case versions = "versions"
        }
    }

    public enum Capability: String, CustomStringConvertible, Codable {
        case capabilityIam = "CAPABILITY_IAM"
        case capabilityNamedIam = "CAPABILITY_NAMED_IAM"
        case capabilityAutoExpand = "CAPABILITY_AUTO_EXPAND"
        case capabilityResourcePolicy = "CAPABILITY_RESOURCE_POLICY"
        public var description: String { return self.rawValue }
    }

    public struct ChangeSetDetails: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "ChangeSetId", location: .body(locationName: "changeSetId"), required: true, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: true, type: .string), 
            AWSShapeMember(label: "StackId", location: .body(locationName: "stackId"), required: true, type: .string)
        ]
        /// The application Amazon Resource Name (ARN).
        public let applicationId: String
        /// The Amazon Resource Name (ARN) of the change set.Length constraints: Minimum length of 1.Pattern: ARN:[-a-zA-Z0-9:/]*
        public let changeSetId: String
        /// The semantic version of the application:
        ///  https://semver.org/
        ///  
        public let semanticVersion: String
        /// The unique ID of the stack.
        public let stackId: String

        public init(applicationId: String, changeSetId: String, semanticVersion: String, stackId: String) {
            self.applicationId = applicationId
            self.changeSetId = changeSetId
            self.semanticVersion = semanticVersion
            self.stackId = stackId
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case changeSetId = "changeSetId"
            case semanticVersion = "semanticVersion"
            case stackId = "stackId"
        }
    }

    public struct CreateApplicationInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: true, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: true, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "LicenseBody", location: .body(locationName: "licenseBody"), required: false, type: .string), 
            AWSShapeMember(label: "LicenseUrl", location: .body(locationName: "licenseUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: true, type: .string), 
            AWSShapeMember(label: "ReadmeBody", location: .body(locationName: "readmeBody"), required: false, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeArchiveUrl", location: .body(locationName: "sourceCodeArchiveUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeUrl", location: .body(locationName: "sourceCodeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SpdxLicenseId", location: .body(locationName: "spdxLicenseId"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateBody", location: .body(locationName: "templateBody"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: false, type: .string)
        ]
        /// The name of the author publishing the app.Minimum length=1. Maximum length=127.Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";
        public let author: String
        /// The description of the application.Minimum length=1. Maximum length=256
        public let description: String
        /// A URL with more information about the application, for example the location of your GitHub repository for the application.
        public let homePageUrl: String?
        /// Labels to improve discovery of apps in search results.Minimum length=1. Maximum length=127. Maximum number of labels: 10Pattern: "^[a-zA-Z0-9+\\-_:\\/@]+$";
        public let labels: [String]?
        /// A local text file that contains the license of the app that matches the spdxLicenseID value of your application.
        ///  The file has the format file://&lt;path>/&lt;filename>.Maximum size 5 MBYou can specify only one of licenseBody and licenseUrl; otherwise, an error results.
        public let licenseBody: String?
        /// A link to the S3 object that contains the license of the app that matches the spdxLicenseID value of your application.Maximum size 5 MBYou can specify only one of licenseBody and licenseUrl; otherwise, an error results.
        public let licenseUrl: String?
        /// The name of the application that you want to publish.Minimum length=1. Maximum length=140Pattern: "[a-zA-Z0-9\\-]+";
        public let name: String
        /// A local text readme file in Markdown language that contains a more detailed description of the application and how it works.
        ///  The file has the format file://&lt;path>/&lt;filename>.Maximum size 5 MBYou can specify only one of readmeBody and readmeUrl; otherwise, an error results.
        public let readmeBody: String?
        /// A link to the S3 object in Markdown language that contains a more detailed description of the application and how it works.Maximum size 5 MBYou can specify only one of readmeBody and readmeUrl; otherwise, an error results.
        public let readmeUrl: String?
        /// The semantic version of the application:
        ///  https://semver.org/
        ///  
        public let semanticVersion: String?
        /// A link to the S3 object that contains the ZIP archive of the source code for this version of your application.Maximum size 50 MB
        public let sourceCodeArchiveUrl: String?
        /// A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.
        public let sourceCodeUrl: String?
        /// A valid identifier from https://spdx.org/licenses/.
        public let spdxLicenseId: String?
        /// The local raw packaged AWS SAM template file of your application.
        ///  The file has the format file://&lt;path>/&lt;filename>.You can specify only one of templateBody and templateUrl; otherwise an error results.
        public let templateBody: String?
        /// A link to the S3 object containing the packaged AWS SAM template of your application.You can specify only one of templateBody and templateUrl; otherwise an error results.
        public let templateUrl: String?

        public init(author: String, description: String, homePageUrl: String? = nil, labels: [String]? = nil, licenseBody: String? = nil, licenseUrl: String? = nil, name: String, readmeBody: String? = nil, readmeUrl: String? = nil, semanticVersion: String? = nil, sourceCodeArchiveUrl: String? = nil, sourceCodeUrl: String? = nil, spdxLicenseId: String? = nil, templateBody: String? = nil, templateUrl: String? = nil) {
            self.author = author
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.licenseBody = licenseBody
            self.licenseUrl = licenseUrl
            self.name = name
            self.readmeBody = readmeBody
            self.readmeUrl = readmeUrl
            self.semanticVersion = semanticVersion
            self.sourceCodeArchiveUrl = sourceCodeArchiveUrl
            self.sourceCodeUrl = sourceCodeUrl
            self.spdxLicenseId = spdxLicenseId
            self.templateBody = templateBody
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case author = "author"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case licenseBody = "licenseBody"
            case licenseUrl = "licenseUrl"
            case name = "name"
            case readmeBody = "readmeBody"
            case readmeUrl = "readmeUrl"
            case semanticVersion = "semanticVersion"
            case sourceCodeArchiveUrl = "sourceCodeArchiveUrl"
            case sourceCodeUrl = "sourceCodeUrl"
            case spdxLicenseId = "spdxLicenseId"
            case templateBody = "templateBody"
            case templateUrl = "templateUrl"
        }
    }

    public struct CreateApplicationRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: true, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: true, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "LicenseBody", location: .body(locationName: "licenseBody"), required: false, type: .string), 
            AWSShapeMember(label: "LicenseUrl", location: .body(locationName: "licenseUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: true, type: .string), 
            AWSShapeMember(label: "ReadmeBody", location: .body(locationName: "readmeBody"), required: false, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeArchiveUrl", location: .body(locationName: "sourceCodeArchiveUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeUrl", location: .body(locationName: "sourceCodeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SpdxLicenseId", location: .body(locationName: "spdxLicenseId"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateBody", location: .body(locationName: "templateBody"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: false, type: .string)
        ]
        public let author: String
        public let description: String
        public let homePageUrl: String?
        public let labels: [String]?
        public let licenseBody: String?
        public let licenseUrl: String?
        public let name: String
        public let readmeBody: String?
        public let readmeUrl: String?
        public let semanticVersion: String?
        public let sourceCodeArchiveUrl: String?
        public let sourceCodeUrl: String?
        public let spdxLicenseId: String?
        public let templateBody: String?
        public let templateUrl: String?

        public init(author: String, description: String, homePageUrl: String? = nil, labels: [String]? = nil, licenseBody: String? = nil, licenseUrl: String? = nil, name: String, readmeBody: String? = nil, readmeUrl: String? = nil, semanticVersion: String? = nil, sourceCodeArchiveUrl: String? = nil, sourceCodeUrl: String? = nil, spdxLicenseId: String? = nil, templateBody: String? = nil, templateUrl: String? = nil) {
            self.author = author
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.licenseBody = licenseBody
            self.licenseUrl = licenseUrl
            self.name = name
            self.readmeBody = readmeBody
            self.readmeUrl = readmeUrl
            self.semanticVersion = semanticVersion
            self.sourceCodeArchiveUrl = sourceCodeArchiveUrl
            self.sourceCodeUrl = sourceCodeUrl
            self.spdxLicenseId = spdxLicenseId
            self.templateBody = templateBody
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case author = "author"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case licenseBody = "licenseBody"
            case licenseUrl = "licenseUrl"
            case name = "name"
            case readmeBody = "readmeBody"
            case readmeUrl = "readmeUrl"
            case semanticVersion = "semanticVersion"
            case sourceCodeArchiveUrl = "sourceCodeArchiveUrl"
            case sourceCodeUrl = "sourceCodeUrl"
            case spdxLicenseId = "spdxLicenseId"
            case templateBody = "templateBody"
            case templateUrl = "templateUrl"
        }
    }

    public struct CreateApplicationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: false, type: .string), 
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: false, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "LicenseUrl", location: .body(locationName: "licenseUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: false, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SpdxLicenseId", location: .body(locationName: "spdxLicenseId"), required: false, type: .string), 
            AWSShapeMember(label: "Version", location: .body(locationName: "version"), required: false, type: .structure)
        ]
        public let applicationId: String?
        public let author: String?
        public let creationTime: String?
        public let description: String?
        public let homePageUrl: String?
        public let labels: [String]?
        public let licenseUrl: String?
        public let name: String?
        public let readmeUrl: String?
        public let spdxLicenseId: String?
        public let version: Version?

        public init(applicationId: String? = nil, author: String? = nil, creationTime: String? = nil, description: String? = nil, homePageUrl: String? = nil, labels: [String]? = nil, licenseUrl: String? = nil, name: String? = nil, readmeUrl: String? = nil, spdxLicenseId: String? = nil, version: Version? = nil) {
            self.applicationId = applicationId
            self.author = author
            self.creationTime = creationTime
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.licenseUrl = licenseUrl
            self.name = name
            self.readmeUrl = readmeUrl
            self.spdxLicenseId = spdxLicenseId
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case author = "author"
            case creationTime = "creationTime"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case licenseUrl = "licenseUrl"
            case name = "name"
            case readmeUrl = "readmeUrl"
            case spdxLicenseId = "spdxLicenseId"
            case version = "version"
        }
    }

    public struct CreateApplicationVersionInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "SourceCodeArchiveUrl", location: .body(locationName: "sourceCodeArchiveUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeUrl", location: .body(locationName: "sourceCodeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateBody", location: .body(locationName: "templateBody"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: false, type: .string)
        ]
        /// A link to the S3 object that contains the ZIP archive of the source code for this version of your application.Maximum size 50 MB
        public let sourceCodeArchiveUrl: String?
        /// A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.
        public let sourceCodeUrl: String?
        /// The raw packaged AWS SAM template of your application.
        public let templateBody: String?
        /// A link to the packaged AWS SAM template of your application.
        public let templateUrl: String?

        public init(sourceCodeArchiveUrl: String? = nil, sourceCodeUrl: String? = nil, templateBody: String? = nil, templateUrl: String? = nil) {
            self.sourceCodeArchiveUrl = sourceCodeArchiveUrl
            self.sourceCodeUrl = sourceCodeUrl
            self.templateBody = templateBody
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case sourceCodeArchiveUrl = "sourceCodeArchiveUrl"
            case sourceCodeUrl = "sourceCodeUrl"
            case templateBody = "templateBody"
            case templateUrl = "templateUrl"
        }
    }

    public struct CreateApplicationVersionRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .uri(locationName: "semanticVersion"), required: true, type: .string), 
            AWSShapeMember(label: "SourceCodeArchiveUrl", location: .body(locationName: "sourceCodeArchiveUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeUrl", location: .body(locationName: "sourceCodeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateBody", location: .body(locationName: "templateBody"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: false, type: .string)
        ]
        public let applicationId: String
        public let semanticVersion: String
        public let sourceCodeArchiveUrl: String?
        public let sourceCodeUrl: String?
        public let templateBody: String?
        public let templateUrl: String?

        public init(applicationId: String, semanticVersion: String, sourceCodeArchiveUrl: String? = nil, sourceCodeUrl: String? = nil, templateBody: String? = nil, templateUrl: String? = nil) {
            self.applicationId = applicationId
            self.semanticVersion = semanticVersion
            self.sourceCodeArchiveUrl = sourceCodeArchiveUrl
            self.sourceCodeUrl = sourceCodeUrl
            self.templateBody = templateBody
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case semanticVersion = "semanticVersion"
            case sourceCodeArchiveUrl = "sourceCodeArchiveUrl"
            case sourceCodeUrl = "sourceCodeUrl"
            case templateBody = "templateBody"
            case templateUrl = "templateUrl"
        }
    }

    public struct CreateApplicationVersionResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: false, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "ParameterDefinitions", location: .body(locationName: "parameterDefinitions"), required: false, type: .list), 
            AWSShapeMember(label: "RequiredCapabilities", location: .body(locationName: "requiredCapabilities"), required: false, type: .list), 
            AWSShapeMember(label: "ResourcesSupported", location: .body(locationName: "resourcesSupported"), required: false, type: .boolean), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeArchiveUrl", location: .body(locationName: "sourceCodeArchiveUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeUrl", location: .body(locationName: "sourceCodeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: false, type: .string)
        ]
        public let applicationId: String?
        public let creationTime: String?
        public let parameterDefinitions: [ParameterDefinition]?
        public let requiredCapabilities: [Capability]?
        public let resourcesSupported: Bool?
        public let semanticVersion: String?
        public let sourceCodeArchiveUrl: String?
        public let sourceCodeUrl: String?
        public let templateUrl: String?

        public init(applicationId: String? = nil, creationTime: String? = nil, parameterDefinitions: [ParameterDefinition]? = nil, requiredCapabilities: [Capability]? = nil, resourcesSupported: Bool? = nil, semanticVersion: String? = nil, sourceCodeArchiveUrl: String? = nil, sourceCodeUrl: String? = nil, templateUrl: String? = nil) {
            self.applicationId = applicationId
            self.creationTime = creationTime
            self.parameterDefinitions = parameterDefinitions
            self.requiredCapabilities = requiredCapabilities
            self.resourcesSupported = resourcesSupported
            self.semanticVersion = semanticVersion
            self.sourceCodeArchiveUrl = sourceCodeArchiveUrl
            self.sourceCodeUrl = sourceCodeUrl
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case creationTime = "creationTime"
            case parameterDefinitions = "parameterDefinitions"
            case requiredCapabilities = "requiredCapabilities"
            case resourcesSupported = "resourcesSupported"
            case semanticVersion = "semanticVersion"
            case sourceCodeArchiveUrl = "sourceCodeArchiveUrl"
            case sourceCodeUrl = "sourceCodeUrl"
            case templateUrl = "templateUrl"
        }
    }

    public struct CreateCloudFormationChangeSetInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Capabilities", location: .body(locationName: "capabilities"), required: false, type: .list), 
            AWSShapeMember(label: "ChangeSetName", location: .body(locationName: "changeSetName"), required: false, type: .string), 
            AWSShapeMember(label: "ClientToken", location: .body(locationName: "clientToken"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "NotificationArns", location: .body(locationName: "notificationArns"), required: false, type: .list), 
            AWSShapeMember(label: "ParameterOverrides", location: .body(locationName: "parameterOverrides"), required: false, type: .list), 
            AWSShapeMember(label: "ResourceTypes", location: .body(locationName: "resourceTypes"), required: false, type: .list), 
            AWSShapeMember(label: "RollbackConfiguration", location: .body(locationName: "rollbackConfiguration"), required: false, type: .structure), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "StackName", location: .body(locationName: "stackName"), required: true, type: .string), 
            AWSShapeMember(label: "Tags", location: .body(locationName: "tags"), required: false, type: .list), 
            AWSShapeMember(label: "TemplateId", location: .body(locationName: "templateId"), required: false, type: .string)
        ]
        /// A list of values that you must specify before you can deploy certain applications.
        ///  Some applications might include resources that can affect permissions in your AWS
        ///  account, for example, by creating new AWS Identity and Access Management (IAM) users.
        ///  For those applications, you must explicitly acknowledge their capabilities by
        ///  specifying this parameter.The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,
        ///  CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.The following resources require you to specify CAPABILITY_IAM or
        ///  CAPABILITY_NAMED_IAM:
        ///  AWS::IAM::Group,
        ///  AWS::IAM::InstanceProfile,
        ///  AWS::IAM::Policy, and
        ///  AWS::IAM::Role.
        ///  If the application contains IAM resources, you can specify either CAPABILITY_IAM
        ///  or CAPABILITY_NAMED_IAM. If the application contains IAM resources
        ///  with custom names, you must specify CAPABILITY_NAMED_IAM.The following resources require you to specify CAPABILITY_RESOURCE_POLICY:
        ///  AWS::Lambda::Permission,
        ///  AWS::IAM:Policy,
        ///  AWS::ApplicationAutoScaling::ScalingPolicy,
        ///  AWS::S3::BucketPolicy,
        ///  AWS::SQS::QueuePolicy, and
        ///  AWS::SNS:TopicPolicy.Applications that contain one or more nested applications require you to specify
        ///  CAPABILITY_AUTO_EXPAND.If your application template contains any of the above resources, we recommend that you review
        ///  all permissions associated with the application before deploying. If you don't specify
        ///  this parameter for an application that requires capabilities, the call will fail.
        public let capabilities: [String]?
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let changeSetName: String?
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let clientToken: String?
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let description: String?
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let notificationArns: [String]?
        /// A list of parameter values for the parameters of the application.
        public let parameterOverrides: [ParameterValue]?
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let resourceTypes: [String]?
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let rollbackConfiguration: RollbackConfiguration?
        /// The semantic version of the application:
        ///  https://semver.org/
        ///  
        public let semanticVersion: String?
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let stackName: String
        /// This property corresponds to the parameter of the same name for the AWS CloudFormation CreateChangeSet
        ///   API.
        public let tags: [Tag]?
        /// The UUID returned by CreateCloudFormationTemplate.Pattern: [0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}
        public let templateId: String?

        public init(capabilities: [String]? = nil, changeSetName: String? = nil, clientToken: String? = nil, description: String? = nil, notificationArns: [String]? = nil, parameterOverrides: [ParameterValue]? = nil, resourceTypes: [String]? = nil, rollbackConfiguration: RollbackConfiguration? = nil, semanticVersion: String? = nil, stackName: String, tags: [Tag]? = nil, templateId: String? = nil) {
            self.capabilities = capabilities
            self.changeSetName = changeSetName
            self.clientToken = clientToken
            self.description = description
            self.notificationArns = notificationArns
            self.parameterOverrides = parameterOverrides
            self.resourceTypes = resourceTypes
            self.rollbackConfiguration = rollbackConfiguration
            self.semanticVersion = semanticVersion
            self.stackName = stackName
            self.tags = tags
            self.templateId = templateId
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "capabilities"
            case changeSetName = "changeSetName"
            case clientToken = "clientToken"
            case description = "description"
            case notificationArns = "notificationArns"
            case parameterOverrides = "parameterOverrides"
            case resourceTypes = "resourceTypes"
            case rollbackConfiguration = "rollbackConfiguration"
            case semanticVersion = "semanticVersion"
            case stackName = "stackName"
            case tags = "tags"
            case templateId = "templateId"
        }
    }

    public struct CreateCloudFormationChangeSetRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "Capabilities", location: .body(locationName: "capabilities"), required: false, type: .list), 
            AWSShapeMember(label: "ChangeSetName", location: .body(locationName: "changeSetName"), required: false, type: .string), 
            AWSShapeMember(label: "ClientToken", location: .body(locationName: "clientToken"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "NotificationArns", location: .body(locationName: "notificationArns"), required: false, type: .list), 
            AWSShapeMember(label: "ParameterOverrides", location: .body(locationName: "parameterOverrides"), required: false, type: .list), 
            AWSShapeMember(label: "ResourceTypes", location: .body(locationName: "resourceTypes"), required: false, type: .list), 
            AWSShapeMember(label: "RollbackConfiguration", location: .body(locationName: "rollbackConfiguration"), required: false, type: .structure), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "StackName", location: .body(locationName: "stackName"), required: true, type: .string), 
            AWSShapeMember(label: "Tags", location: .body(locationName: "tags"), required: false, type: .list), 
            AWSShapeMember(label: "TemplateId", location: .body(locationName: "templateId"), required: false, type: .string)
        ]
        public let applicationId: String
        public let capabilities: [String]?
        public let changeSetName: String?
        public let clientToken: String?
        public let description: String?
        public let notificationArns: [String]?
        public let parameterOverrides: [ParameterValue]?
        public let resourceTypes: [String]?
        public let rollbackConfiguration: RollbackConfiguration?
        public let semanticVersion: String?
        public let stackName: String
        public let tags: [Tag]?
        public let templateId: String?

        public init(applicationId: String, capabilities: [String]? = nil, changeSetName: String? = nil, clientToken: String? = nil, description: String? = nil, notificationArns: [String]? = nil, parameterOverrides: [ParameterValue]? = nil, resourceTypes: [String]? = nil, rollbackConfiguration: RollbackConfiguration? = nil, semanticVersion: String? = nil, stackName: String, tags: [Tag]? = nil, templateId: String? = nil) {
            self.applicationId = applicationId
            self.capabilities = capabilities
            self.changeSetName = changeSetName
            self.clientToken = clientToken
            self.description = description
            self.notificationArns = notificationArns
            self.parameterOverrides = parameterOverrides
            self.resourceTypes = resourceTypes
            self.rollbackConfiguration = rollbackConfiguration
            self.semanticVersion = semanticVersion
            self.stackName = stackName
            self.tags = tags
            self.templateId = templateId
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case capabilities = "capabilities"
            case changeSetName = "changeSetName"
            case clientToken = "clientToken"
            case description = "description"
            case notificationArns = "notificationArns"
            case parameterOverrides = "parameterOverrides"
            case resourceTypes = "resourceTypes"
            case rollbackConfiguration = "rollbackConfiguration"
            case semanticVersion = "semanticVersion"
            case stackName = "stackName"
            case tags = "tags"
            case templateId = "templateId"
        }
    }

    public struct CreateCloudFormationChangeSetResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: false, type: .string), 
            AWSShapeMember(label: "ChangeSetId", location: .body(locationName: "changeSetId"), required: false, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "StackId", location: .body(locationName: "stackId"), required: false, type: .string)
        ]
        public let applicationId: String?
        public let changeSetId: String?
        public let semanticVersion: String?
        public let stackId: String?

        public init(applicationId: String? = nil, changeSetId: String? = nil, semanticVersion: String? = nil, stackId: String? = nil) {
            self.applicationId = applicationId
            self.changeSetId = changeSetId
            self.semanticVersion = semanticVersion
            self.stackId = stackId
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case changeSetId = "changeSetId"
            case semanticVersion = "semanticVersion"
            case stackId = "stackId"
        }
    }

    public struct CreateCloudFormationTemplateRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string)
        ]
        public let applicationId: String
        public let semanticVersion: String?

        public init(applicationId: String, semanticVersion: String? = nil) {
            self.applicationId = applicationId
            self.semanticVersion = semanticVersion
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case semanticVersion = "semanticVersion"
        }
    }

    public struct CreateCloudFormationTemplateResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: false, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "ExpirationTime", location: .body(locationName: "expirationTime"), required: false, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "Status", location: .body(locationName: "status"), required: false, type: .enum), 
            AWSShapeMember(label: "TemplateId", location: .body(locationName: "templateId"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: false, type: .string)
        ]
        public let applicationId: String?
        public let creationTime: String?
        public let expirationTime: String?
        public let semanticVersion: String?
        public let status: Status?
        public let templateId: String?
        public let templateUrl: String?

        public init(applicationId: String? = nil, creationTime: String? = nil, expirationTime: String? = nil, semanticVersion: String? = nil, status: Status? = nil, templateId: String? = nil, templateUrl: String? = nil) {
            self.applicationId = applicationId
            self.creationTime = creationTime
            self.expirationTime = expirationTime
            self.semanticVersion = semanticVersion
            self.status = status
            self.templateId = templateId
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case creationTime = "creationTime"
            case expirationTime = "expirationTime"
            case semanticVersion = "semanticVersion"
            case status = "status"
            case templateId = "templateId"
            case templateUrl = "templateUrl"
        }
    }

    public struct DeleteApplicationRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string)
        ]
        public let applicationId: String

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

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

    public struct GetApplicationPolicyRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string)
        ]
        public let applicationId: String

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

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

    public struct GetApplicationPolicyResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Statements", location: .body(locationName: "statements"), required: false, type: .list)
        ]
        public let statements: [ApplicationPolicyStatement]?

        public init(statements: [ApplicationPolicyStatement]? = nil) {
            self.statements = statements
        }

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

    public struct GetApplicationRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .querystring(locationName: "semanticVersion"), required: false, type: .string)
        ]
        public let applicationId: String
        public let semanticVersion: String?

        public init(applicationId: String, semanticVersion: String? = nil) {
            self.applicationId = applicationId
            self.semanticVersion = semanticVersion
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case semanticVersion = "semanticVersion"
        }
    }

    public struct GetApplicationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: false, type: .string), 
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: false, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "LicenseUrl", location: .body(locationName: "licenseUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: false, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SpdxLicenseId", location: .body(locationName: "spdxLicenseId"), required: false, type: .string), 
            AWSShapeMember(label: "Version", location: .body(locationName: "version"), required: false, type: .structure)
        ]
        public let applicationId: String?
        public let author: String?
        public let creationTime: String?
        public let description: String?
        public let homePageUrl: String?
        public let labels: [String]?
        public let licenseUrl: String?
        public let name: String?
        public let readmeUrl: String?
        public let spdxLicenseId: String?
        public let version: Version?

        public init(applicationId: String? = nil, author: String? = nil, creationTime: String? = nil, description: String? = nil, homePageUrl: String? = nil, labels: [String]? = nil, licenseUrl: String? = nil, name: String? = nil, readmeUrl: String? = nil, spdxLicenseId: String? = nil, version: Version? = nil) {
            self.applicationId = applicationId
            self.author = author
            self.creationTime = creationTime
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.licenseUrl = licenseUrl
            self.name = name
            self.readmeUrl = readmeUrl
            self.spdxLicenseId = spdxLicenseId
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case author = "author"
            case creationTime = "creationTime"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case licenseUrl = "licenseUrl"
            case name = "name"
            case readmeUrl = "readmeUrl"
            case spdxLicenseId = "spdxLicenseId"
            case version = "version"
        }
    }

    public struct GetCloudFormationTemplateRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "TemplateId", location: .uri(locationName: "templateId"), required: true, type: .string)
        ]
        public let applicationId: String
        public let templateId: String

        public init(applicationId: String, templateId: String) {
            self.applicationId = applicationId
            self.templateId = templateId
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case templateId = "templateId"
        }
    }

    public struct GetCloudFormationTemplateResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: false, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "ExpirationTime", location: .body(locationName: "expirationTime"), required: false, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: false, type: .string), 
            AWSShapeMember(label: "Status", location: .body(locationName: "status"), required: false, type: .enum), 
            AWSShapeMember(label: "TemplateId", location: .body(locationName: "templateId"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: false, type: .string)
        ]
        public let applicationId: String?
        public let creationTime: String?
        public let expirationTime: String?
        public let semanticVersion: String?
        public let status: Status?
        public let templateId: String?
        public let templateUrl: String?

        public init(applicationId: String? = nil, creationTime: String? = nil, expirationTime: String? = nil, semanticVersion: String? = nil, status: Status? = nil, templateId: String? = nil, templateUrl: String? = nil) {
            self.applicationId = applicationId
            self.creationTime = creationTime
            self.expirationTime = expirationTime
            self.semanticVersion = semanticVersion
            self.status = status
            self.templateId = templateId
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case creationTime = "creationTime"
            case expirationTime = "expirationTime"
            case semanticVersion = "semanticVersion"
            case status = "status"
            case templateId = "templateId"
            case templateUrl = "templateUrl"
        }
    }

    public struct ListApplicationDependenciesRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "MaxItems", location: .querystring(locationName: "maxItems"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .querystring(locationName: "semanticVersion"), required: false, type: .string)
        ]
        public let applicationId: String
        public let maxItems: Int32?
        public let nextToken: String?
        public let semanticVersion: String?

        public init(applicationId: String, maxItems: Int32? = nil, nextToken: String? = nil, semanticVersion: String? = nil) {
            self.applicationId = applicationId
            self.maxItems = maxItems
            self.nextToken = nextToken
            self.semanticVersion = semanticVersion
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case maxItems = "maxItems"
            case nextToken = "nextToken"
            case semanticVersion = "semanticVersion"
        }
    }

    public struct ListApplicationDependenciesResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Dependencies", location: .body(locationName: "dependencies"), required: false, type: .list), 
            AWSShapeMember(label: "NextToken", location: .body(locationName: "nextToken"), required: false, type: .string)
        ]
        public let dependencies: [ApplicationDependencySummary]?
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case dependencies = "dependencies"
            case nextToken = "nextToken"
        }
    }

    public struct ListApplicationVersionsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "MaxItems", location: .querystring(locationName: "maxItems"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]
        public let applicationId: String
        public let maxItems: Int32?
        public let nextToken: String?

        public init(applicationId: String, maxItems: Int32? = nil, nextToken: String? = nil) {
            self.applicationId = applicationId
            self.maxItems = maxItems
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case maxItems = "maxItems"
            case nextToken = "nextToken"
        }
    }

    public struct ListApplicationVersionsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", location: .body(locationName: "nextToken"), required: false, type: .string), 
            AWSShapeMember(label: "Versions", location: .body(locationName: "versions"), required: false, type: .list)
        ]
        public let nextToken: String?
        public let versions: [VersionSummary]?

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case versions = "versions"
        }
    }

    public struct ListApplicationsRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxItems", location: .querystring(locationName: "maxItems"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]
        public let maxItems: Int32?
        public let nextToken: String?

        public init(maxItems: Int32? = nil, nextToken: String? = nil) {
            self.maxItems = maxItems
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case maxItems = "maxItems"
            case nextToken = "nextToken"
        }
    }

    public struct ListApplicationsResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Applications", location: .body(locationName: "applications"), required: false, type: .list), 
            AWSShapeMember(label: "NextToken", location: .body(locationName: "nextToken"), required: false, type: .string)
        ]
        public let applications: [ApplicationSummary]?
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case applications = "applications"
            case nextToken = "nextToken"
        }
    }

    public struct ParameterDefinition: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "AllowedPattern", location: .body(locationName: "allowedPattern"), required: false, type: .string), 
            AWSShapeMember(label: "AllowedValues", location: .body(locationName: "allowedValues"), required: false, type: .list), 
            AWSShapeMember(label: "ConstraintDescription", location: .body(locationName: "constraintDescription"), required: false, type: .string), 
            AWSShapeMember(label: "DefaultValue", location: .body(locationName: "defaultValue"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "MaxLength", location: .body(locationName: "maxLength"), required: false, type: .integer), 
            AWSShapeMember(label: "MaxValue", location: .body(locationName: "maxValue"), required: false, type: .integer), 
            AWSShapeMember(label: "MinLength", location: .body(locationName: "minLength"), required: false, type: .integer), 
            AWSShapeMember(label: "MinValue", location: .body(locationName: "minValue"), required: false, type: .integer), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: true, type: .string), 
            AWSShapeMember(label: "NoEcho", location: .body(locationName: "noEcho"), required: false, type: .boolean), 
            AWSShapeMember(label: "ReferencedByResources", location: .body(locationName: "referencedByResources"), required: true, type: .list), 
            AWSShapeMember(label: "Type", location: .body(locationName: "type"), required: false, type: .string)
        ]
        /// A regular expression that represents the patterns to allow for String types.
        public let allowedPattern: String?
        /// An array containing the list of values allowed for the parameter.
        public let allowedValues: [String]?
        /// A string that explains a constraint when the constraint is violated. For example, without a constraint description,
        ///  a parameter that has an allowed pattern of [A-Za-z0-9]+ displays the following error message when the user
        ///  specifies an invalid value:
        ///  Malformed input-Parameter MyParameter must match pattern [A-Za-z0-9]+
        ///  By adding a constraint description, such as "must contain only uppercase and lowercase letters and numbers," you can display
        ///  the following customized error message:
        ///  Malformed input-Parameter MyParameter must contain only uppercase and lowercase letters and numbers.
        ///  
        public let constraintDescription: String?
        /// A value of the appropriate type for the template to use if no value is specified when a stack is created.
        ///  If you define constraints for the parameter, you must specify a value that adheres to those constraints.
        public let defaultValue: String?
        /// A string of up to 4,000 characters that describes the parameter.
        public let description: String?
        /// An integer value that determines the largest number of characters that you want to allow for String types.
        public let maxLength: Int32?
        /// A numeric value that determines the largest numeric value that you want to allow for Number types.
        public let maxValue: Int32?
        /// An integer value that determines the smallest number of characters that you want to allow for String types.
        public let minLength: Int32?
        /// A numeric value that determines the smallest numeric value that you want to allow for Number types.
        public let minValue: Int32?
        /// The name of the parameter.
        public let name: String
        /// Whether to mask the parameter value whenever anyone makes a call that describes the stack. If you set the
        ///  value to true, the parameter value is masked with asterisks (*****).
        public let noEcho: Bool?
        /// A list of AWS SAM resources that use this parameter.
        public let referencedByResources: [String]
        /// The type of the parameter.Valid values: String | Number | List&lt;Number> | CommaDelimitedList
        ///  
        ///  String: A literal string.For example, users can specify "MyUserName".
        ///  Number: An integer or float. AWS CloudFormation validates the parameter value as a number. However, when you use the
        ///  parameter elsewhere in your template (for example, by using the Ref intrinsic function), the parameter value becomes a string.For example, users might specify "8888".
        ///  List&lt;Number>: An array of integers or floats that are separated by commas. AWS CloudFormation validates the parameter value as numbers. However, when
        ///  you use the parameter elsewhere in your template (for example, by using the Ref intrinsic function), the parameter value becomes a list of strings.For example, users might specify "80,20", and then Ref results in ["80","20"].
        ///  CommaDelimitedList: An array of literal strings that are separated by commas. The total number of strings should be one more than the total number of commas.
        ///  Also, each member string is space-trimmed.For example, users might specify "test,dev,prod", and then Ref results in ["test","dev","prod"].
        public let `type`: String?

        public init(allowedPattern: String? = nil, allowedValues: [String]? = nil, constraintDescription: String? = nil, defaultValue: String? = nil, description: String? = nil, maxLength: Int32? = nil, maxValue: Int32? = nil, minLength: Int32? = nil, minValue: Int32? = nil, name: String, noEcho: Bool? = nil, referencedByResources: [String], type: String? = nil) {
            self.allowedPattern = allowedPattern
            self.allowedValues = allowedValues
            self.constraintDescription = constraintDescription
            self.defaultValue = defaultValue
            self.description = description
            self.maxLength = maxLength
            self.maxValue = maxValue
            self.minLength = minLength
            self.minValue = minValue
            self.name = name
            self.noEcho = noEcho
            self.referencedByResources = referencedByResources
            self.`type` = `type`
        }

        private enum CodingKeys: String, CodingKey {
            case allowedPattern = "allowedPattern"
            case allowedValues = "allowedValues"
            case constraintDescription = "constraintDescription"
            case defaultValue = "defaultValue"
            case description = "description"
            case maxLength = "maxLength"
            case maxValue = "maxValue"
            case minLength = "minLength"
            case minValue = "minValue"
            case name = "name"
            case noEcho = "noEcho"
            case referencedByResources = "referencedByResources"
            case `type` = "type"
        }
    }

    public struct ParameterValue: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: true, type: .string), 
            AWSShapeMember(label: "Value", location: .body(locationName: "value"), required: true, type: .string)
        ]
        /// The key associated with the parameter. If you don't specify a key and value for a particular parameter, AWS CloudFormation
        ///  uses the default value that is specified in your template.
        public let name: String
        /// The input value associated with the parameter.
        public let value: String

        public init(name: String, value: String) {
            self.name = name
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case value = "value"
        }
    }

    public struct PutApplicationPolicyRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "Statements", location: .body(locationName: "statements"), required: true, type: .list)
        ]
        public let applicationId: String
        public let statements: [ApplicationPolicyStatement]

        public init(applicationId: String, statements: [ApplicationPolicyStatement]) {
            self.applicationId = applicationId
            self.statements = statements
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case statements = "statements"
        }
    }

    public struct PutApplicationPolicyResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Statements", location: .body(locationName: "statements"), required: false, type: .list)
        ]
        public let statements: [ApplicationPolicyStatement]?

        public init(statements: [ApplicationPolicyStatement]? = nil) {
            self.statements = statements
        }

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

    public struct RollbackConfiguration: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MonitoringTimeInMinutes", location: .body(locationName: "monitoringTimeInMinutes"), required: false, type: .integer), 
            AWSShapeMember(label: "RollbackTriggers", location: .body(locationName: "rollbackTriggers"), required: false, type: .list)
        ]
        /// This property corresponds to the content of the same name for the AWS CloudFormation RollbackConfiguration
        ///   Data Type.
        public let monitoringTimeInMinutes: Int32?
        /// This property corresponds to the content of the same name for the AWS CloudFormation RollbackConfiguration
        ///   Data Type.
        public let rollbackTriggers: [RollbackTrigger]?

        public init(monitoringTimeInMinutes: Int32? = nil, rollbackTriggers: [RollbackTrigger]? = nil) {
            self.monitoringTimeInMinutes = monitoringTimeInMinutes
            self.rollbackTriggers = rollbackTriggers
        }

        private enum CodingKeys: String, CodingKey {
            case monitoringTimeInMinutes = "monitoringTimeInMinutes"
            case rollbackTriggers = "rollbackTriggers"
        }
    }

    public struct RollbackTrigger: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Arn", location: .body(locationName: "arn"), required: true, type: .string), 
            AWSShapeMember(label: "Type", location: .body(locationName: "type"), required: true, type: .string)
        ]
        /// This property corresponds to the content of the same name for the AWS CloudFormation RollbackTrigger
        ///   Data Type.
        public let arn: String
        /// This property corresponds to the content of the same name for the AWS CloudFormation RollbackTrigger
        ///   Data Type.
        public let `type`: String

        public init(arn: String, type: String) {
            self.arn = arn
            self.`type` = `type`
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case `type` = "type"
        }
    }

    public enum Status: String, CustomStringConvertible, Codable {
        case preparing = "PREPARING"
        case active = "ACTIVE"
        case expired = "EXPIRED"
        public var description: String { return self.rawValue }
    }

    public struct Tag: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Key", location: .body(locationName: "key"), required: true, type: .string), 
            AWSShapeMember(label: "Value", location: .body(locationName: "value"), required: true, type: .string)
        ]
        /// This property corresponds to the content of the same name for the AWS CloudFormation Tag
        ///   Data Type.
        public let key: String
        /// This property corresponds to the content of the same name for the AWS CloudFormation 
        ///  Tag
        ///  
        ///  Data Type.
        public let value: String

        public init(key: String, value: String) {
            self.key = key
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "key"
            case value = "value"
        }
    }

    public struct TemplateDetails: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: true, type: .string), 
            AWSShapeMember(label: "ExpirationTime", location: .body(locationName: "expirationTime"), required: true, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: true, type: .string), 
            AWSShapeMember(label: "Status", location: .body(locationName: "status"), required: true, type: .enum), 
            AWSShapeMember(label: "TemplateId", location: .body(locationName: "templateId"), required: true, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: true, type: .string)
        ]
        /// The application Amazon Resource Name (ARN).
        public let applicationId: String
        /// The date and time this resource was created.
        public let creationTime: String
        /// The date and time this template expires. Templates
        ///  expire 1 hour after creation.
        public let expirationTime: String
        /// The semantic version of the application:
        ///  https://semver.org/
        ///  
        public let semanticVersion: String
        /// Status of the template creation workflow.Possible values: PREPARING | ACTIVE | EXPIRED
        ///  
        public let status: Status
        /// The UUID returned by CreateCloudFormationTemplate.Pattern: [0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}
        public let templateId: String
        /// A link to the template that can be used to deploy the application using
        ///  AWS CloudFormation.
        public let templateUrl: String

        public init(applicationId: String, creationTime: String, expirationTime: String, semanticVersion: String, status: Status, templateId: String, templateUrl: String) {
            self.applicationId = applicationId
            self.creationTime = creationTime
            self.expirationTime = expirationTime
            self.semanticVersion = semanticVersion
            self.status = status
            self.templateId = templateId
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case creationTime = "creationTime"
            case expirationTime = "expirationTime"
            case semanticVersion = "semanticVersion"
            case status = "status"
            case templateId = "templateId"
            case templateUrl = "templateUrl"
        }
    }

    public struct UpdateApplicationInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "ReadmeBody", location: .body(locationName: "readmeBody"), required: false, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string)
        ]
        /// The name of the author publishing the app.Minimum length=1. Maximum length=127.Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";
        public let author: String?
        /// The description of the application.Minimum length=1. Maximum length=256
        public let description: String?
        /// A URL with more information about the application, for example the location of your GitHub repository for the application.
        public let homePageUrl: String?
        /// Labels to improve discovery of apps in search results.Minimum length=1. Maximum length=127. Maximum number of labels: 10Pattern: "^[a-zA-Z0-9+\\-_:\\/@]+$";
        public let labels: [String]?
        /// A text readme file in Markdown language that contains a more detailed description of the application and how it works.Maximum size 5 MB
        public let readmeBody: String?
        /// A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.Maximum size 5 MB
        public let readmeUrl: String?

        public init(author: String? = nil, description: String? = nil, homePageUrl: String? = nil, labels: [String]? = nil, readmeBody: String? = nil, readmeUrl: String? = nil) {
            self.author = author
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.readmeBody = readmeBody
            self.readmeUrl = readmeUrl
        }

        private enum CodingKeys: String, CodingKey {
            case author = "author"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case readmeBody = "readmeBody"
            case readmeUrl = "readmeUrl"
        }
    }

    public struct UpdateApplicationRequest: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .uri(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "ReadmeBody", location: .body(locationName: "readmeBody"), required: false, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string)
        ]
        public let applicationId: String
        public let author: String?
        public let description: String?
        public let homePageUrl: String?
        public let labels: [String]?
        public let readmeBody: String?
        public let readmeUrl: String?

        public init(applicationId: String, author: String? = nil, description: String? = nil, homePageUrl: String? = nil, labels: [String]? = nil, readmeBody: String? = nil, readmeUrl: String? = nil) {
            self.applicationId = applicationId
            self.author = author
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.readmeBody = readmeBody
            self.readmeUrl = readmeUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case author = "author"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case readmeBody = "readmeBody"
            case readmeUrl = "readmeUrl"
        }
    }

    public struct UpdateApplicationResponse: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: false, type: .string), 
            AWSShapeMember(label: "Author", location: .body(locationName: "author"), required: false, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: false, type: .string), 
            AWSShapeMember(label: "Description", location: .body(locationName: "description"), required: false, type: .string), 
            AWSShapeMember(label: "HomePageUrl", location: .body(locationName: "homePageUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Labels", location: .body(locationName: "labels"), required: false, type: .list), 
            AWSShapeMember(label: "LicenseUrl", location: .body(locationName: "licenseUrl"), required: false, type: .string), 
            AWSShapeMember(label: "Name", location: .body(locationName: "name"), required: false, type: .string), 
            AWSShapeMember(label: "ReadmeUrl", location: .body(locationName: "readmeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SpdxLicenseId", location: .body(locationName: "spdxLicenseId"), required: false, type: .string), 
            AWSShapeMember(label: "Version", location: .body(locationName: "version"), required: false, type: .structure)
        ]
        public let applicationId: String?
        public let author: String?
        public let creationTime: String?
        public let description: String?
        public let homePageUrl: String?
        public let labels: [String]?
        public let licenseUrl: String?
        public let name: String?
        public let readmeUrl: String?
        public let spdxLicenseId: String?
        public let version: Version?

        public init(applicationId: String? = nil, author: String? = nil, creationTime: String? = nil, description: String? = nil, homePageUrl: String? = nil, labels: [String]? = nil, licenseUrl: String? = nil, name: String? = nil, readmeUrl: String? = nil, spdxLicenseId: String? = nil, version: Version? = nil) {
            self.applicationId = applicationId
            self.author = author
            self.creationTime = creationTime
            self.description = description
            self.homePageUrl = homePageUrl
            self.labels = labels
            self.licenseUrl = licenseUrl
            self.name = name
            self.readmeUrl = readmeUrl
            self.spdxLicenseId = spdxLicenseId
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case author = "author"
            case creationTime = "creationTime"
            case description = "description"
            case homePageUrl = "homePageUrl"
            case labels = "labels"
            case licenseUrl = "licenseUrl"
            case name = "name"
            case readmeUrl = "readmeUrl"
            case spdxLicenseId = "spdxLicenseId"
            case version = "version"
        }
    }

    public struct Version: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: true, type: .string), 
            AWSShapeMember(label: "ParameterDefinitions", location: .body(locationName: "parameterDefinitions"), required: true, type: .list), 
            AWSShapeMember(label: "RequiredCapabilities", location: .body(locationName: "requiredCapabilities"), required: true, type: .list), 
            AWSShapeMember(label: "ResourcesSupported", location: .body(locationName: "resourcesSupported"), required: true, type: .boolean), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: true, type: .string), 
            AWSShapeMember(label: "SourceCodeArchiveUrl", location: .body(locationName: "sourceCodeArchiveUrl"), required: false, type: .string), 
            AWSShapeMember(label: "SourceCodeUrl", location: .body(locationName: "sourceCodeUrl"), required: false, type: .string), 
            AWSShapeMember(label: "TemplateUrl", location: .body(locationName: "templateUrl"), required: true, type: .string)
        ]
        /// The application Amazon Resource Name (ARN).
        public let applicationId: String
        /// The date and time this resource was created.
        public let creationTime: String
        /// An array of parameter types supported by the application.
        public let parameterDefinitions: [ParameterDefinition]
        /// A list of values that you must specify before you can deploy certain applications.
        ///  Some applications might include resources that can affect permissions in your AWS
        ///  account, for example, by creating new AWS Identity and Access Management (IAM) users.
        ///  For those applications, you must explicitly acknowledge their capabilities by
        ///  specifying this parameter.The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,
        ///  CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.The following resources require you to specify CAPABILITY_IAM or
        ///  CAPABILITY_NAMED_IAM:
        ///  AWS::IAM::Group,
        ///  AWS::IAM::InstanceProfile,
        ///  AWS::IAM::Policy, and
        ///  AWS::IAM::Role.
        ///  If the application contains IAM resources, you can specify either CAPABILITY_IAM
        ///  or CAPABILITY_NAMED_IAM. If the application contains IAM resources
        ///  with custom names, you must specify CAPABILITY_NAMED_IAM.The following resources require you to specify CAPABILITY_RESOURCE_POLICY:
        ///  AWS::Lambda::Permission,
        ///  AWS::IAM:Policy,
        ///  AWS::ApplicationAutoScaling::ScalingPolicy,
        ///  AWS::S3::BucketPolicy,
        ///  AWS::SQS::QueuePolicy, and
        ///  AWS::SNS::TopicPolicy.Applications that contain one or more nested applications require you to specify
        ///  CAPABILITY_AUTO_EXPAND.If your application template contains any of the above resources, we recommend that you review
        ///  all permissions associated with the application before deploying. If you don't specify
        ///  this parameter for an application that requires capabilities, the call will fail.
        public let requiredCapabilities: [Capability]
        /// Whether all of the AWS resources contained in this application are supported in the region
        ///  in which it is being retrieved.
        public let resourcesSupported: Bool
        /// The semantic version of the application:
        ///  https://semver.org/
        ///  
        public let semanticVersion: String
        /// A link to the S3 object that contains the ZIP archive of the source code for this version of your application.Maximum size 50 MB
        public let sourceCodeArchiveUrl: String?
        /// A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.
        public let sourceCodeUrl: String?
        /// A link to the packaged AWS SAM template of your application.
        public let templateUrl: String

        public init(applicationId: String, creationTime: String, parameterDefinitions: [ParameterDefinition], requiredCapabilities: [Capability], resourcesSupported: Bool, semanticVersion: String, sourceCodeArchiveUrl: String? = nil, sourceCodeUrl: String? = nil, templateUrl: String) {
            self.applicationId = applicationId
            self.creationTime = creationTime
            self.parameterDefinitions = parameterDefinitions
            self.requiredCapabilities = requiredCapabilities
            self.resourcesSupported = resourcesSupported
            self.semanticVersion = semanticVersion
            self.sourceCodeArchiveUrl = sourceCodeArchiveUrl
            self.sourceCodeUrl = sourceCodeUrl
            self.templateUrl = templateUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case creationTime = "creationTime"
            case parameterDefinitions = "parameterDefinitions"
            case requiredCapabilities = "requiredCapabilities"
            case resourcesSupported = "resourcesSupported"
            case semanticVersion = "semanticVersion"
            case sourceCodeArchiveUrl = "sourceCodeArchiveUrl"
            case sourceCodeUrl = "sourceCodeUrl"
            case templateUrl = "templateUrl"
        }
    }

    public struct VersionSummary: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ApplicationId", location: .body(locationName: "applicationId"), required: true, type: .string), 
            AWSShapeMember(label: "CreationTime", location: .body(locationName: "creationTime"), required: true, type: .string), 
            AWSShapeMember(label: "SemanticVersion", location: .body(locationName: "semanticVersion"), required: true, type: .string), 
            AWSShapeMember(label: "SourceCodeUrl", location: .body(locationName: "sourceCodeUrl"), required: false, type: .string)
        ]
        /// The application Amazon Resource Name (ARN).
        public let applicationId: String
        /// The date and time this resource was created.
        public let creationTime: String
        /// The semantic version of the application:
        ///  https://semver.org/
        ///  
        public let semanticVersion: String
        /// A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.
        public let sourceCodeUrl: String?

        public init(applicationId: String, creationTime: String, semanticVersion: String, sourceCodeUrl: String? = nil) {
            self.applicationId = applicationId
            self.creationTime = creationTime
            self.semanticVersion = semanticVersion
            self.sourceCodeUrl = sourceCodeUrl
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "applicationId"
            case creationTime = "creationTime"
            case semanticVersion = "semanticVersion"
            case sourceCodeUrl = "sourceCodeUrl"
        }
    }

}