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

import Foundation
import AWSSDKSwiftCore

extension AWSBackup {

    public struct BackupJob: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupJobId", required: false, type: .string), 
            AWSShapeMember(label: "BackupSizeInBytes", required: false, type: .long), 
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "BytesTransferred", required: false, type: .long), 
            AWSShapeMember(label: "CompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatedBy", required: false, type: .structure), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "ExpectedCompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "IamRoleArn", required: false, type: .string), 
            AWSShapeMember(label: "PercentDone", required: false, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceType", required: false, type: .string), 
            AWSShapeMember(label: "StartBy", required: false, type: .timestamp), 
            AWSShapeMember(label: "State", required: false, type: .enum), 
            AWSShapeMember(label: "StatusMessage", required: false, type: .string)
        ]

        /// Uniquely identifies a request to AWS Backup to back up a resource.
        public let backupJobId: String?
        /// The size, in bytes, of a backup.
        public let backupSizeInBytes: Int64?
        /// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// The size in bytes transferred to a backup vault at the time that the job status was queried.
        public let bytesTransferred: Int64?
        /// The date and time a job to create a backup job is completed, in Unix format and Coordinated Universal Time (UTC). The value of CompletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let completionDate: TimeStamp?
        /// Contains identifying information about the creation of a backup job, including the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId of the backup plan used to create it.
        public let createdBy: RecoveryPointCreator?
        /// The date and time a backup job is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// The date and time a job to back up resources is expected to be completed, in Unix format and Coordinated Universal Time (UTC). The value of ExpectedCompletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let expectedCompletionDate: TimeStamp?
        /// Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String?
        /// Contains an estimated percentage complete of a job at the time the job status was queried.
        public let percentDone: String?
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// An ARN that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let resourceArn: String?
        /// The type of AWS resource to be backed-up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
        public let resourceType: String?
        /// Specifies the time in Unix format and Coordinated Universal Time (UTC) when a backup job must be started before it is canceled. The value is calculated by adding the start window to the scheduled time. So if the scheduled time were 6:00 PM and the start window is 2 hours, the StartBy time would be 8:00 PM on the date specified. The value of StartBy is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let startBy: TimeStamp?
        /// The current state of a resource recovery point.
        public let state: BackupJobState?
        /// A detailed message explaining the status of the job to back up a resource.
        public let statusMessage: String?

        public init(backupJobId: String? = nil, backupSizeInBytes: Int64? = nil, backupVaultArn: String? = nil, backupVaultName: String? = nil, bytesTransferred: Int64? = nil, completionDate: TimeStamp? = nil, createdBy: RecoveryPointCreator? = nil, creationDate: TimeStamp? = nil, expectedCompletionDate: TimeStamp? = nil, iamRoleArn: String? = nil, percentDone: String? = nil, recoveryPointArn: String? = nil, resourceArn: String? = nil, resourceType: String? = nil, startBy: TimeStamp? = nil, state: BackupJobState? = nil, statusMessage: String? = nil) {
            self.backupJobId = backupJobId
            self.backupSizeInBytes = backupSizeInBytes
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.bytesTransferred = bytesTransferred
            self.completionDate = completionDate
            self.createdBy = createdBy
            self.creationDate = creationDate
            self.expectedCompletionDate = expectedCompletionDate
            self.iamRoleArn = iamRoleArn
            self.percentDone = percentDone
            self.recoveryPointArn = recoveryPointArn
            self.resourceArn = resourceArn
            self.resourceType = resourceType
            self.startBy = startBy
            self.state = state
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case backupJobId = "BackupJobId"
            case backupSizeInBytes = "BackupSizeInBytes"
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case bytesTransferred = "BytesTransferred"
            case completionDate = "CompletionDate"
            case createdBy = "CreatedBy"
            case creationDate = "CreationDate"
            case expectedCompletionDate = "ExpectedCompletionDate"
            case iamRoleArn = "IamRoleArn"
            case percentDone = "PercentDone"
            case recoveryPointArn = "RecoveryPointArn"
            case resourceArn = "ResourceArn"
            case resourceType = "ResourceType"
            case startBy = "StartBy"
            case state = "State"
            case statusMessage = "StatusMessage"
        }
    }

    public enum BackupJobState: String, CustomStringConvertible, Codable {
        case created = "CREATED"
        case pending = "PENDING"
        case running = "RUNNING"
        case aborting = "ABORTING"
        case aborted = "ABORTED"
        case completed = "COMPLETED"
        case failed = "FAILED"
        case expired = "EXPIRED"
        public var description: String { return self.rawValue }
    }

    public struct BackupPlan: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanName", required: true, type: .string), 
            AWSShapeMember(label: "Rules", required: true, type: .list)
        ]

        /// The display name of a backup plan.
        public let backupPlanName: String
        /// An array of BackupRule objects, each of which specifies a scheduled task that is used to back up a selection of resources.
        public let rules: [BackupRule]

        public init(backupPlanName: String, rules: [BackupRule]) {
            self.backupPlanName = backupPlanName
            self.rules = rules
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanName = "BackupPlanName"
            case rules = "Rules"
        }
    }

    public struct BackupPlanInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanName", required: true, type: .string), 
            AWSShapeMember(label: "Rules", required: true, type: .list)
        ]

        /// The display name of a backup plan.
        public let backupPlanName: String
        /// An array of BackupRule objects, each of which specifies a scheduled task that is used to back up a selection of resources.
        public let rules: [BackupRuleInput]

        public init(backupPlanName: String, rules: [BackupRuleInput]) {
            self.backupPlanName = backupPlanName
            self.rules = rules
        }

        public func validate(name: String) throws {
            try self.rules.forEach {
                try $0.validate(name: "\(name).rules[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanName = "BackupPlanName"
            case rules = "Rules"
        }
    }

    public struct BackupPlanTemplatesListMember: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanTemplateId", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanTemplateName", required: false, type: .string)
        ]

        /// Uniquely identifies a stored backup plan template.
        public let backupPlanTemplateId: String?
        /// The optional display name of a backup plan template.
        public let backupPlanTemplateName: String?

        public init(backupPlanTemplateId: String? = nil, backupPlanTemplateName: String? = nil) {
            self.backupPlanTemplateId = backupPlanTemplateId
            self.backupPlanTemplateName = backupPlanTemplateName
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanTemplateId = "BackupPlanTemplateId"
            case backupPlanTemplateName = "BackupPlanTemplateName"
        }
    }

    public struct BackupPlansListMember: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanName", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string), 
            AWSShapeMember(label: "DeletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "LastExecutionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "VersionId", required: false, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
        public let backupPlanArn: String?
        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// The display name of a saved backup plan.
        public let backupPlanName: String?
        /// The date and time a resource backup plan is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?
        /// The date and time a backup plan is deleted, in Unix format and Coordinated Universal Time (UTC). The value of DeletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let deletionDate: TimeStamp?
        /// The last time a job to back up resources was executed with this rule. A date and time, in Unix format and Coordinated Universal Time (UTC). The value of LastExecutionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let lastExecutionDate: TimeStamp?
        /// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version IDs cannot be edited.
        public let versionId: String?

        public init(backupPlanArn: String? = nil, backupPlanId: String? = nil, backupPlanName: String? = nil, creationDate: TimeStamp? = nil, creatorRequestId: String? = nil, deletionDate: TimeStamp? = nil, lastExecutionDate: TimeStamp? = nil, versionId: String? = nil) {
            self.backupPlanArn = backupPlanArn
            self.backupPlanId = backupPlanId
            self.backupPlanName = backupPlanName
            self.creationDate = creationDate
            self.creatorRequestId = creatorRequestId
            self.deletionDate = deletionDate
            self.lastExecutionDate = lastExecutionDate
            self.versionId = versionId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanArn = "BackupPlanArn"
            case backupPlanId = "BackupPlanId"
            case backupPlanName = "BackupPlanName"
            case creationDate = "CreationDate"
            case creatorRequestId = "CreatorRequestId"
            case deletionDate = "DeletionDate"
            case lastExecutionDate = "LastExecutionDate"
            case versionId = "VersionId"
        }
    }

    public struct BackupRule: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "CompletionWindowMinutes", required: false, type: .long), 
            AWSShapeMember(label: "Lifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "RecoveryPointTags", required: false, type: .map), 
            AWSShapeMember(label: "RuleId", required: false, type: .string), 
            AWSShapeMember(label: "RuleName", required: true, type: .string), 
            AWSShapeMember(label: "ScheduleExpression", required: false, type: .string), 
            AWSShapeMember(label: "StartWindowMinutes", required: false, type: .long), 
            AWSShapeMember(label: "TargetBackupVaultName", required: true, type: .string)
        ]

        /// A value in minutes after a backup job is successfully started before it must be completed or it is canceled by AWS Backup. This value is optional.
        public let completionWindowMinutes: Int64?
        /// The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup transitions and expires backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “expire after days” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold. 
        public let lifecycle: Lifecycle?
        /// An array of key-value pair strings that are assigned to resources that are associated with this rule when restored from backup.
        public let recoveryPointTags: [String: String]?
        /// Uniquely identifies a rule that is used to schedule the backup of a selection of resources.
        public let ruleId: String?
        /// An optional display name for a backup rule.
        public let ruleName: String
        /// A CRON expression specifying when AWS Backup initiates a backup job.
        public let scheduleExpression: String?
        /// An optional value that specifies a period of time in minutes after a backup is scheduled before a job is canceled if it doesn't start successfully.
        public let startWindowMinutes: Int64?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let targetBackupVaultName: String

        public init(completionWindowMinutes: Int64? = nil, lifecycle: Lifecycle? = nil, recoveryPointTags: [String: String]? = nil, ruleId: String? = nil, ruleName: String, scheduleExpression: String? = nil, startWindowMinutes: Int64? = nil, targetBackupVaultName: String) {
            self.completionWindowMinutes = completionWindowMinutes
            self.lifecycle = lifecycle
            self.recoveryPointTags = recoveryPointTags
            self.ruleId = ruleId
            self.ruleName = ruleName
            self.scheduleExpression = scheduleExpression
            self.startWindowMinutes = startWindowMinutes
            self.targetBackupVaultName = targetBackupVaultName
        }

        private enum CodingKeys: String, CodingKey {
            case completionWindowMinutes = "CompletionWindowMinutes"
            case lifecycle = "Lifecycle"
            case recoveryPointTags = "RecoveryPointTags"
            case ruleId = "RuleId"
            case ruleName = "RuleName"
            case scheduleExpression = "ScheduleExpression"
            case startWindowMinutes = "StartWindowMinutes"
            case targetBackupVaultName = "TargetBackupVaultName"
        }
    }

    public struct BackupRuleInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "CompletionWindowMinutes", required: false, type: .long), 
            AWSShapeMember(label: "Lifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "RecoveryPointTags", required: false, type: .map), 
            AWSShapeMember(label: "RuleName", required: true, type: .string), 
            AWSShapeMember(label: "ScheduleExpression", required: false, type: .string), 
            AWSShapeMember(label: "StartWindowMinutes", required: false, type: .long), 
            AWSShapeMember(label: "TargetBackupVaultName", required: true, type: .string)
        ]

        /// The amount of time AWS Backup attempts a backup before canceling the job and returning an error.
        public let completionWindowMinutes: Int64?
        /// The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup will transition and expire backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “expire after days” setting must be 90 days greater than the “transition to cold after days”. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold. 
        public let lifecycle: Lifecycle?
        /// To help organize your resources, you can assign your own metadata to the resources that you create. Each tag is a key-value pair.
        public let recoveryPointTags: [String: String]?
        /// &gt;An optional display name for a backup rule.
        public let ruleName: String
        /// A CRON expression specifying when AWS Backup initiates a backup job.
        public let scheduleExpression: String?
        /// The amount of time in minutes before beginning a backup.
        public let startWindowMinutes: Int64?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let targetBackupVaultName: String

        public init(completionWindowMinutes: Int64? = nil, lifecycle: Lifecycle? = nil, recoveryPointTags: [String: String]? = nil, ruleName: String, scheduleExpression: String? = nil, startWindowMinutes: Int64? = nil, targetBackupVaultName: String) {
            self.completionWindowMinutes = completionWindowMinutes
            self.lifecycle = lifecycle
            self.recoveryPointTags = recoveryPointTags
            self.ruleName = ruleName
            self.scheduleExpression = scheduleExpression
            self.startWindowMinutes = startWindowMinutes
            self.targetBackupVaultName = targetBackupVaultName
        }

        public func validate(name: String) throws {
            try validate(self.ruleName, name:"ruleName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
            try validate(self.targetBackupVaultName, name:"targetBackupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case completionWindowMinutes = "CompletionWindowMinutes"
            case lifecycle = "Lifecycle"
            case recoveryPointTags = "RecoveryPointTags"
            case ruleName = "RuleName"
            case scheduleExpression = "ScheduleExpression"
            case startWindowMinutes = "StartWindowMinutes"
            case targetBackupVaultName = "TargetBackupVaultName"
        }
    }

    public struct BackupSelection: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IamRoleArn", required: true, type: .string), 
            AWSShapeMember(label: "ListOfTags", required: false, type: .list), 
            AWSShapeMember(label: "Resources", required: false, type: .list), 
            AWSShapeMember(label: "SelectionName", required: true, type: .string)
        ]

        /// The ARN of the IAM role that AWS Backup uses to authenticate when restoring the target resource; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String
        /// An array of conditions used to specify a set of resources to assign to a backup plan; for example, "StringEquals": {"ec2:ResourceTag/Department": "accounting".
        public let listOfTags: [Condition]?
        /// An array of strings that either contain Amazon Resource Names (ARNs) or match patterns such as "arn:aws:ec2:us-east-1:123456789012:volume/*" of resources to assign to a backup plan.
        public let resources: [String]?
        /// The display name of a resource selection document.
        public let selectionName: String

        public init(iamRoleArn: String, listOfTags: [Condition]? = nil, resources: [String]? = nil, selectionName: String) {
            self.iamRoleArn = iamRoleArn
            self.listOfTags = listOfTags
            self.resources = resources
            self.selectionName = selectionName
        }

        public func validate(name: String) throws {
            try validate(self.selectionName, name:"selectionName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case iamRoleArn = "IamRoleArn"
            case listOfTags = "ListOfTags"
            case resources = "Resources"
            case selectionName = "SelectionName"
        }
    }

    public struct BackupSelectionsListMember: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string), 
            AWSShapeMember(label: "IamRoleArn", required: false, type: .string), 
            AWSShapeMember(label: "SelectionId", required: false, type: .string), 
            AWSShapeMember(label: "SelectionName", required: false, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// The date and time a backup plan is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?
        /// Specifies the IAM role Amazon Resource Name (ARN) to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String?
        /// Uniquely identifies a request to assign a set of resources to a backup plan.
        public let selectionId: String?
        /// The display name of a resource selection document.
        public let selectionName: String?

        public init(backupPlanId: String? = nil, creationDate: TimeStamp? = nil, creatorRequestId: String? = nil, iamRoleArn: String? = nil, selectionId: String? = nil, selectionName: String? = nil) {
            self.backupPlanId = backupPlanId
            self.creationDate = creationDate
            self.creatorRequestId = creatorRequestId
            self.iamRoleArn = iamRoleArn
            self.selectionId = selectionId
            self.selectionName = selectionName
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanId = "BackupPlanId"
            case creationDate = "CreationDate"
            case creatorRequestId = "CreatorRequestId"
            case iamRoleArn = "IamRoleArn"
            case selectionId = "SelectionId"
            case selectionName = "SelectionName"
        }
    }

    public enum BackupVaultEvent: String, CustomStringConvertible, Codable {
        case backupJobStarted = "BACKUP_JOB_STARTED"
        case backupJobCompleted = "BACKUP_JOB_COMPLETED"
        case restoreJobStarted = "RESTORE_JOB_STARTED"
        case restoreJobCompleted = "RESTORE_JOB_COMPLETED"
        case recoveryPointModified = "RECOVERY_POINT_MODIFIED"
        case backupPlanCreated = "BACKUP_PLAN_CREATED"
        case backupPlanModified = "BACKUP_PLAN_MODIFIED"
        public var description: String { return self.rawValue }
    }

    public struct BackupVaultListMember: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string), 
            AWSShapeMember(label: "EncryptionKeyArn", required: false, type: .string), 
            AWSShapeMember(label: "NumberOfRecoveryPoints", required: false, type: .long)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// The date and time a resource backup is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?
        /// The server-side encryption key that is used to protect your backups; for example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
        public let encryptionKeyArn: String?
        /// The number of recovery points that are stored in a backup vault.
        public let numberOfRecoveryPoints: Int64?

        public init(backupVaultArn: String? = nil, backupVaultName: String? = nil, creationDate: TimeStamp? = nil, creatorRequestId: String? = nil, encryptionKeyArn: String? = nil, numberOfRecoveryPoints: Int64? = nil) {
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.creationDate = creationDate
            self.creatorRequestId = creatorRequestId
            self.encryptionKeyArn = encryptionKeyArn
            self.numberOfRecoveryPoints = numberOfRecoveryPoints
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case creationDate = "CreationDate"
            case creatorRequestId = "CreatorRequestId"
            case encryptionKeyArn = "EncryptionKeyArn"
            case numberOfRecoveryPoints = "NumberOfRecoveryPoints"
        }
    }

    public struct CalculatedLifecycle: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DeleteAt", required: false, type: .timestamp), 
            AWSShapeMember(label: "MoveToColdStorageAt", required: false, type: .timestamp)
        ]

        /// A timestamp that specifies when to delete a recovery point.
        public let deleteAt: TimeStamp?
        /// A timestamp that specifies when to transition a recovery point to cold storage.
        public let moveToColdStorageAt: TimeStamp?

        public init(deleteAt: TimeStamp? = nil, moveToColdStorageAt: TimeStamp? = nil) {
            self.deleteAt = deleteAt
            self.moveToColdStorageAt = moveToColdStorageAt
        }

        private enum CodingKeys: String, CodingKey {
            case deleteAt = "DeleteAt"
            case moveToColdStorageAt = "MoveToColdStorageAt"
        }
    }

    public struct Condition: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ConditionKey", required: true, type: .string), 
            AWSShapeMember(label: "ConditionType", required: true, type: .enum), 
            AWSShapeMember(label: "ConditionValue", required: true, type: .string)
        ]

        /// The key in a key-value pair. For example, in "ec2:ResourceTag/Department": "accounting", "ec2:ResourceTag/Department" is the key.
        public let conditionKey: String
        /// An operation, such as StringEquals, that is applied to a key-value pair used to filter resources in a selection.
        public let conditionType: ConditionType
        /// The value in a key-value pair. For example, in "ec2:ResourceTag/Department": "accounting", "accounting" is the value.
        public let conditionValue: String

        public init(conditionKey: String, conditionType: ConditionType, conditionValue: String) {
            self.conditionKey = conditionKey
            self.conditionType = conditionType
            self.conditionValue = conditionValue
        }

        private enum CodingKeys: String, CodingKey {
            case conditionKey = "ConditionKey"
            case conditionType = "ConditionType"
            case conditionValue = "ConditionValue"
        }
    }

    public enum ConditionType: String, CustomStringConvertible, Codable {
        case stringequals = "STRINGEQUALS"
        public var description: String { return self.rawValue }
    }

    public struct CreateBackupPlanInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlan", required: true, type: .structure), 
            AWSShapeMember(label: "BackupPlanTags", required: false, type: .map), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string)
        ]

        /// Specifies the body of a backup plan. Includes a BackupPlanName and one or more sets of Rules.
        public let backupPlan: BackupPlanInput
        /// To help organize your resources, you can assign your own metadata to the resources that you create. Each tag is a key-value pair. The specified tags are assigned to all backups created with this plan.
        public let backupPlanTags: [String: String]?
        /// Identifies the request and allows failed requests to be retried without the risk of executing the operation twice. If the request includes a CreatorRequestId that matches an existing backup plan, that plan is returned. This parameter is optional.
        public let creatorRequestId: String?

        public init(backupPlan: BackupPlanInput, backupPlanTags: [String: String]? = nil, creatorRequestId: String? = nil) {
            self.backupPlan = backupPlan
            self.backupPlanTags = backupPlanTags
            self.creatorRequestId = creatorRequestId
        }

        public func validate(name: String) throws {
            try self.backupPlan.validate(name: "\(name).backupPlan")
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlan = "BackupPlan"
            case backupPlanTags = "BackupPlanTags"
            case creatorRequestId = "CreatorRequestId"
        }
    }

    public struct CreateBackupPlanOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "VersionId", required: false, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
        public let backupPlanArn: String?
        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// The date and time that a backup plan is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1024 bytes long. They cannot be edited.
        public let versionId: String?

        public init(backupPlanArn: String? = nil, backupPlanId: String? = nil, creationDate: TimeStamp? = nil, versionId: String? = nil) {
            self.backupPlanArn = backupPlanArn
            self.backupPlanId = backupPlanId
            self.creationDate = creationDate
            self.versionId = versionId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanArn = "BackupPlanArn"
            case backupPlanId = "BackupPlanId"
            case creationDate = "CreationDate"
            case versionId = "VersionId"
        }
    }

    public struct CreateBackupSelectionInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string), 
            AWSShapeMember(label: "BackupSelection", required: true, type: .structure), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string)
        ]

        /// Uniquely identifies the backup plan to be associated with the selection of resources.
        public let backupPlanId: String
        /// Specifies the body of a request to assign a set of resources to a backup plan. It includes an array of resources, an optional array of patterns to exclude resources, an optional role to provide access to the AWS service the resource belongs to, and an optional array of tags used to identify a set of resources.
        public let backupSelection: BackupSelection
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?

        public init(backupPlanId: String, backupSelection: BackupSelection, creatorRequestId: String? = nil) {
            self.backupPlanId = backupPlanId
            self.backupSelection = backupSelection
            self.creatorRequestId = creatorRequestId
        }

        public func validate(name: String) throws {
            try self.backupSelection.validate(name: "\(name).backupSelection")
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanId = "backupPlanId"
            case backupSelection = "BackupSelection"
            case creatorRequestId = "CreatorRequestId"
        }
    }

    public struct CreateBackupSelectionOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "SelectionId", required: false, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// The date and time a backup selection is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// Uniquely identifies the body of a request to assign a set of resources to a backup plan.
        public let selectionId: String?

        public init(backupPlanId: String? = nil, creationDate: TimeStamp? = nil, selectionId: String? = nil) {
            self.backupPlanId = backupPlanId
            self.creationDate = creationDate
            self.selectionId = selectionId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanId = "BackupPlanId"
            case creationDate = "CreationDate"
            case selectionId = "SelectionId"
        }
    }

    public struct CreateBackupVaultInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "BackupVaultTags", required: false, type: .map), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string), 
            AWSShapeMember(label: "EncryptionKeyArn", required: false, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// Metadata that you can assign to help organize the resources that you create. Each tag is a key-value pair.
        public let backupVaultTags: [String: String]?
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?
        /// The server-side encryption key that is used to protect your backups; for example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
        public let encryptionKeyArn: String?

        public init(backupVaultName: String, backupVaultTags: [String: String]? = nil, creatorRequestId: String? = nil, encryptionKeyArn: String? = nil) {
            self.backupVaultName = backupVaultName
            self.backupVaultTags = backupVaultTags
            self.creatorRequestId = creatorRequestId
            self.encryptionKeyArn = encryptionKeyArn
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultName = "backupVaultName"
            case backupVaultTags = "BackupVaultTags"
            case creatorRequestId = "CreatorRequestId"
            case encryptionKeyArn = "EncryptionKeyArn"
        }
    }

    public struct CreateBackupVaultOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// The date and time a backup vault is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?

        public init(backupVaultArn: String? = nil, backupVaultName: String? = nil, creationDate: TimeStamp? = nil) {
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.creationDate = creationDate
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case creationDate = "CreationDate"
        }
    }

    public struct DeleteBackupPlanInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String

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

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

    public struct DeleteBackupPlanOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "DeletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "VersionId", required: false, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
        public let backupPlanArn: String?
        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// The date and time a backup plan is deleted, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let deletionDate: TimeStamp?
        /// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version Ids cannot be edited.
        public let versionId: String?

        public init(backupPlanArn: String? = nil, backupPlanId: String? = nil, deletionDate: TimeStamp? = nil, versionId: String? = nil) {
            self.backupPlanArn = backupPlanArn
            self.backupPlanId = backupPlanId
            self.deletionDate = deletionDate
            self.versionId = versionId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanArn = "BackupPlanArn"
            case backupPlanId = "BackupPlanId"
            case deletionDate = "DeletionDate"
            case versionId = "VersionId"
        }
    }

    public struct DeleteBackupSelectionInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string), 
            AWSShapeMember(label: "SelectionId", location: .uri(locationName: "selectionId"), required: true, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String
        /// Uniquely identifies the body of a request to assign a set of resources to a backup plan.
        public let selectionId: String

        public init(backupPlanId: String, selectionId: String) {
            self.backupPlanId = backupPlanId
            self.selectionId = selectionId
        }

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

    public struct DeleteBackupVaultAccessPolicyInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String

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

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

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

    public struct DeleteBackupVaultInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and theAWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String

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

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

    public struct DeleteBackupVaultNotificationsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String

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

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

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

    public struct DeleteRecoveryPointInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", location: .uri(locationName: "recoveryPointArn"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String

        public init(backupVaultName: String, recoveryPointArn: String) {
            self.backupVaultName = backupVaultName
            self.recoveryPointArn = recoveryPointArn
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

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

    public struct DescribeBackupJobInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupJobId", location: .uri(locationName: "backupJobId"), required: true, type: .string)
        ]

        /// Uniquely identifies a request to AWS Backup to back up a resource.
        public let backupJobId: String

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

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

    public struct DescribeBackupJobOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupJobId", required: false, type: .string), 
            AWSShapeMember(label: "BackupSizeInBytes", required: false, type: .long), 
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "BytesTransferred", required: false, type: .long), 
            AWSShapeMember(label: "CompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatedBy", required: false, type: .structure), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "ExpectedCompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "IamRoleArn", required: false, type: .string), 
            AWSShapeMember(label: "PercentDone", required: false, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceType", required: false, type: .string), 
            AWSShapeMember(label: "StartBy", required: false, type: .timestamp), 
            AWSShapeMember(label: "State", required: false, type: .enum), 
            AWSShapeMember(label: "StatusMessage", required: false, type: .string)
        ]

        /// Uniquely identifies a request to AWS Backup to back up a resource.
        public let backupJobId: String?
        /// The size, in bytes, of a backup.
        public let backupSizeInBytes: Int64?
        /// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// The size in bytes transferred to a backup vault at the time that the job status was queried.
        public let bytesTransferred: Int64?
        /// The date and time that a job to create a backup job is completed, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let completionDate: TimeStamp?
        /// Contains identifying information about the creation of a backup job, including the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId of the backup plan that is used to create it.
        public let createdBy: RecoveryPointCreator?
        /// The date and time that a backup job is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// The date and time that a job to back up resources is expected to be completed, in Unix format and Coordinated Universal Time (UTC). The value of ExpectedCompletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let expectedCompletionDate: TimeStamp?
        /// Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String?
        /// Contains an estimated percentage that is complete of a job at the time the job status was queried.
        public let percentDone: String?
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// An ARN that uniquely identifies a saved resource. The format of the ARN depends on the resource type.
        public let resourceArn: String?
        /// The type of AWS resource to be backed-up; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
        public let resourceType: String?
        /// Specifies the time in Unix format and Coordinated Universal Time (UTC) when a backup job must be started before it is canceled. The value is calculated by adding the start window to the scheduled time. So if the scheduled time were 6:00 PM and the start window is 2 hours, the StartBy time would be 8:00 PM on the date specified. The value of StartBy is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let startBy: TimeStamp?
        /// The current state of a resource recovery point.
        public let state: BackupJobState?
        /// A detailed message explaining the status of the job to back up a resource.
        public let statusMessage: String?

        public init(backupJobId: String? = nil, backupSizeInBytes: Int64? = nil, backupVaultArn: String? = nil, backupVaultName: String? = nil, bytesTransferred: Int64? = nil, completionDate: TimeStamp? = nil, createdBy: RecoveryPointCreator? = nil, creationDate: TimeStamp? = nil, expectedCompletionDate: TimeStamp? = nil, iamRoleArn: String? = nil, percentDone: String? = nil, recoveryPointArn: String? = nil, resourceArn: String? = nil, resourceType: String? = nil, startBy: TimeStamp? = nil, state: BackupJobState? = nil, statusMessage: String? = nil) {
            self.backupJobId = backupJobId
            self.backupSizeInBytes = backupSizeInBytes
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.bytesTransferred = bytesTransferred
            self.completionDate = completionDate
            self.createdBy = createdBy
            self.creationDate = creationDate
            self.expectedCompletionDate = expectedCompletionDate
            self.iamRoleArn = iamRoleArn
            self.percentDone = percentDone
            self.recoveryPointArn = recoveryPointArn
            self.resourceArn = resourceArn
            self.resourceType = resourceType
            self.startBy = startBy
            self.state = state
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case backupJobId = "BackupJobId"
            case backupSizeInBytes = "BackupSizeInBytes"
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case bytesTransferred = "BytesTransferred"
            case completionDate = "CompletionDate"
            case createdBy = "CreatedBy"
            case creationDate = "CreationDate"
            case expectedCompletionDate = "ExpectedCompletionDate"
            case iamRoleArn = "IamRoleArn"
            case percentDone = "PercentDone"
            case recoveryPointArn = "RecoveryPointArn"
            case resourceArn = "ResourceArn"
            case resourceType = "ResourceType"
            case startBy = "StartBy"
            case state = "State"
            case statusMessage = "StatusMessage"
        }
    }

    public struct DescribeBackupVaultInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String

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

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

    public struct DescribeBackupVaultOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string), 
            AWSShapeMember(label: "EncryptionKeyArn", required: false, type: .string), 
            AWSShapeMember(label: "NumberOfRecoveryPoints", required: false, type: .long)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// The date and time that a backup vault is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?
        /// The server-side encryption key that is used to protect your backups; for example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
        public let encryptionKeyArn: String?
        /// The number of recovery points that are stored in a backup vault.
        public let numberOfRecoveryPoints: Int64?

        public init(backupVaultArn: String? = nil, backupVaultName: String? = nil, creationDate: TimeStamp? = nil, creatorRequestId: String? = nil, encryptionKeyArn: String? = nil, numberOfRecoveryPoints: Int64? = nil) {
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.creationDate = creationDate
            self.creatorRequestId = creatorRequestId
            self.encryptionKeyArn = encryptionKeyArn
            self.numberOfRecoveryPoints = numberOfRecoveryPoints
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case creationDate = "CreationDate"
            case creatorRequestId = "CreatorRequestId"
            case encryptionKeyArn = "EncryptionKeyArn"
            case numberOfRecoveryPoints = "NumberOfRecoveryPoints"
        }
    }

    public struct DescribeProtectedResourceInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ResourceArn", location: .uri(locationName: "resourceArn"), required: true, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let resourceArn: String

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

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

    public struct DescribeProtectedResourceOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "LastBackupTime", required: false, type: .timestamp), 
            AWSShapeMember(label: "ResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceType", required: false, type: .string)
        ]

        /// The date and time that a resource was last backed up, in Unix format and Coordinated Universal Time (UTC). The value of LastBackupTime is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let lastBackupTime: TimeStamp?
        /// An ARN that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let resourceArn: String?
        /// The type of AWS resource saved as a recovery point; for example, an EBS volume or an Amazon RDS database.
        public let resourceType: String?

        public init(lastBackupTime: TimeStamp? = nil, resourceArn: String? = nil, resourceType: String? = nil) {
            self.lastBackupTime = lastBackupTime
            self.resourceArn = resourceArn
            self.resourceType = resourceType
        }

        private enum CodingKeys: String, CodingKey {
            case lastBackupTime = "LastBackupTime"
            case resourceArn = "ResourceArn"
            case resourceType = "ResourceType"
        }
    }

    public struct DescribeRecoveryPointInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", location: .uri(locationName: "recoveryPointArn"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String

        public init(backupVaultName: String, recoveryPointArn: String) {
            self.backupVaultName = backupVaultName
            self.recoveryPointArn = recoveryPointArn
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

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

    public struct DescribeRecoveryPointOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupSizeInBytes", required: false, type: .long), 
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "CalculatedLifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "CompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatedBy", required: false, type: .structure), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "EncryptionKeyArn", required: false, type: .string), 
            AWSShapeMember(label: "IamRoleArn", required: false, type: .string), 
            AWSShapeMember(label: "IsEncrypted", required: false, type: .boolean), 
            AWSShapeMember(label: "LastRestoreTime", required: false, type: .timestamp), 
            AWSShapeMember(label: "Lifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceType", required: false, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum), 
            AWSShapeMember(label: "StorageClass", required: false, type: .enum)
        ]

        /// The size, in bytes, of a backup.
        public let backupSizeInBytes: Int64?
        /// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// A CalculatedLifecycle object containing DeleteAt and MoveToColdStorageAt timestamps.
        public let calculatedLifecycle: CalculatedLifecycle?
        /// The date and time that a job to create a recovery point is completed, in Unix format and Coordinated Universal Time (UTC). The value of CompletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let completionDate: TimeStamp?
        /// Contains identifying information about the creation of a recovery point, including the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId of the backup plan used to create it.
        public let createdBy: RecoveryPointCreator?
        /// The date and time that a recovery point is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// The server-side encryption key used to protect your backups; for example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
        public let encryptionKeyArn: String?
        /// Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String?
        /// A Boolean value that is returned as TRUE if the specified recovery point is encrypted, or FALSE if the recovery point is not encrypted.
        public let isEncrypted: Bool?
        /// The date and time that a recovery point was last restored, in Unix format and Coordinated Universal Time (UTC). The value of LastRestoreTime is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let lastRestoreTime: TimeStamp?
        /// The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup transitions and expires backups automatically according to the lifecycle that you define.  Backups that are transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “expire after days” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold. 
        public let lifecycle: Lifecycle?
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// An ARN that uniquely identifies a saved resource. The format of the ARN depends on the resource type.
        public let resourceArn: String?
        /// The type of AWS resource to save as a recovery point; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
        public let resourceType: String?
        /// A status code specifying the state of the recovery point.  A partial status indicates that the recovery point was not successfully re-created and must be retried. 
        public let status: RecoveryPointStatus?
        /// Specifies the storage class of the recovery point. Valid values are WARM or COLD.
        public let storageClass: StorageClass?

        public init(backupSizeInBytes: Int64? = nil, backupVaultArn: String? = nil, backupVaultName: String? = nil, calculatedLifecycle: CalculatedLifecycle? = nil, completionDate: TimeStamp? = nil, createdBy: RecoveryPointCreator? = nil, creationDate: TimeStamp? = nil, encryptionKeyArn: String? = nil, iamRoleArn: String? = nil, isEncrypted: Bool? = nil, lastRestoreTime: TimeStamp? = nil, lifecycle: Lifecycle? = nil, recoveryPointArn: String? = nil, resourceArn: String? = nil, resourceType: String? = nil, status: RecoveryPointStatus? = nil, storageClass: StorageClass? = nil) {
            self.backupSizeInBytes = backupSizeInBytes
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.calculatedLifecycle = calculatedLifecycle
            self.completionDate = completionDate
            self.createdBy = createdBy
            self.creationDate = creationDate
            self.encryptionKeyArn = encryptionKeyArn
            self.iamRoleArn = iamRoleArn
            self.isEncrypted = isEncrypted
            self.lastRestoreTime = lastRestoreTime
            self.lifecycle = lifecycle
            self.recoveryPointArn = recoveryPointArn
            self.resourceArn = resourceArn
            self.resourceType = resourceType
            self.status = status
            self.storageClass = storageClass
        }

        private enum CodingKeys: String, CodingKey {
            case backupSizeInBytes = "BackupSizeInBytes"
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case calculatedLifecycle = "CalculatedLifecycle"
            case completionDate = "CompletionDate"
            case createdBy = "CreatedBy"
            case creationDate = "CreationDate"
            case encryptionKeyArn = "EncryptionKeyArn"
            case iamRoleArn = "IamRoleArn"
            case isEncrypted = "IsEncrypted"
            case lastRestoreTime = "LastRestoreTime"
            case lifecycle = "Lifecycle"
            case recoveryPointArn = "RecoveryPointArn"
            case resourceArn = "ResourceArn"
            case resourceType = "ResourceType"
            case status = "Status"
            case storageClass = "StorageClass"
        }
    }

    public struct DescribeRestoreJobInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "RestoreJobId", location: .uri(locationName: "restoreJobId"), required: true, type: .string)
        ]

        /// Uniquely identifies the job that restores a recovery point.
        public let restoreJobId: String

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

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

    public struct DescribeRestoreJobOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupSizeInBytes", required: false, type: .long), 
            AWSShapeMember(label: "CompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatedResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "ExpectedCompletionTimeMinutes", required: false, type: .long), 
            AWSShapeMember(label: "IamRoleArn", required: false, type: .string), 
            AWSShapeMember(label: "PercentDone", required: false, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "RestoreJobId", required: false, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum), 
            AWSShapeMember(label: "StatusMessage", required: false, type: .string)
        ]

        /// The size, in bytes, of the restored resource.
        public let backupSizeInBytes: Int64?
        /// The date and time that a job to restore a recovery point is completed, in Unix format and Coordinated Universal Time (UTC). The value of CompletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let completionDate: TimeStamp?
        /// An Amazon Resource Name (ARN) that uniquely identifies a resource whose recovery point is being restored. The format of the ARN depends on the resource type of the backed-up resource.
        public let createdResourceArn: String?
        /// The date and time that a restore job is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// The amount of time in minutes that a job restoring a recovery point is expected to take.
        public let expectedCompletionTimeMinutes: Int64?
        /// Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String?
        /// Contains an estimated percentage that is complete of a job at the time the job status was queried.
        public let percentDone: String?
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// Uniquely identifies the job that restores a recovery point.
        public let restoreJobId: String?
        /// Status code specifying the state of the job that is initiated by AWS Backup to restore a recovery point.
        public let status: RestoreJobStatus?
        /// A detailed message explaining the status of a job to restore a recovery point.
        public let statusMessage: String?

        public init(backupSizeInBytes: Int64? = nil, completionDate: TimeStamp? = nil, createdResourceArn: String? = nil, creationDate: TimeStamp? = nil, expectedCompletionTimeMinutes: Int64? = nil, iamRoleArn: String? = nil, percentDone: String? = nil, recoveryPointArn: String? = nil, restoreJobId: String? = nil, status: RestoreJobStatus? = nil, statusMessage: String? = nil) {
            self.backupSizeInBytes = backupSizeInBytes
            self.completionDate = completionDate
            self.createdResourceArn = createdResourceArn
            self.creationDate = creationDate
            self.expectedCompletionTimeMinutes = expectedCompletionTimeMinutes
            self.iamRoleArn = iamRoleArn
            self.percentDone = percentDone
            self.recoveryPointArn = recoveryPointArn
            self.restoreJobId = restoreJobId
            self.status = status
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case backupSizeInBytes = "BackupSizeInBytes"
            case completionDate = "CompletionDate"
            case createdResourceArn = "CreatedResourceArn"
            case creationDate = "CreationDate"
            case expectedCompletionTimeMinutes = "ExpectedCompletionTimeMinutes"
            case iamRoleArn = "IamRoleArn"
            case percentDone = "PercentDone"
            case recoveryPointArn = "RecoveryPointArn"
            case restoreJobId = "RestoreJobId"
            case status = "Status"
            case statusMessage = "StatusMessage"
        }
    }

    public struct ExportBackupPlanTemplateInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String

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

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

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

        /// The body of a backup plan template in JSON format.  This is a signed JSON document that cannot be modified before being passed to GetBackupPlanFromJSON.  
        public let backupPlanTemplateJson: String?

        public init(backupPlanTemplateJson: String? = nil) {
            self.backupPlanTemplateJson = backupPlanTemplateJson
        }

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

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

        /// A customer-supplied backup plan document in JSON format.
        public let backupPlanTemplateJson: String

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

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

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

        /// Specifies the body of a backup plan. Includes a BackupPlanName and one or more sets of Rules.
        public let backupPlan: BackupPlan?

        public init(backupPlan: BackupPlan? = nil) {
            self.backupPlan = backupPlan
        }

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

    public struct GetBackupPlanFromTemplateInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanTemplateId", location: .uri(locationName: "templateId"), required: true, type: .string)
        ]

        /// Uniquely identifies a stored backup plan template.
        public let backupPlanTemplateId: String

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

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

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

        /// Returns the body of a backup plan based on the target template, including the name, rules, and backup vault of the plan.
        public let backupPlanDocument: BackupPlan?

        public init(backupPlanDocument: BackupPlan? = nil) {
            self.backupPlanDocument = backupPlanDocument
        }

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

    public struct GetBackupPlanInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string), 
            AWSShapeMember(label: "VersionId", location: .querystring(locationName: "versionId"), required: false, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String
        /// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version IDs cannot be edited.
        public let versionId: String?

        public init(backupPlanId: String, versionId: String? = nil) {
            self.backupPlanId = backupPlanId
            self.versionId = versionId
        }

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

    public struct GetBackupPlanOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlan", required: false, type: .structure), 
            AWSShapeMember(label: "BackupPlanArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string), 
            AWSShapeMember(label: "DeletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "LastExecutionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "VersionId", required: false, type: .string)
        ]

        /// Specifies the body of a backup plan. Includes a BackupPlanName and one or more sets of Rules.
        public let backupPlan: BackupPlan?
        /// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
        public let backupPlanArn: String?
        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// The date and time that a backup plan is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?
        /// The date and time that a backup plan is deleted, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let deletionDate: TimeStamp?
        /// The last time a job to back up resources was executed with this backup plan. A date and time, in Unix format and Coordinated Universal Time (UTC). The value of LastExecutionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let lastExecutionDate: TimeStamp?
        /// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version IDs cannot be edited.
        public let versionId: String?

        public init(backupPlan: BackupPlan? = nil, backupPlanArn: String? = nil, backupPlanId: String? = nil, creationDate: TimeStamp? = nil, creatorRequestId: String? = nil, deletionDate: TimeStamp? = nil, lastExecutionDate: TimeStamp? = nil, versionId: String? = nil) {
            self.backupPlan = backupPlan
            self.backupPlanArn = backupPlanArn
            self.backupPlanId = backupPlanId
            self.creationDate = creationDate
            self.creatorRequestId = creatorRequestId
            self.deletionDate = deletionDate
            self.lastExecutionDate = lastExecutionDate
            self.versionId = versionId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlan = "BackupPlan"
            case backupPlanArn = "BackupPlanArn"
            case backupPlanId = "BackupPlanId"
            case creationDate = "CreationDate"
            case creatorRequestId = "CreatorRequestId"
            case deletionDate = "DeletionDate"
            case lastExecutionDate = "LastExecutionDate"
            case versionId = "VersionId"
        }
    }

    public struct GetBackupSelectionInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string), 
            AWSShapeMember(label: "SelectionId", location: .uri(locationName: "selectionId"), required: true, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String
        /// Uniquely identifies the body of a request to assign a set of resources to a backup plan.
        public let selectionId: String

        public init(backupPlanId: String, selectionId: String) {
            self.backupPlanId = backupPlanId
            self.selectionId = selectionId
        }

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

    public struct GetBackupSelectionOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "BackupSelection", required: false, type: .structure), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatorRequestId", required: false, type: .string), 
            AWSShapeMember(label: "SelectionId", required: false, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// Specifies the body of a request to assign a set of resources to a backup plan. It includes an array of resources, an optional array of patterns to exclude resources, an optional role to provide access to the AWS service that the resource belongs to, and an optional array of tags used to identify a set of resources.
        public let backupSelection: BackupSelection?
        /// The date and time a backup selection is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// A unique string that identifies the request and allows failed requests to be retried without the risk of executing the operation twice.
        public let creatorRequestId: String?
        /// Uniquely identifies the body of a request to assign a set of resources to a backup plan.
        public let selectionId: String?

        public init(backupPlanId: String? = nil, backupSelection: BackupSelection? = nil, creationDate: TimeStamp? = nil, creatorRequestId: String? = nil, selectionId: String? = nil) {
            self.backupPlanId = backupPlanId
            self.backupSelection = backupSelection
            self.creationDate = creationDate
            self.creatorRequestId = creatorRequestId
            self.selectionId = selectionId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanId = "BackupPlanId"
            case backupSelection = "BackupSelection"
            case creationDate = "CreationDate"
            case creatorRequestId = "CreatorRequestId"
            case selectionId = "SelectionId"
        }
    }

    public struct GetBackupVaultAccessPolicyInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String

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

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

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

    public struct GetBackupVaultAccessPolicyOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "Policy", required: false, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// The backup vault access policy document in JSON format.
        public let policy: String?

        public init(backupVaultArn: String? = nil, backupVaultName: String? = nil, policy: String? = nil) {
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.policy = policy
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case policy = "Policy"
        }
    }

    public struct GetBackupVaultNotificationsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String

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

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

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

    public struct GetBackupVaultNotificationsOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultEvents", required: false, type: .list), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "SNSTopicArn", required: false, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// An array of events that indicate the status of jobs to back up resources to the backup vault.
        public let backupVaultEvents: [BackupVaultEvent]?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// An ARN that uniquely identifies an Amazon Simple Notification Service (Amazon SNS) topic; for example, arn:aws:sns:us-west-2:111122223333:MyTopic.
        public let sNSTopicArn: String?

        public init(backupVaultArn: String? = nil, backupVaultEvents: [BackupVaultEvent]? = nil, backupVaultName: String? = nil, sNSTopicArn: String? = nil) {
            self.backupVaultArn = backupVaultArn
            self.backupVaultEvents = backupVaultEvents
            self.backupVaultName = backupVaultName
            self.sNSTopicArn = sNSTopicArn
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultArn = "BackupVaultArn"
            case backupVaultEvents = "BackupVaultEvents"
            case backupVaultName = "BackupVaultName"
            case sNSTopicArn = "SNSTopicArn"
        }
    }

    public struct GetRecoveryPointRestoreMetadataInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", location: .uri(locationName: "recoveryPointArn"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String

        public init(backupVaultName: String, recoveryPointArn: String) {
            self.backupVaultName = backupVaultName
            self.recoveryPointArn = recoveryPointArn
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

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

    public struct GetRecoveryPointRestoreMetadataOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "RestoreMetadata", required: false, type: .map)
        ]

        /// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// A set of metadata key-value pairs that lists the metadata key-value pairs that are required to restore the recovery point.
        public let restoreMetadata: [String: String]?

        public init(backupVaultArn: String? = nil, recoveryPointArn: String? = nil, restoreMetadata: [String: String]? = nil) {
            self.backupVaultArn = backupVaultArn
            self.recoveryPointArn = recoveryPointArn
            self.restoreMetadata = restoreMetadata
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultArn = "BackupVaultArn"
            case recoveryPointArn = "RecoveryPointArn"
            case restoreMetadata = "RestoreMetadata"
        }
    }

    public struct GetSupportedResourceTypesOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ResourceTypes", required: false, type: .list)
        ]

        /// Contains a string with the supported AWS resource types:    EBS for Amazon Elastic Block Store    SGW for AWS Storage Gateway    RDS for Amazon Relational Database Service    DDB for Amazon DynamoDB    EFS for Amazon Elastic File System  
        public let resourceTypes: [String]?

        public init(resourceTypes: [String]? = nil) {
            self.resourceTypes = resourceTypes
        }

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

    public struct Lifecycle: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "DeleteAfterDays", required: false, type: .long), 
            AWSShapeMember(label: "MoveToColdStorageAfterDays", required: false, type: .long)
        ]

        /// Specifies the number of days after creation that a recovery point is deleted. Must be greater than MoveToColdStorageAfterDays.
        public let deleteAfterDays: Int64?
        /// Specifies the number of days after creation that a recovery point is moved to cold storage.
        public let moveToColdStorageAfterDays: Int64?

        public init(deleteAfterDays: Int64? = nil, moveToColdStorageAfterDays: Int64? = nil) {
            self.deleteAfterDays = deleteAfterDays
            self.moveToColdStorageAfterDays = moveToColdStorageAfterDays
        }

        private enum CodingKeys: String, CodingKey {
            case deleteAfterDays = "DeleteAfterDays"
            case moveToColdStorageAfterDays = "MoveToColdStorageAfterDays"
        }
    }

    public struct ListBackupJobsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ByBackupVaultName", location: .querystring(locationName: "backupVaultName"), required: false, type: .string), 
            AWSShapeMember(label: "ByCreatedAfter", location: .querystring(locationName: "createdAfter"), required: false, type: .timestamp), 
            AWSShapeMember(label: "ByCreatedBefore", location: .querystring(locationName: "createdBefore"), required: false, type: .timestamp), 
            AWSShapeMember(label: "ByResourceArn", location: .querystring(locationName: "resourceArn"), required: false, type: .string), 
            AWSShapeMember(label: "ByResourceType", location: .querystring(locationName: "resourceType"), required: false, type: .string), 
            AWSShapeMember(label: "ByState", location: .querystring(locationName: "state"), required: false, type: .enum), 
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// Returns only backup jobs that will be stored in the specified backup vault. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let byBackupVaultName: String?
        /// Returns only backup jobs that were created after the specified date.
        public let byCreatedAfter: TimeStamp?
        /// Returns only backup jobs that were created before the specified date.
        public let byCreatedBefore: TimeStamp?
        /// Returns only backup jobs that match the specified resource Amazon Resource Name (ARN).
        public let byResourceArn: String?
        /// Returns only backup jobs for the specified resources:    EBS for Amazon Elastic Block Store    SGW for AWS Storage Gateway    RDS for Amazon Relational Database Service    DDB for Amazon DynamoDB    EFS for Amazon Elastic File System  
        public let byResourceType: String?
        /// Returns only backup jobs that are in the specified state.
        public let byState: BackupJobState?
        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

        public init(byBackupVaultName: String? = nil, byCreatedAfter: TimeStamp? = nil, byCreatedBefore: TimeStamp? = nil, byResourceArn: String? = nil, byResourceType: String? = nil, byState: BackupJobState? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.byBackupVaultName = byBackupVaultName
            self.byCreatedAfter = byCreatedAfter
            self.byCreatedBefore = byCreatedBefore
            self.byResourceArn = byResourceArn
            self.byResourceType = byResourceType
            self.byState = byState
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try validate(self.byBackupVaultName, name:"byBackupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
            try validate(self.byResourceType, name:"byResourceType", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case byBackupVaultName = "backupVaultName"
            case byCreatedAfter = "createdAfter"
            case byCreatedBefore = "createdBefore"
            case byResourceArn = "resourceArn"
            case byResourceType = "resourceType"
            case byState = "state"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

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

        /// An array of structures containing metadata about your backup jobs returned in JSON format.
        public let backupJobs: [BackupJob]?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case backupJobs = "BackupJobs"
            case nextToken = "NextToken"
        }
    }

    public struct ListBackupPlanTemplatesInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// An array of template list items containing metadata about your saved templates.
        public let backupPlanTemplatesList: [BackupPlanTemplatesListMember]?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case backupPlanTemplatesList = "BackupPlanTemplatesList"
            case nextToken = "NextToken"
        }
    }

    public struct ListBackupPlanVersionsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string), 
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String
        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// An array of version list items containing metadata about your backup plans.
        public let backupPlanVersionsList: [BackupPlansListMember]?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case backupPlanVersionsList = "BackupPlanVersionsList"
            case nextToken = "NextToken"
        }
    }

    public struct ListBackupPlansInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IncludeDeleted", location: .querystring(locationName: "includeDeleted"), required: false, type: .boolean), 
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// A Boolean value with a default value of FALSE that returns deleted backup plans when set to TRUE.
        public let includeDeleted: Bool?
        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// An array of backup plan list items containing metadata about your saved backup plans.
        public let backupPlansList: [BackupPlansListMember]?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case backupPlansList = "BackupPlansList"
            case nextToken = "NextToken"
        }
    }

    public struct ListBackupSelectionsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string), 
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// Uniquely identifies a backup plan.
        public let backupPlanId: String
        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// An array of backup selection list items containing metadata about each resource in the list.
        public let backupSelectionsList: [BackupSelectionsListMember]?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case backupSelectionsList = "BackupSelectionsList"
            case nextToken = "NextToken"
        }
    }

    public struct ListBackupVaultsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// An array of backup vault list members containing vault metadata, including Amazon Resource Name (ARN), display name, creation date, number of saved recovery points, and encryption information if the resources saved in the backup vault are encrypted.
        public let backupVaultList: [BackupVaultListMember]?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        private enum CodingKeys: String, CodingKey {
            case backupVaultList = "BackupVaultList"
            case nextToken = "NextToken"
        }
    }

    public struct ListProtectedResourcesInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?
        /// An array of resources successfully backed up by AWS Backup including the time the resource was saved, an Amazon Resource Name (ARN) of the resource, and a resource type.
        public let results: [ProtectedResource]?

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case results = "Results"
        }
    }

    public struct ListRecoveryPointsByBackupVaultInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "ByBackupPlanId", location: .querystring(locationName: "backupPlanId"), required: false, type: .string), 
            AWSShapeMember(label: "ByCreatedAfter", location: .querystring(locationName: "createdAfter"), required: false, type: .timestamp), 
            AWSShapeMember(label: "ByCreatedBefore", location: .querystring(locationName: "createdBefore"), required: false, type: .timestamp), 
            AWSShapeMember(label: "ByResourceArn", location: .querystring(locationName: "resourceArn"), required: false, type: .string), 
            AWSShapeMember(label: "ByResourceType", location: .querystring(locationName: "resourceType"), required: false, type: .string), 
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// Returns only recovery points that match the specified backup plan ID.
        public let byBackupPlanId: String?
        /// Returns only recovery points that were created after the specified timestamp.
        public let byCreatedAfter: TimeStamp?
        /// Returns only recovery points that were created before the specified timestamp.
        public let byCreatedBefore: TimeStamp?
        /// Returns only recovery points that match the specified resource Amazon Resource Name (ARN).
        public let byResourceArn: String?
        /// Returns only recovery points that match the specified resource type.
        public let byResourceType: String?
        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

        public init(backupVaultName: String, byBackupPlanId: String? = nil, byCreatedAfter: TimeStamp? = nil, byCreatedBefore: TimeStamp? = nil, byResourceArn: String? = nil, byResourceType: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.backupVaultName = backupVaultName
            self.byBackupPlanId = byBackupPlanId
            self.byCreatedAfter = byCreatedAfter
            self.byCreatedBefore = byCreatedBefore
            self.byResourceArn = byResourceArn
            self.byResourceType = byResourceType
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
            try validate(self.byResourceType, name:"byResourceType", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultName = "backupVaultName"
            case byBackupPlanId = "backupPlanId"
            case byCreatedAfter = "createdAfter"
            case byCreatedBefore = "createdBefore"
            case byResourceArn = "resourceArn"
            case byResourceType = "resourceType"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

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

        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?
        /// An array of objects that contain detailed information about recovery points saved in a backup vault.
        public let recoveryPoints: [RecoveryPointByBackupVault]?

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case recoveryPoints = "RecoveryPoints"
        }
    }

    public struct ListRecoveryPointsByResourceInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string), 
            AWSShapeMember(label: "ResourceArn", location: .uri(locationName: "resourceArn"), required: true, type: .string)
        ]

        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?
        /// An ARN that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let resourceArn: String

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?
        /// An array of objects that contain detailed information about recovery points of the specified resource type.
        public let recoveryPoints: [RecoveryPointByResource]?

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case recoveryPoints = "RecoveryPoints"
        }
    }

    public struct ListRestoreJobsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string)
        ]

        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

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

        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?
        /// An array of objects that contain detailed information about jobs to restore saved resources.
        public let restoreJobs: [RestoreJobsListMember]?

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case restoreJobs = "RestoreJobs"
        }
    }

    public struct ListTagsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "MaxResults", location: .querystring(locationName: "maxResults"), required: false, type: .integer), 
            AWSShapeMember(label: "NextToken", location: .querystring(locationName: "nextToken"), required: false, type: .string), 
            AWSShapeMember(label: "ResourceArn", location: .uri(locationName: "resourceArn"), required: true, type: .string)
        ]

        /// The maximum number of items to be returned.
        public let maxResults: Int?
        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?
        /// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the type of resource. Valid targets for ListTags are recovery points, backup plans, and backup vaults.
        public let resourceArn: String

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

        public func validate(name: String) throws {
            try validate(self.maxResults, name:"maxResults", parent: name, max: 1000)
            try validate(self.maxResults, name:"maxResults", parent: name, min: 1)
        }

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

    public struct ListTagsOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "NextToken", required: false, type: .string), 
            AWSShapeMember(label: "Tags", required: false, type: .map)
        ]

        /// The next item following a partial list of returned items. For example, if a request is made to return maxResults number of items, NextToken allows you to return more items in your list starting at the location pointed to by the next token.
        public let nextToken: String?
        /// To help organize your resources, you can assign your own metadata to the resources you create. Each tag is a key-value pair.
        public let tags: [String: String]?

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

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case tags = "Tags"
        }
    }

    public struct ProtectedResource: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "LastBackupTime", required: false, type: .timestamp), 
            AWSShapeMember(label: "ResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceType", required: false, type: .string)
        ]

        /// The date and time a resource was last backed up, in Unix format and Coordinated Universal Time (UTC). The value of LastBackupTime is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let lastBackupTime: TimeStamp?
        /// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let resourceArn: String?
        /// The type of AWS resource; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
        public let resourceType: String?

        public init(lastBackupTime: TimeStamp? = nil, resourceArn: String? = nil, resourceType: String? = nil) {
            self.lastBackupTime = lastBackupTime
            self.resourceArn = resourceArn
            self.resourceType = resourceType
        }

        private enum CodingKeys: String, CodingKey {
            case lastBackupTime = "LastBackupTime"
            case resourceArn = "ResourceArn"
            case resourceType = "ResourceType"
        }
    }

    public struct PutBackupVaultAccessPolicyInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "Policy", required: false, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// The backup vault access policy document in JSON format.
        public let policy: String?

        public init(backupVaultName: String, policy: String? = nil) {
            self.backupVaultName = backupVaultName
            self.policy = policy
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultName = "backupVaultName"
            case policy = "Policy"
        }
    }

    public struct PutBackupVaultNotificationsInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultEvents", required: true, type: .list), 
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "SNSTopicArn", required: true, type: .string)
        ]

        /// An array of events that indicate the status of jobs to back up resources to the backup vault.
        public let backupVaultEvents: [BackupVaultEvent]
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// The Amazon Resource Name (ARN) that specifies the topic for a backup vault’s events; for example, arn:aws:sns:us-west-2:111122223333:MyVaultTopic.
        public let sNSTopicArn: String

        public init(backupVaultEvents: [BackupVaultEvent], backupVaultName: String, sNSTopicArn: String) {
            self.backupVaultEvents = backupVaultEvents
            self.backupVaultName = backupVaultName
            self.sNSTopicArn = sNSTopicArn
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultEvents = "BackupVaultEvents"
            case backupVaultName = "backupVaultName"
            case sNSTopicArn = "SNSTopicArn"
        }
    }

    public struct RecoveryPointByBackupVault: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupSizeInBytes", required: false, type: .long), 
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "CalculatedLifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "CompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatedBy", required: false, type: .structure), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "EncryptionKeyArn", required: false, type: .string), 
            AWSShapeMember(label: "IamRoleArn", required: false, type: .string), 
            AWSShapeMember(label: "IsEncrypted", required: false, type: .boolean), 
            AWSShapeMember(label: "LastRestoreTime", required: false, type: .timestamp), 
            AWSShapeMember(label: "Lifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "ResourceType", required: false, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum)
        ]

        /// The size, in bytes, of a backup.
        public let backupSizeInBytes: Int64?
        /// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// A CalculatedLifecycle object containing DeleteAt and MoveToColdStorageAt timestamps.
        public let calculatedLifecycle: CalculatedLifecycle?
        /// The date and time a job to restore a recovery point is completed, in Unix format and Coordinated Universal Time (UTC). The value of CompletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let completionDate: TimeStamp?
        /// Contains identifying information about the creation of a recovery point, including the BackupPlanArn, BackupPlanId, BackupPlanVersion, and BackupRuleId of the backup plan that is used to create it.
        public let createdBy: RecoveryPointCreator?
        /// The date and time a recovery point is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// The server-side encryption key that is used to protect your backups; for example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
        public let encryptionKeyArn: String?
        /// Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String?
        /// A Boolean value that is returned as TRUE if the specified recovery point is encrypted, or FALSE if the recovery point is not encrypted.
        public let isEncrypted: Bool?
        /// The date and time a recovery point was last restored, in Unix format and Coordinated Universal Time (UTC). The value of LastRestoreTime is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let lastRestoreTime: TimeStamp?
        /// The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup transitions and expires backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “expire after days” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold. 
        public let lifecycle: Lifecycle?
        /// An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// An ARN that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let resourceArn: String?
        /// The type of AWS resource saved as a recovery point; for example, an Amazon Elastic Block Store (Amazon EBS) volume or an Amazon Relational Database Service (Amazon RDS) database.
        public let resourceType: String?
        /// A status code specifying the state of the recovery point.
        public let status: RecoveryPointStatus?

        public init(backupSizeInBytes: Int64? = nil, backupVaultArn: String? = nil, backupVaultName: String? = nil, calculatedLifecycle: CalculatedLifecycle? = nil, completionDate: TimeStamp? = nil, createdBy: RecoveryPointCreator? = nil, creationDate: TimeStamp? = nil, encryptionKeyArn: String? = nil, iamRoleArn: String? = nil, isEncrypted: Bool? = nil, lastRestoreTime: TimeStamp? = nil, lifecycle: Lifecycle? = nil, recoveryPointArn: String? = nil, resourceArn: String? = nil, resourceType: String? = nil, status: RecoveryPointStatus? = nil) {
            self.backupSizeInBytes = backupSizeInBytes
            self.backupVaultArn = backupVaultArn
            self.backupVaultName = backupVaultName
            self.calculatedLifecycle = calculatedLifecycle
            self.completionDate = completionDate
            self.createdBy = createdBy
            self.creationDate = creationDate
            self.encryptionKeyArn = encryptionKeyArn
            self.iamRoleArn = iamRoleArn
            self.isEncrypted = isEncrypted
            self.lastRestoreTime = lastRestoreTime
            self.lifecycle = lifecycle
            self.recoveryPointArn = recoveryPointArn
            self.resourceArn = resourceArn
            self.resourceType = resourceType
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case backupSizeInBytes = "BackupSizeInBytes"
            case backupVaultArn = "BackupVaultArn"
            case backupVaultName = "BackupVaultName"
            case calculatedLifecycle = "CalculatedLifecycle"
            case completionDate = "CompletionDate"
            case createdBy = "CreatedBy"
            case creationDate = "CreationDate"
            case encryptionKeyArn = "EncryptionKeyArn"
            case iamRoleArn = "IamRoleArn"
            case isEncrypted = "IsEncrypted"
            case lastRestoreTime = "LastRestoreTime"
            case lifecycle = "Lifecycle"
            case recoveryPointArn = "RecoveryPointArn"
            case resourceArn = "ResourceArn"
            case resourceType = "ResourceType"
            case status = "Status"
        }
    }

    public struct RecoveryPointByResource: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupSizeBytes", required: false, type: .long), 
            AWSShapeMember(label: "BackupVaultName", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "EncryptionKeyArn", required: false, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum)
        ]

        /// The size, in bytes, of a backup.
        public let backupSizeBytes: Int64?
        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String?
        /// The date and time a recovery point is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// The server-side encryption key that is used to protect your backups; for example, arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab.
        public let encryptionKeyArn: String?
        /// An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// A status code specifying the state of the recovery point.
        public let status: RecoveryPointStatus?

        public init(backupSizeBytes: Int64? = nil, backupVaultName: String? = nil, creationDate: TimeStamp? = nil, encryptionKeyArn: String? = nil, recoveryPointArn: String? = nil, status: RecoveryPointStatus? = nil) {
            self.backupSizeBytes = backupSizeBytes
            self.backupVaultName = backupVaultName
            self.creationDate = creationDate
            self.encryptionKeyArn = encryptionKeyArn
            self.recoveryPointArn = recoveryPointArn
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case backupSizeBytes = "BackupSizeBytes"
            case backupVaultName = "BackupVaultName"
            case creationDate = "CreationDate"
            case encryptionKeyArn = "EncryptionKeyArn"
            case recoveryPointArn = "RecoveryPointArn"
            case status = "Status"
        }
    }

    public struct RecoveryPointCreator: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanVersion", required: false, type: .string), 
            AWSShapeMember(label: "BackupRuleId", required: false, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
        public let backupPlanArn: String?
        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// Version IDs are unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. They cannot be edited.
        public let backupPlanVersion: String?
        /// Uniquely identifies a rule used to schedule the backup of a selection of resources.
        public let backupRuleId: String?

        public init(backupPlanArn: String? = nil, backupPlanId: String? = nil, backupPlanVersion: String? = nil, backupRuleId: String? = nil) {
            self.backupPlanArn = backupPlanArn
            self.backupPlanId = backupPlanId
            self.backupPlanVersion = backupPlanVersion
            self.backupRuleId = backupRuleId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanArn = "BackupPlanArn"
            case backupPlanId = "BackupPlanId"
            case backupPlanVersion = "BackupPlanVersion"
            case backupRuleId = "BackupRuleId"
        }
    }

    public enum RecoveryPointStatus: String, CustomStringConvertible, Codable {
        case completed = "COMPLETED"
        case partial = "PARTIAL"
        case deleting = "DELETING"
        case expired = "EXPIRED"
        public var description: String { return self.rawValue }
    }

    public enum RestoreJobStatus: String, CustomStringConvertible, Codable {
        case pending = "PENDING"
        case running = "RUNNING"
        case completed = "COMPLETED"
        case aborted = "ABORTED"
        case failed = "FAILED"
        public var description: String { return self.rawValue }
    }

    public struct RestoreJobsListMember: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupSizeInBytes", required: false, type: .long), 
            AWSShapeMember(label: "CompletionDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "CreatedResourceArn", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "ExpectedCompletionTimeMinutes", required: false, type: .long), 
            AWSShapeMember(label: "IamRoleArn", required: false, type: .string), 
            AWSShapeMember(label: "PercentDone", required: false, type: .string), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string), 
            AWSShapeMember(label: "RestoreJobId", required: false, type: .string), 
            AWSShapeMember(label: "Status", required: false, type: .enum), 
            AWSShapeMember(label: "StatusMessage", required: false, type: .string)
        ]

        /// The size, in bytes, of the restored resource.
        public let backupSizeInBytes: Int64?
        /// The date and time a job to restore a recovery point is completed, in Unix format and Coordinated Universal Time (UTC). The value of CompletionDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let completionDate: TimeStamp?
        /// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let createdResourceArn: String?
        /// The date and time a restore job is created, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// The amount of time in minutes that a job restoring a recovery point is expected to take.
        public let expectedCompletionTimeMinutes: Int64?
        /// Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String?
        /// Contains an estimated percentage complete of a job at the time the job status was queried.
        public let percentDone: String?
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?
        /// Uniquely identifies the job that restores a recovery point.
        public let restoreJobId: String?
        /// A status code specifying the state of the job initiated by AWS Backup to restore a recovery point.
        public let status: RestoreJobStatus?
        /// A detailed message explaining the status of the job to restore a recovery point.
        public let statusMessage: String?

        public init(backupSizeInBytes: Int64? = nil, completionDate: TimeStamp? = nil, createdResourceArn: String? = nil, creationDate: TimeStamp? = nil, expectedCompletionTimeMinutes: Int64? = nil, iamRoleArn: String? = nil, percentDone: String? = nil, recoveryPointArn: String? = nil, restoreJobId: String? = nil, status: RestoreJobStatus? = nil, statusMessage: String? = nil) {
            self.backupSizeInBytes = backupSizeInBytes
            self.completionDate = completionDate
            self.createdResourceArn = createdResourceArn
            self.creationDate = creationDate
            self.expectedCompletionTimeMinutes = expectedCompletionTimeMinutes
            self.iamRoleArn = iamRoleArn
            self.percentDone = percentDone
            self.recoveryPointArn = recoveryPointArn
            self.restoreJobId = restoreJobId
            self.status = status
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case backupSizeInBytes = "BackupSizeInBytes"
            case completionDate = "CompletionDate"
            case createdResourceArn = "CreatedResourceArn"
            case creationDate = "CreationDate"
            case expectedCompletionTimeMinutes = "ExpectedCompletionTimeMinutes"
            case iamRoleArn = "IamRoleArn"
            case percentDone = "PercentDone"
            case recoveryPointArn = "RecoveryPointArn"
            case restoreJobId = "RestoreJobId"
            case status = "Status"
            case statusMessage = "StatusMessage"
        }
    }

    public struct StartBackupJobInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", required: true, type: .string), 
            AWSShapeMember(label: "CompleteWindowMinutes", required: false, type: .long), 
            AWSShapeMember(label: "IamRoleArn", required: true, type: .string), 
            AWSShapeMember(label: "IdempotencyToken", required: false, type: .string), 
            AWSShapeMember(label: "Lifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "RecoveryPointTags", required: false, type: .map), 
            AWSShapeMember(label: "ResourceArn", required: true, type: .string), 
            AWSShapeMember(label: "StartWindowMinutes", required: false, type: .long)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// The amount of time AWS Backup attempts a backup before canceling the job and returning an error.
        public let completeWindowMinutes: Int64?
        /// Specifies the IAM role ARN used to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String
        /// A customer chosen string that can be used to distinguish between calls to StartBackupJob. Idempotency tokens time out after one hour. Therefore, if you call StartBackupJob multiple times with the same idempotency token within one hour, AWS Backup recognizes that you are requesting only one backup job and initiates only one. If you change the idempotency token for each call, AWS Backup recognizes that you are requesting to start multiple backups.
        public let idempotencyToken: String?
        /// The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup will transition and expire backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “expire after days” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold. 
        public let lifecycle: Lifecycle?
        /// To help organize your resources, you can assign your own metadata to the resources that you create. Each tag is a key-value pair.
        public let recoveryPointTags: [String: String]?
        /// An Amazon Resource Name (ARN) that uniquely identifies a resource. The format of the ARN depends on the resource type.
        public let resourceArn: String
        /// The amount of time in minutes before beginning a backup.
        public let startWindowMinutes: Int64?

        public init(backupVaultName: String, completeWindowMinutes: Int64? = nil, iamRoleArn: String, idempotencyToken: String? = nil, lifecycle: Lifecycle? = nil, recoveryPointTags: [String: String]? = nil, resourceArn: String, startWindowMinutes: Int64? = nil) {
            self.backupVaultName = backupVaultName
            self.completeWindowMinutes = completeWindowMinutes
            self.iamRoleArn = iamRoleArn
            self.idempotencyToken = idempotencyToken
            self.lifecycle = lifecycle
            self.recoveryPointTags = recoveryPointTags
            self.resourceArn = resourceArn
            self.startWindowMinutes = startWindowMinutes
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultName = "BackupVaultName"
            case completeWindowMinutes = "CompleteWindowMinutes"
            case iamRoleArn = "IamRoleArn"
            case idempotencyToken = "IdempotencyToken"
            case lifecycle = "Lifecycle"
            case recoveryPointTags = "RecoveryPointTags"
            case resourceArn = "ResourceArn"
            case startWindowMinutes = "StartWindowMinutes"
        }
    }

    public struct StartBackupJobOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupJobId", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string)
        ]

        /// Uniquely identifies a request to AWS Backup to back up a resource.
        public let backupJobId: String?
        /// The date and time that a backup job is started, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?

        public init(backupJobId: String? = nil, creationDate: TimeStamp? = nil, recoveryPointArn: String? = nil) {
            self.backupJobId = backupJobId
            self.creationDate = creationDate
            self.recoveryPointArn = recoveryPointArn
        }

        private enum CodingKeys: String, CodingKey {
            case backupJobId = "BackupJobId"
            case creationDate = "CreationDate"
            case recoveryPointArn = "RecoveryPointArn"
        }
    }

    public struct StartRestoreJobInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "IamRoleArn", required: true, type: .string), 
            AWSShapeMember(label: "IdempotencyToken", required: false, type: .string), 
            AWSShapeMember(label: "Metadata", required: true, type: .map), 
            AWSShapeMember(label: "RecoveryPointArn", required: true, type: .string), 
            AWSShapeMember(label: "ResourceType", required: false, type: .string)
        ]

        /// The Amazon Resource Name (ARN) of the IAM role that AWS Backup uses to create the target recovery point; for example, arn:aws:iam::123456789012:role/S3Access.
        public let iamRoleArn: String
        /// A customer chosen string that can be used to distinguish between calls to StartRestoreJob. Idempotency tokens time out after one hour. Therefore, if you call StartRestoreJob multiple times with the same idempotency token within one hour, AWS Backup recognizes that you are requesting only one restore job and initiates only one. If you change the idempotency token for each call, AWS Backup recognizes that you are requesting to start multiple restores. 
        public let idempotencyToken: String?
        /// A set of metadata key-value pairs. Lists the metadata that the recovery point was created with.
        public let metadata: [String: String]
        /// An ARN that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String
        /// Starts a job to restore a recovery point for one of the following resources:    EBS for Amazon Elastic Block Store    SGW for AWS Storage Gateway    RDS for Amazon Relational Database Service    DDB for Amazon DynamoDB    EFS for Amazon Elastic File System  
        public let resourceType: String?

        public init(iamRoleArn: String, idempotencyToken: String? = nil, metadata: [String: String], recoveryPointArn: String, resourceType: String? = nil) {
            self.iamRoleArn = iamRoleArn
            self.idempotencyToken = idempotencyToken
            self.metadata = metadata
            self.recoveryPointArn = recoveryPointArn
            self.resourceType = resourceType
        }

        public func validate(name: String) throws {
            try validate(self.resourceType, name:"resourceType", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case iamRoleArn = "IamRoleArn"
            case idempotencyToken = "IdempotencyToken"
            case metadata = "Metadata"
            case recoveryPointArn = "RecoveryPointArn"
            case resourceType = "ResourceType"
        }
    }

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

        /// Uniquely identifies the job that restores a recovery point.
        public let restoreJobId: String?

        public init(restoreJobId: String? = nil) {
            self.restoreJobId = restoreJobId
        }

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

    public struct StopBackupJobInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupJobId", location: .uri(locationName: "backupJobId"), required: true, type: .string)
        ]

        /// Uniquely identifies a request to AWS Backup to back up a resource.
        public let backupJobId: String

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

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

    public enum StorageClass: String, CustomStringConvertible, Codable {
        case warm = "WARM"
        case cold = "COLD"
        case deleted = "DELETED"
        public var description: String { return self.rawValue }
    }

    public struct TagResourceInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ResourceArn", location: .uri(locationName: "resourceArn"), required: true, type: .string), 
            AWSShapeMember(label: "Tags", required: true, type: .map)
        ]

        /// An ARN that uniquely identifies a resource. The format of the ARN depends on the type of the tagged resource.
        public let resourceArn: String
        /// Key-value pairs that are used to help organize your resources. You can assign your own metadata to the resources you create. 
        public let tags: [String: String]

        public init(resourceArn: String, tags: [String: String]) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case resourceArn = "resourceArn"
            case tags = "Tags"
        }
    }

    public struct UntagResourceInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "ResourceArn", location: .uri(locationName: "resourceArn"), required: true, type: .string), 
            AWSShapeMember(label: "TagKeyList", required: true, type: .list)
        ]

        /// An ARN that uniquely identifies a resource. The format of the ARN depends on the type of the tagged resource.
        public let resourceArn: String
        /// A list of keys to identify which key-value tags to remove from a resource.
        public let tagKeyList: [String]

        public init(resourceArn: String, tagKeyList: [String]) {
            self.resourceArn = resourceArn
            self.tagKeyList = tagKeyList
        }

        private enum CodingKeys: String, CodingKey {
            case resourceArn = "resourceArn"
            case tagKeyList = "TagKeyList"
        }
    }

    public struct UpdateBackupPlanInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlan", required: true, type: .structure), 
            AWSShapeMember(label: "BackupPlanId", location: .uri(locationName: "backupPlanId"), required: true, type: .string)
        ]

        /// Specifies the body of a backup plan. Includes a BackupPlanName and one or more sets of Rules.
        public let backupPlan: BackupPlanInput
        /// Uniquely identifies a backup plan.
        public let backupPlanId: String

        public init(backupPlan: BackupPlanInput, backupPlanId: String) {
            self.backupPlan = backupPlan
            self.backupPlanId = backupPlanId
        }

        public func validate(name: String) throws {
            try self.backupPlan.validate(name: "\(name).backupPlan")
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlan = "BackupPlan"
            case backupPlanId = "backupPlanId"
        }
    }

    public struct UpdateBackupPlanOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupPlanArn", required: false, type: .string), 
            AWSShapeMember(label: "BackupPlanId", required: false, type: .string), 
            AWSShapeMember(label: "CreationDate", required: false, type: .timestamp), 
            AWSShapeMember(label: "VersionId", required: false, type: .string)
        ]

        /// An Amazon Resource Name (ARN) that uniquely identifies a backup plan; for example, arn:aws:backup:us-east-1:123456789012:plan:8F81F553-3A74-4A3F-B93D-B3360DC80C50.
        public let backupPlanArn: String?
        /// Uniquely identifies a backup plan.
        public let backupPlanId: String?
        /// The date and time a backup plan is updated, in Unix format and Coordinated Universal Time (UTC). The value of CreationDate is accurate to milliseconds. For example, the value 1516925490.087 represents Friday, January 26, 2018 12:11:30.087 AM.
        public let creationDate: TimeStamp?
        /// Unique, randomly generated, Unicode, UTF-8 encoded strings that are at most 1,024 bytes long. Version Ids cannot be edited.
        public let versionId: String?

        public init(backupPlanArn: String? = nil, backupPlanId: String? = nil, creationDate: TimeStamp? = nil, versionId: String? = nil) {
            self.backupPlanArn = backupPlanArn
            self.backupPlanId = backupPlanId
            self.creationDate = creationDate
            self.versionId = versionId
        }

        private enum CodingKeys: String, CodingKey {
            case backupPlanArn = "BackupPlanArn"
            case backupPlanId = "BackupPlanId"
            case creationDate = "CreationDate"
            case versionId = "VersionId"
        }
    }

    public struct UpdateRecoveryPointLifecycleInput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultName", location: .uri(locationName: "backupVaultName"), required: true, type: .string), 
            AWSShapeMember(label: "Lifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "RecoveryPointArn", location: .uri(locationName: "recoveryPointArn"), required: true, type: .string)
        ]

        /// The name of a logical container where backups are stored. Backup vaults are identified by names that are unique to the account used to create them and the AWS Region where they are created. They consist of lowercase letters, numbers, and hyphens.
        public let backupVaultName: String
        /// The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup transitions and expires backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “expire after days” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold. 
        public let lifecycle: Lifecycle?
        /// An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String

        public init(backupVaultName: String, lifecycle: Lifecycle? = nil, recoveryPointArn: String) {
            self.backupVaultName = backupVaultName
            self.lifecycle = lifecycle
            self.recoveryPointArn = recoveryPointArn
        }

        public func validate(name: String) throws {
            try validate(self.backupVaultName, name:"backupVaultName", parent: name, pattern: "^[a-zA-Z0-9\\-\\_\\.]{1,50}$")
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultName = "backupVaultName"
            case lifecycle = "Lifecycle"
            case recoveryPointArn = "recoveryPointArn"
        }
    }

    public struct UpdateRecoveryPointLifecycleOutput: AWSShape {
        public static var _members: [AWSShapeMember] = [
            AWSShapeMember(label: "BackupVaultArn", required: false, type: .string), 
            AWSShapeMember(label: "CalculatedLifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "Lifecycle", required: false, type: .structure), 
            AWSShapeMember(label: "RecoveryPointArn", required: false, type: .string)
        ]

        /// An ARN that uniquely identifies a backup vault; for example, arn:aws:backup:us-east-1:123456789012:vault:aBackupVault.
        public let backupVaultArn: String?
        /// A CalculatedLifecycle object containing DeleteAt and MoveToColdStorageAt timestamps.
        public let calculatedLifecycle: CalculatedLifecycle?
        /// The lifecycle defines when a protected resource is transitioned to cold storage and when it expires. AWS Backup transitions and expires backups automatically according to the lifecycle that you define.  Backups transitioned to cold storage must be stored in cold storage for a minimum of 90 days. Therefore, the “expire after days” setting must be 90 days greater than the “transition to cold after days” setting. The “transition to cold after days” setting cannot be changed after a backup has been transitioned to cold. 
        public let lifecycle: Lifecycle?
        /// An Amazon Resource Name (ARN) that uniquely identifies a recovery point; for example, arn:aws:backup:us-east-1:123456789012:recovery-point:1EB3B5E7-9EB0-435A-A80B-108B488B0D45.
        public let recoveryPointArn: String?

        public init(backupVaultArn: String? = nil, calculatedLifecycle: CalculatedLifecycle? = nil, lifecycle: Lifecycle? = nil, recoveryPointArn: String? = nil) {
            self.backupVaultArn = backupVaultArn
            self.calculatedLifecycle = calculatedLifecycle
            self.lifecycle = lifecycle
            self.recoveryPointArn = recoveryPointArn
        }

        private enum CodingKeys: String, CodingKey {
            case backupVaultArn = "BackupVaultArn"
            case calculatedLifecycle = "CalculatedLifecycle"
            case lifecycle = "Lifecycle"
            case recoveryPointArn = "RecoveryPointArn"
        }
    }
}
